1import type {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '@unique/test-utils/util.js';3import {clearFellowship, democracyLaunchPeriod, democracyTrackMinRank, dummyProposalCall, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, fellowshipPreparePeriod, fellowshipPropositionOrigin, initFellowship, voteUnanimouslyInFellowship} from './util.js';4import {Event} from '@unique/test-utils';56describeGov('Governance: Democracy tests', () => {7 let regularUser: IKeyringPair;8 let donor: IKeyringPair;9 let sudoer: IKeyringPair;1011 before(async function() {12 await usingPlaygrounds(async (helper, privateKey) => {13 requirePalletsOrSkip(this, helper, [Pallets.Democracy]);1415 donor = await privateKey({url: import.meta.url});16 sudoer = await privateKey('//Alice');1718 [regularUser] = await helper.arrange.createAccounts([1000n], donor);19 });20 });2122 itSub('Regular user can vote', async ({helper}) => {23 const fellows = await initFellowship(donor, sudoer);24 const rank1Proposer = fellows[1][0];2526 const democracyProposalCall = dummyProposalCall(helper);27 const fellowshipProposal = {28 Inline: helper.democracy.proposeCall(democracyProposalCall, 0n).method.toHex(),29 };3031 const submitResult = await helper.fellowship.referenda.submit(32 rank1Proposer,33 fellowshipPropositionOrigin,34 fellowshipProposal,35 {After: 0},36 );3738 const fellowshipReferendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;39 await voteUnanimouslyInFellowship(helper, fellows, democracyTrackMinRank, fellowshipReferendumIndex);40 await helper.fellowship.referenda.placeDecisionDeposit(donor, fellowshipReferendumIndex);4142 await helper.wait.expectEvent(43 fellowshipPreparePeriod + fellowshipConfirmPeriod + fellowshipMinEnactPeriod,44 Event.Democracy.Proposed,45 );4647 const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);48 const referendumIndex = startedEvent.referendumIndex;4950 const ayeBalance = 10_000n;5152 await helper.democracy.vote(regularUser, referendumIndex, {53 Standard: {54 vote: {55 aye: true,56 conviction: 1,57 },58 balance: ayeBalance,59 },60 });6162 const referendumInfo = await helper.democracy.referendumInfo(referendumIndex);63 const tally = referendumInfo.ongoing.tally;6465 expect(BigInt(tally.ayes)).to.be.equal(ayeBalance);6667 await clearFellowship(sudoer);68 });6970 itSub('[Negative] Regular user cannot submit a regular proposal', async ({helper}) => {71 const submitResult = helper.democracy.propose(regularUser, dummyProposalCall(helper), 0n);72 await expect(submitResult).to.be.rejectedWith(/BadOrigin/);73 });7475 itSub('[Negative] Regular user cannot externally propose SuperMajorityAgainst', async ({helper}) => {76 const submitResult = helper.democracy.externalProposeDefault(regularUser, dummyProposalCall(helper));77 await expect(submitResult).to.be.rejectedWith(/BadOrigin/);78 });7980 itSub('[Negative] Regular user cannot externally propose SimpleMajority', async ({helper}) => {81 const submitResult = helper.democracy.externalProposeMajority(regularUser, dummyProposalCall(helper));82 await expect(submitResult).to.be.rejectedWith(/BadOrigin/);83 });8485 itSub('[Negative] Regular user cannot externally propose SuperMajorityApprove', async ({helper}) => {86 const submitResult = helper.democracy.externalPropose(regularUser, dummyProposalCall(helper));87 await expect(submitResult).to.be.rejectedWith(/BadOrigin/);88 });89});