c87c4bbc91
Co-authored-by: Joe <joe@vega.xyz>
291 lines
11 KiB
TypeScript
291 lines
11 KiB
TypeScript
import {
|
|
navigateTo,
|
|
waitForSpinner,
|
|
navigation,
|
|
turnTelemetryOff,
|
|
} from '../../support/common.functions';
|
|
import {
|
|
createRawProposal,
|
|
createTenDigitUnixTimeStampForSpecifiedDays,
|
|
enterUniqueFreeFormProposalBody,
|
|
generateFreeFormProposalTitle,
|
|
getDateFormatForSpecifiedDays,
|
|
getProposalIdFromList,
|
|
getProposalInformationFromTable,
|
|
getSubmittedProposalFromProposalList,
|
|
goToMakeNewProposal,
|
|
governanceProposalType,
|
|
voteForProposal,
|
|
waitForProposalSubmitted,
|
|
waitForProposalSync,
|
|
} from '../../../../governance-e2e/src/support/governance.functions';
|
|
import { ensureSpecifiedUnstakedTokensAreAssociated } from '../../../../governance-e2e/src/support/staking.functions';
|
|
import { ethereumWalletConnect } from '../../../../governance-e2e/src/support/wallet-eth.functions';
|
|
import { vegaWalletSetSpecifiedApprovalAmount } from '../../../../governance-e2e/src/support/wallet-teardown.functions';
|
|
import type { testFreeformProposal } from '../../support/common-interfaces';
|
|
import { formatDateWithLocalTimezone } from '@vegaprotocol/utils';
|
|
|
|
const proposalVoteProgressForPercentage =
|
|
'[data-testid="vote-progress-indicator-percentage-for"]';
|
|
const proposalVoteProgressAgainstPercentage =
|
|
'[data-testid="vote-progress-indicator-percentage-against"]';
|
|
const proposalVoteProgressForTokens =
|
|
'[data-testid="vote-progress-indicator-tokens-for"]';
|
|
const proposalVoteProgressAgainstTokens =
|
|
'[data-testid="vote-progress-indicator-tokens-against"]';
|
|
const changeVoteButton = '[data-testid="change-vote-button"]';
|
|
const proposalDetailsTitle = '[data-testid="proposal-title"]';
|
|
const proposalDetailsDescription = '[data-testid="proposal-description"]';
|
|
const openProposals = '[data-testid="open-proposals"]';
|
|
const viewProposalButton = '[data-testid="view-proposal-btn"]';
|
|
|
|
describe(
|
|
'Governance flow for proposal details',
|
|
{ tags: '@slow' },
|
|
function () {
|
|
before('connect wallets and set approval limit', function () {
|
|
cy.visit('/');
|
|
ethereumWalletConnect();
|
|
cy.associateTokensToVegaWallet('1');
|
|
});
|
|
|
|
beforeEach('visit proposals tab', function () {
|
|
cy.clearLocalStorage();
|
|
turnTelemetryOff();
|
|
cy.reload();
|
|
waitForSpinner();
|
|
cy.connectVegaWallet();
|
|
ethereumWalletConnect();
|
|
ensureSpecifiedUnstakedTokensAreAssociated('1');
|
|
navigateTo(navigation.proposals);
|
|
});
|
|
|
|
// 3001-VOTE-050 3001-VOTE-054 3001-VOTE-055 3002-PROP-019
|
|
it('Newly created raw proposal details - shows proposal title and full description', function () {
|
|
createRawProposal();
|
|
cy.get<testFreeformProposal>('@rawProposal').then((rawProposal) => {
|
|
getProposalIdFromList(rawProposal.rationale.title);
|
|
cy.get('@proposalIdText').then((proposalId) => {
|
|
cy.get(openProposals).within(() => {
|
|
cy.get(`#${proposalId}`).within(() => {
|
|
cy.get(viewProposalButton).should('be.visible').click();
|
|
});
|
|
});
|
|
});
|
|
cy.get(proposalDetailsTitle)
|
|
.should('contain', rawProposal.rationale.title)
|
|
.and('be.visible');
|
|
cy.get(proposalDetailsDescription)
|
|
.should('contain', rawProposal.rationale.description)
|
|
.and('be.visible');
|
|
});
|
|
// 3001-VOTE-052
|
|
cy.get('code.language-json')
|
|
.should('exist')
|
|
.within(() => {
|
|
cy.get('.hljs-string').eq(0).should('have.text', '"ProposalTerms"');
|
|
});
|
|
});
|
|
|
|
// 3001-VOTE-043
|
|
it('Newly created freeform proposal details - shows proposed and closing dates', function () {
|
|
const closingVoteHrs = '72';
|
|
const proposalTitle = generateFreeFormProposalTitle();
|
|
const proposalTimeStamp = createTenDigitUnixTimeStampForSpecifiedDays(3);
|
|
|
|
goToMakeNewProposal(governanceProposalType.FREEFORM);
|
|
enterUniqueFreeFormProposalBody(closingVoteHrs, proposalTitle);
|
|
waitForProposalSubmitted();
|
|
waitForProposalSync();
|
|
navigateTo(navigation.proposals);
|
|
getSubmittedProposalFromProposalList(proposalTitle).within(() =>
|
|
cy.get(viewProposalButton).click()
|
|
);
|
|
cy.wrap(
|
|
formatDateWithLocalTimezone(new Date(proposalTimeStamp * 1000))
|
|
).then((closingDate) => {
|
|
getProposalInformationFromTable('Closes on')
|
|
.contains(closingDate)
|
|
.should('be.visible');
|
|
});
|
|
cy.wrap(
|
|
formatDateWithLocalTimezone(
|
|
new Date(createTenDigitUnixTimeStampForSpecifiedDays(0) * 1000)
|
|
)
|
|
).then((proposalDate) => {
|
|
getProposalInformationFromTable('Proposed on')
|
|
.contains(proposalDate)
|
|
.should('be.visible');
|
|
});
|
|
});
|
|
|
|
it('Newly created proposal details - shows default status set to fail', function () {
|
|
// 3001-VOTE-037
|
|
// 3001-VOTE-040
|
|
// 3001-VOTE-067
|
|
createRawProposal();
|
|
cy.get<testFreeformProposal>('@rawProposal').then((rawProposal) => {
|
|
getSubmittedProposalFromProposalList(
|
|
rawProposal.rationale.title
|
|
).within(() => cy.get(viewProposalButton).click());
|
|
});
|
|
cy.contains('Participation: Not Met 0.00 0.00%(0.00% Required)').should(
|
|
'be.visible'
|
|
);
|
|
getProposalInformationFromTable('Expected to pass')
|
|
.contains('👎')
|
|
.should('be.visible');
|
|
// 3001-VOTE-062
|
|
// 3001-VOTE-040
|
|
// 3001-VOTE-070
|
|
getProposalInformationFromTable('Token majority met')
|
|
.contains('👎')
|
|
.should('be.visible');
|
|
// 3001-VOTE-068
|
|
getProposalInformationFromTable('Token participation met')
|
|
.contains('👎')
|
|
.should('be.visible');
|
|
});
|
|
|
|
// 3001-VOTE-080 3001-VOTE-090 3001-VOTE-069 3001-VOTE-072 3001-VOTE-073
|
|
it('Newly created proposal details - ability to vote for and against proposal - with minimum required tokens associated', function () {
|
|
createRawProposal();
|
|
cy.get<testFreeformProposal>('@rawProposal').then((rawProposal) => {
|
|
getSubmittedProposalFromProposalList(
|
|
rawProposal.rationale.title
|
|
).within(() => cy.get(viewProposalButton).click());
|
|
});
|
|
// 3001-VOTE-080
|
|
cy.getByTestId('vote-buttons').contains('against').should('be.visible');
|
|
cy.getByTestId('vote-buttons').contains('for').should('be.visible');
|
|
voteForProposal('for');
|
|
getDateFormatForSpecifiedDays(0).then((votedDate) => {
|
|
// 3001-VOTE-051
|
|
// 3001-VOTE-093
|
|
cy.contains('You voted:')
|
|
.siblings()
|
|
.contains('For')
|
|
.siblings()
|
|
.contains(votedDate)
|
|
.should('be.visible');
|
|
});
|
|
cy.get(proposalVoteProgressForPercentage) // 3001-VOTE-072
|
|
.contains('100.00%')
|
|
.and('be.visible');
|
|
cy.get(proposalVoteProgressAgainstPercentage)
|
|
.contains('0.00%')
|
|
.and('be.visible');
|
|
cy.get(proposalVoteProgressForTokens).contains('1.00').and('be.visible');
|
|
cy.get(proposalVoteProgressAgainstTokens)
|
|
.contains('0.00')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Tokens for proposal')
|
|
.should('have.text', (1).toFixed(2))
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Tokens against proposal')
|
|
.should('have.text', '0.00')
|
|
.and('be.visible');
|
|
// 3001-VOTE-061
|
|
getProposalInformationFromTable('Participation required')
|
|
.contains('0.00%')
|
|
.should('be.visible');
|
|
// 3001-VOTE-066
|
|
getProposalInformationFromTable('Majority Required') // 3001-VOTE-073
|
|
.contains(`${(66).toFixed(2)}%`)
|
|
.should('be.visible');
|
|
getProposalInformationFromTable('Number of voting parties')
|
|
.should('have.text', '1')
|
|
.and('be.visible');
|
|
cy.get(changeVoteButton).should('be.visible').click();
|
|
voteForProposal('for');
|
|
// 3001-VOTE-064
|
|
getProposalInformationFromTable('Tokens for proposal')
|
|
.should('have.text', (1).toFixed(2))
|
|
.and('be.visible');
|
|
cy.get(changeVoteButton).should('be.visible').click();
|
|
voteForProposal('against');
|
|
cy.get(proposalVoteProgressAgainstPercentage)
|
|
.contains('100.00%')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Tokens against proposal')
|
|
.should('have.text', (1).toFixed(2))
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Number of voting parties')
|
|
.should('have.text', '1')
|
|
.and('be.visible');
|
|
});
|
|
|
|
// 3001-VOTE-042, 3001-VOTE-057, 3001-VOTE-058, 3001-VOTE-059, 3001-VOTE-060
|
|
it('Newly created proposal details - ability to increase associated tokens - by voting again after association', function () {
|
|
vegaWalletSetSpecifiedApprovalAmount('1000');
|
|
createRawProposal();
|
|
cy.get<testFreeformProposal>('@rawProposal').then((rawProposal) => {
|
|
getSubmittedProposalFromProposalList(
|
|
rawProposal.rationale.title
|
|
).within(() => cy.get(viewProposalButton).click());
|
|
});
|
|
voteForProposal('for');
|
|
// 3001-VOTE-079
|
|
cy.contains('You voted: For').should('be.visible');
|
|
cy.get(proposalVoteProgressForTokens).contains('1').and('be.visible');
|
|
getProposalInformationFromTable('Total Supply')
|
|
.invoke('text')
|
|
.then((totalSupply) => {
|
|
const tokensRequiredToAchieveResult = (
|
|
(Number(totalSupply.replace(/,/g, '')) * 0.001) /
|
|
100
|
|
).toFixed(2);
|
|
ensureSpecifiedUnstakedTokensAreAssociated(
|
|
tokensRequiredToAchieveResult
|
|
);
|
|
navigateTo(navigation.proposals);
|
|
cy.get<testFreeformProposal>('@rawProposal').then((rawProposal) => {
|
|
getSubmittedProposalFromProposalList(
|
|
rawProposal.rationale.title
|
|
).within(() => cy.get(viewProposalButton).click());
|
|
});
|
|
cy.get(proposalVoteProgressForPercentage)
|
|
.contains('100.00%')
|
|
.and('be.visible');
|
|
cy.get(proposalVoteProgressAgainstPercentage)
|
|
.contains('0.00%')
|
|
.and('be.visible');
|
|
// 3001-VOTE-065
|
|
cy.get(changeVoteButton).should('be.visible').click();
|
|
voteForProposal('for');
|
|
cy.get(proposalVoteProgressForTokens)
|
|
.contains(tokensRequiredToAchieveResult)
|
|
.and('be.visible');
|
|
cy.get(proposalVoteProgressAgainstTokens)
|
|
.contains('0.00')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Total tokens voted percentage')
|
|
.should('have.text', '0.00%')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Tokens for proposal')
|
|
.should('have.text', tokensRequiredToAchieveResult)
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Tokens against proposal')
|
|
.should('have.text', '0.00')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Number of voting parties')
|
|
.should('have.text', '1')
|
|
.and('be.visible');
|
|
getProposalInformationFromTable('Expected to pass')
|
|
.contains('👍')
|
|
.should('be.visible');
|
|
// 3001-VOTE-062
|
|
getProposalInformationFromTable('Token majority met')
|
|
.contains('👍')
|
|
.should('be.visible');
|
|
getProposalInformationFromTable('Token participation met')
|
|
.contains('👍')
|
|
.should('be.visible');
|
|
getProposalInformationFromTable('Tokens for proposal')
|
|
.contains(tokensRequiredToAchieveResult)
|
|
.and('be.visible');
|
|
});
|
|
});
|
|
}
|
|
);
|