git.delta.rocks / unique-network / refs/commits / 5da2ac33955b

difftreelog

fix(tests) update test cases and resolve review comments

Maksandre2024-06-05parent: #ed0719f.patch.diff
in: master

2 files changed

modifiedjs-packages/tests/sub/governance/council.test.tsdiffbeforeafterboth
--- a/js-packages/tests/sub/governance/council.test.ts
+++ b/js-packages/tests/sub/governance/council.test.ts
@@ -489,4 +489,21 @@
     await expect(helper.council.collective.close(counselors.filip, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');
   });
 
+  itSub('[Negative] Council can\'t veto Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(proposalFromAllCouncil(helper.democracy.vetoExternalCall(preimageHash)))
+      .rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council member can\'t veto Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(helper.council.collective.execute(
+      counselors.charu,
+      helper.democracy.vetoExternalCall(preimageHash),
+    )).rejectedWith('BadOrigin');
+  });
 });
modifiedjs-packages/tests/sub/governance/financialCouncil.test.tsdiffbeforeafterboth
before · js-packages/tests/sub/governance/financialCouncil.test.ts
1import type {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '@unique/test-utils/util.js';3import {Event} from '@unique/test-utils';4import {democracyFastTrackVotingPeriod, IFinCounselors, clearTechComm, dummyProposalCall, initFinCouncil, clearFinCouncil, democracyLaunchPeriod, initFellowship, dummyProposal, fellowshipPropositionOrigin, defaultEnactmentMoment, initCouncil, clearCouncil, clearFellowship} from './util.js';567describeGov('Governance: Financial Council tests', () => {8  let donor: IKeyringPair;9  let finCounselors: IFinCounselors;10  let sudoer: IKeyringPair;1112  const moreThanHalfCouncilThreshold = 2;1314  before(async function() {15    await usingPlaygrounds(async (helper, privateKey) => {16      requirePalletsOrSkip(this, helper, [Pallets.FinancialCouncil]);17      sudoer = await privateKey('//Alice');18      donor = await privateKey({url: import.meta.url});19    });20  });2122  beforeEach(async () => {23    finCounselors = await initFinCouncil(donor, sudoer);24  });2526  afterEach(async () => {27    await clearFinCouncil(sudoer);28    await clearTechComm(sudoer);29  });3031  async function proposalFromMoreThanHalfCouncil(proposal: any) {32    return await usingPlaygrounds(async (helper) => {33      expect((await helper.finCouncil.membership.getMembers()).length).to.be.equal(3);34      const proposeResult = await helper.finCouncil.collective.propose(35        finCounselors.ildar,36        proposal,37        moreThanHalfCouncilThreshold,38      );3940      const councilProposedEvent = Event.FinCouncil.Proposed.expect(proposeResult);41      const proposalIndex = councilProposedEvent.proposalIndex;42      const proposalHash = councilProposedEvent.proposalHash;4344      await helper.finCouncil.collective.vote(finCounselors.greg, proposalHash, proposalIndex, true);45      await helper.finCouncil.collective.vote(finCounselors.ildar, proposalHash, proposalIndex, true);4647      return await helper.finCouncil.collective.close(finCounselors.ildar, proposalHash, proposalIndex);48    });49  }5051  async function proposalFromAllCouncil(proposal: any) {52    return await usingPlaygrounds(async (helper) => {53      expect((await helper.finCouncil.membership.getMembers()).length).to.be.equal(3);54      const proposeResult = await helper.finCouncil.collective.propose(55        finCounselors.ildar,56        proposal,57        moreThanHalfCouncilThreshold,58      );5960      const councilProposedEvent = Event.FinCouncil.Proposed.expect(proposeResult);61      const proposalIndex = councilProposedEvent.proposalIndex;62      const proposalHash = councilProposedEvent.proposalHash;6364      await helper.finCouncil.collective.vote(finCounselors.greg, proposalHash, proposalIndex, true);65      await helper.finCouncil.collective.vote(finCounselors.ildar, proposalHash, proposalIndex, true);66      await helper.finCouncil.collective.vote(finCounselors.andy, proposalHash, proposalIndex, true);6768      return await helper.finCouncil.collective.close(finCounselors.andy, proposalHash, proposalIndex);69    });70  }7172  itSub('FinCouncil member can register foreign asset', async ({helper}) => {73    const location = {74      parents: 1,75      interior: {X3: [76        {77          Parachain: 1000,78        },79        {80          PalletInstance: 50,81        },82        {83          GeneralIndex: 1984,84        },85      ]},86    };87    const assetId = {Concrete: location};8889    const registerForeignAssetCall = helper.constructApiCall(90      'api.tx.foreignAssets.forceRegisterForeignAsset',91      [{V3: assetId}, helper.util.str2vec('New Asset'), 'NEW', {Fungible: 10}],92    );9394    await helper.finCouncil.collective.execute(finCounselors.andy, registerForeignAssetCall);9596    const asset = await helper.foreignAssets.foreignCollectionId(location);97    expect(asset).not.null;98  });99100  itSub('[Negative] FinCouncil can\'t fast-track Democracy proposals', async ({helper}) => {101    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);102    await helper.wait.parachainBlockMultiplesOf(35n);103104    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);105106    await expect(proposalFromAllCouncil(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))107      .rejectedWith('BadOrigin');108  });109110  itSub('[Negative] FinCouncil member cannot fast-track Democracy proposals', async ({helper}) => {111    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);112    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);113114    await expect(helper.finCouncil.collective.execute(115      finCounselors.andy,116      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),117    )).to.be.rejectedWith('BadOrigin');118  });119120  itSub('[Negative] FinCouncil can\'t cancel Democracy proposals', async ({helper}) => {121    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);122    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;123124    await expect(proposalFromAllCouncil(helper.democracy.cancelProposalCall(proposalIndex)))125      .rejectedWith('BadOrigin');126  });127128  itSub('[Negative] FinCouncil member cannot cancel Democracy proposals', async ({helper}) => {129    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);130    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;131132    await expect(helper.finCouncil.collective.execute(133      finCounselors.andy,134      helper.democracy.cancelProposalCall(proposalIndex),135    ))136      .to.be.rejectedWith('BadOrigin');137  });138139  itSub('[Negative] FinCouncil can\'t cancel ongoing Democracy referendums', async ({helper}) => {140    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));141    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);142    const referendumIndex = startedEvent.referendumIndex;143144    await expect(proposalFromAllCouncil(helper.democracy.emergencyCancelCall(referendumIndex)))145      .rejectedWith('BadOrigin');146  });147148  itSub('[Negative] FinCouncil member cannot cancel ongoing Democracy referendums', async ({helper}) => {149    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));150    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);151    const referendumIndex = startedEvent.referendumIndex;152153    await expect(helper.finCouncil.collective.execute(154      finCounselors.andy,155      helper.democracy.emergencyCancelCall(referendumIndex),156    )).to.be.rejectedWith('BadOrigin');157  });158159  itSub('[Negative] FinCouncil member can\'t veto Democracy proposals', async ({helper}) => {160    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);161    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);162163    await expect(helper.finCouncil.collective.execute(164      finCounselors.andy,165      helper.democracy.vetoExternalCall(preimageHash),166    )).rejectedWith('BadOrigin');167  });168169  itSub('[Negative] FinCouncil cannot blacklist Democracy proposals', async ({helper}) => {170    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);171    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);172173    await expect(proposalFromAllCouncil(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');174  });175176  itSub('[Negative] FinCouncil member cannot blacklist Democracy proposals', async ({helper}) => {177    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);178    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);179180    await expect(helper.finCouncil.collective.execute(181      finCounselors.andy,182      helper.democracy.blacklistCall(preimageHash),183    )).to.be.rejectedWith('BadOrigin');184  });185186  itSub('[Negative] FinCouncil can\' cancel Fellowship referendums', async ({helper}) => {187    const fellowship = await initFellowship(donor, sudoer);188    const fellowshipProposer = fellowship[5][0];189    const proposal = dummyProposal(helper);190191    const submitResult = await helper.fellowship.referenda.submit(192      fellowshipProposer,193      fellowshipPropositionOrigin,194      proposal,195      defaultEnactmentMoment,196    );197    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;198    await expect(proposalFromAllCouncil(helper.fellowship.referenda.cancelCall(referendumIndex)))199      .rejectedWith('BadOrigin');200  });201202  itSub('[Negative] TechComm member cannot cancel Fellowship referendums', async ({helper}) => {203    const fellowship = await initFellowship(donor, sudoer);204    const fellowshipProposer = fellowship[5][0];205    const proposal = dummyProposal(helper);206207    const submitResult = await helper.fellowship.referenda.submit(208      fellowshipProposer,209      fellowshipPropositionOrigin,210      proposal,211      defaultEnactmentMoment,212    );213214    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;215216    await expect(helper.finCouncil.collective.execute(217      finCounselors.andy,218      helper.fellowship.referenda.cancelCall(referendumIndex),219    )).to.be.rejectedWith('BadOrigin');220  });221222  itSub('[Negative] FinCouncil member can\' add a Fellowship member', async ({helper}) => {223    const newFellowshipMember = helper.arrange.createEmptyAccount();224    await expect(helper.finCouncil.collective.execute(225      finCounselors.andy,226      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),227    )).to.be.rejectedWith('BadOrigin');228  });229230  itSub('[Negative] FinCouncil cannot submit regular democracy proposal', async ({helper}) => {231    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);232233    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith('BadOrigin');234  });235236  itSub('[Negative] FinCouncil cannot externally propose SuperMajorityAgainst', async ({helper}) => {237    const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));238239    await expect(proposalFromAllCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');240  });241242  itSub('[Negative] FinCouncil member cannot submit regular democracy proposal', async ({helper}) => {243    const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);244245    await expect(helper.finCouncil.collective.execute(246      finCounselors.andy,247      memberProposal,248    )).to.be.rejectedWith('BadOrigin');249  });250251  itSub('[Negative] FinCouncil cannot externally propose SimpleMajority', async ({helper}) => {252    const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));253254    await expect(proposalFromAllCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');255  });256257  itSub('[Negative] FinCouncil cannot externally propose SuperMajorityApprove', async ({helper}) => {258    const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));259260    await expect(proposalFromAllCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');261  });262263  itSub('[Negative] FinCouncil member cannot externally propose SuperMajorityAgainst', async ({helper}) => {264    const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));265266    await expect(helper.finCouncil.collective.execute(267      finCounselors.andy,268      memberProposal,269    )).to.be.rejectedWith('BadOrigin');270  });271272  itSub('[Negative] FinCouncil member cannot externally propose SimpleMajority', async ({helper}) => {273    const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));274275    await expect(helper.finCouncil.collective.execute(276      finCounselors.andy,277      memberProposal,278    )).to.be.rejectedWith('BadOrigin');279  });280281  itSub('[Negative] FinCouncil member cannot externally propose SuperMajorityApprove', async ({helper}) => {282    const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));283284    await expect(helper.finCouncil.collective.execute(285      finCounselors.andy,286      memberProposal,287    )).to.be.rejectedWith('BadOrigin');288  });289290  itSub('[Negative] FinCouncil cannot add/remove a Council member', async ({helper}) => {291    const newCouncilMember = helper.arrange.createEmptyAccount();292    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);293    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);294295    await expect(proposalFromAllCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');296    await expect(proposalFromAllCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');297  });298299  itSub('[Negative] FinCouncil member cannot add/remove a Council member', async ({helper}) => {300    const newCouncilMember = helper.arrange.createEmptyAccount();301    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);302    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);303304    await expect(helper.finCouncil.collective.execute(305      finCounselors.andy,306      addMemberProposal,307    )).to.be.rejectedWith('BadOrigin');308    await expect(helper.finCouncil.collective.execute(309      finCounselors.andy,310      removeMemberProposal,311    )).to.be.rejectedWith('BadOrigin');312  });313314  itSub('[Negative] FinCouncil cannot add/remove a FinCouncil member', async ({helper}) => {315    const newCouncilMember = helper.arrange.createEmptyAccount();316    const addMemberProposal = helper.finCouncil.membership.addMemberCall(newCouncilMember.address);317    const removeMemberProposal = helper.finCouncil.membership.removeMemberCall(finCounselors.ildar.address);318319    await expect(proposalFromAllCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');320    await expect(proposalFromAllCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');321  });322323  itSub('[Negative] FinCouncil member cannot add/remove a FinCouncil member', async ({helper}) => {324    const newCouncilMember = helper.arrange.createEmptyAccount();325    const addMemberProposal = helper.finCouncil.membership.addMemberCall(newCouncilMember.address);326    const removeMemberProposal = helper.finCouncil.membership.removeMemberCall(finCounselors.ildar.address);327328    await expect(helper.finCouncil.collective.execute(329      finCounselors.andy,330      addMemberProposal,331    )).to.be.rejectedWith('BadOrigin');332    await expect(helper.finCouncil.collective.execute(333      finCounselors.andy,334      removeMemberProposal,335    )).to.be.rejectedWith('BadOrigin');336  });337338  itSub('[Negative] FinCouncil cannot set/clear Council prime member', async ({helper}) => {339    const counselors = await initCouncil(donor, sudoer);340    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);341    const proposalForClear = await helper.council.membership.clearPrimeCall();342343    await expect(proposalFromAllCouncil(proposalForSet)).to.be.rejectedWith('BadOrigin');344    await expect(proposalFromAllCouncil(proposalForClear)).to.be.rejectedWith('BadOrigin');345    await clearCouncil(sudoer);346  });347348  itSub('[Negative] FinCouncil member cannot set/clear Council prime member', async ({helper}) => {349    const counselors = await initCouncil(donor, sudoer);350    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);351    const proposalForClear = await helper.council.membership.clearPrimeCall();352353    await expect(helper.finCouncil.collective.execute(354      finCounselors.andy,355      proposalForSet,356    )).to.be.rejectedWith('BadOrigin');357    await expect(helper.finCouncil.collective.execute(358      finCounselors.andy,359      proposalForClear,360    )).to.be.rejectedWith('BadOrigin');361    await clearCouncil(sudoer);362  });363364  itSub('[Negative] FinCouncil cannot add/remove a TechComm member', async ({helper}) => {365    const newCommMember = helper.arrange.createEmptyAccount();366    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);367    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);368369    await expect(proposalFromAllCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');370    await expect(proposalFromAllCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');371  });372373  itSub('[Negative] FinCouncil member cannot add/remove a TechComm member', async ({helper}) => {374    const newCommMember = helper.arrange.createEmptyAccount();375    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);376    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);377378    await expect(helper.finCouncil.collective.execute(379      finCounselors.andy,380      addMemberProposal,381    )).to.be.rejectedWith('BadOrigin');382    await expect(helper.finCouncil.collective.execute(383      finCounselors.andy,384      removeMemberProposal,385    )).to.be.rejectedWith('BadOrigin');386  });387388  itSub('[Negative] FinCouncil cannot remove a Fellowship member', async ({helper}) => {389    const fellowship = await initFellowship(donor, sudoer);390391    await expect(proposalFromAllCouncil(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');392    await clearFellowship(sudoer);393  });394395  itSub('[Negative] FinCouncil member cannot remove a Fellowship member', async ({helper}) => {396    const fellowship = await initFellowship(donor, sudoer);397398    await expect(helper.finCouncil.collective.execute(399      finCounselors.andy,400      helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),401    )).to.be.rejectedWith('BadOrigin');402    await clearFellowship(sudoer);403  });404405406});
after · js-packages/tests/sub/governance/financialCouncil.test.ts
1import type {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '@unique/test-utils/util.js';3import {Event} from '@unique/test-utils';4import {democracyFastTrackVotingPeriod, IFinCounselors, clearTechComm, dummyProposalCall, initFinCouncil, clearFinCouncil, democracyLaunchPeriod, initFellowship, dummyProposal, fellowshipPropositionOrigin, defaultEnactmentMoment, initCouncil, clearCouncil, clearFellowship} from './util.js';567describeGov('Governance: Financial Council tests', () => {8  let donor: IKeyringPair;9  let finCounselors: IFinCounselors;10  let sudoer: IKeyringPair;1112  const moreThanHalfCouncilThreshold = 2;1314  before(async function() {15    await usingPlaygrounds(async (helper, privateKey) => {16      requirePalletsOrSkip(this, helper, [Pallets.FinancialCouncil]);17      sudoer = await privateKey('//Alice');18      donor = await privateKey({url: import.meta.url});19    });20  });2122  beforeEach(async () => {23    finCounselors = await initFinCouncil(donor, sudoer);24  });2526  afterEach(async () => {27    await clearFinCouncil(sudoer);28    await clearTechComm(sudoer);29  });3031  async function proposalFromMoreThanHalfFinCouncil(proposal: any) {32    return await usingPlaygrounds(async (helper) => {33      expect((await helper.finCouncil.membership.getMembers()).length).to.be.equal(3);34      const proposeResult = await helper.finCouncil.collective.propose(35        finCounselors.ildar,36        proposal,37        moreThanHalfCouncilThreshold,38      );3940      const councilProposedEvent = Event.FinCouncil.Proposed.expect(proposeResult);41      const proposalIndex = councilProposedEvent.proposalIndex;42      const proposalHash = councilProposedEvent.proposalHash;4344      await helper.finCouncil.collective.vote(finCounselors.greg, proposalHash, proposalIndex, true);45      await helper.finCouncil.collective.vote(finCounselors.ildar, proposalHash, proposalIndex, true);4647      return await helper.finCouncil.collective.close(finCounselors.ildar, proposalHash, proposalIndex);48    });49  }5051  async function proposalFromAllFinCouncil(proposal: any) {52    return await usingPlaygrounds(async (helper) => {53      expect((await helper.finCouncil.membership.getMembers()).length).to.be.equal(3);54      const proposeResult = await helper.finCouncil.collective.propose(55        finCounselors.ildar,56        proposal,57        moreThanHalfCouncilThreshold,58      );5960      const councilProposedEvent = Event.FinCouncil.Proposed.expect(proposeResult);61      const proposalIndex = councilProposedEvent.proposalIndex;62      const proposalHash = councilProposedEvent.proposalHash;6364      await helper.finCouncil.collective.vote(finCounselors.greg, proposalHash, proposalIndex, true);65      await helper.finCouncil.collective.vote(finCounselors.ildar, proposalHash, proposalIndex, true);66      await helper.finCouncil.collective.vote(finCounselors.andy, proposalHash, proposalIndex, true);6768      return await helper.finCouncil.collective.close(finCounselors.andy, proposalHash, proposalIndex);69    });70  }7172  itSub('FinCouncil member can register foreign asset', async ({helper}) => {73    const location = {74      parents: 1,75      interior: {X3: [76        {77          Parachain: 1000,78        },79        {80          PalletInstance: 50,81        },82        {83          GeneralIndex: 1984,84        },85      ]},86    };87    const assetId = {Concrete: location};8889    const registerForeignAssetCall = helper.constructApiCall(90      'api.tx.foreignAssets.forceRegisterForeignAsset',91      [{V3: assetId}, helper.util.str2vec('New Asset'), 'NEW', {Fungible: 10}],92    );9394    await helper.finCouncil.collective.execute(finCounselors.andy, registerForeignAssetCall);9596    const asset = await helper.foreignAssets.foreignCollectionId(location);97    expect(asset).not.null;98  });99100  itSub('[Negative] FinCouncil can\'t fast-track Democracy proposals', async ({helper}) => {101    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);102    await helper.wait.parachainBlockMultiplesOf(35n);103104    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);105106    await expect(proposalFromAllFinCouncil(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))107      .rejectedWith('BadOrigin');108  });109110  itSub('[Negative] FinCouncil member cannot fast-track Democracy proposals', async ({helper}) => {111    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);112    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);113114    await expect(helper.finCouncil.collective.execute(115      finCounselors.andy,116      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),117    )).to.be.rejectedWith('BadOrigin');118  });119120  itSub('[Negative] FinCouncil can\'t cancel Democracy proposals', async ({helper}) => {121    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);122    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;123124    await expect(proposalFromAllFinCouncil(helper.democracy.cancelProposalCall(proposalIndex)))125      .rejectedWith('BadOrigin');126  });127128  itSub('[Negative] FinCouncil member cannot cancel Democracy proposals', async ({helper}) => {129    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);130    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;131132    await expect(helper.finCouncil.collective.execute(133      finCounselors.andy,134      helper.democracy.cancelProposalCall(proposalIndex),135    ))136      .to.be.rejectedWith('BadOrigin');137  });138139  itSub('[Negative] FinCouncil can\'t cancel ongoing Democracy referendums', async ({helper}) => {140    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));141    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);142    const referendumIndex = startedEvent.referendumIndex;143144    await expect(proposalFromAllFinCouncil(helper.democracy.emergencyCancelCall(referendumIndex)))145      .rejectedWith('BadOrigin');146  });147148  itSub('[Negative] FinCouncil member cannot cancel ongoing Democracy referendums', async ({helper}) => {149    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));150    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);151    const referendumIndex = startedEvent.referendumIndex;152153    await expect(helper.finCouncil.collective.execute(154      finCounselors.andy,155      helper.democracy.emergencyCancelCall(referendumIndex),156    )).to.be.rejectedWith('BadOrigin');157  });158159  itSub('[Negative] FinCouncil can\'t veto Democracy proposals', async ({helper}) => {160    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);161    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);162163    await expect(proposalFromAllFinCouncil(helper.democracy.vetoExternalCall(preimageHash)))164      .rejectedWith('BadOrigin');165  });166167  itSub('[Negative] FinCouncil member can\'t veto Democracy proposals', async ({helper}) => {168    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);169    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);170171    await expect(helper.finCouncil.collective.execute(172      finCounselors.andy,173      helper.democracy.vetoExternalCall(preimageHash),174    )).rejectedWith('BadOrigin');175  });176177  itSub('[Negative] FinCouncil cannot blacklist Democracy proposals', async ({helper}) => {178    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);179    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);180181    await expect(proposalFromAllFinCouncil(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');182  });183184  itSub('[Negative] FinCouncil member cannot blacklist Democracy proposals', async ({helper}) => {185    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);186    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);187188    await expect(helper.finCouncil.collective.execute(189      finCounselors.andy,190      helper.democracy.blacklistCall(preimageHash),191    )).to.be.rejectedWith('BadOrigin');192  });193194  itSub('[Negative] FinCouncil can\'t cancel Fellowship referendums', async ({helper}) => {195    const fellowship = await initFellowship(donor, sudoer);196    const fellowshipProposer = fellowship[5][0];197    const proposal = dummyProposal(helper);198199    const submitResult = await helper.fellowship.referenda.submit(200      fellowshipProposer,201      fellowshipPropositionOrigin,202      proposal,203      defaultEnactmentMoment,204    );205    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;206    await expect(proposalFromAllFinCouncil(helper.fellowship.referenda.cancelCall(referendumIndex)))207      .rejectedWith('BadOrigin');208  });209210  itSub('[Negative] FinCouncil member cannot cancel Fellowship referendums', async ({helper}) => {211    const fellowship = await initFellowship(donor, sudoer);212    const fellowshipProposer = fellowship[5][0];213    const proposal = dummyProposal(helper);214215    const submitResult = await helper.fellowship.referenda.submit(216      fellowshipProposer,217      fellowshipPropositionOrigin,218      proposal,219      defaultEnactmentMoment,220    );221222    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;223224    await expect(helper.finCouncil.collective.execute(225      finCounselors.andy,226      helper.fellowship.referenda.cancelCall(referendumIndex),227    )).to.be.rejectedWith('BadOrigin');228  });229230  itSub('[Negative] FinCouncil member can\'t add a Fellowship member', async ({helper}) => {231    const newFellowshipMember = helper.arrange.createEmptyAccount();232    await expect(helper.finCouncil.collective.execute(233      finCounselors.andy,234      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),235    )).to.be.rejectedWith('BadOrigin');236  });237238  itSub('[Negative] FinCouncil cannot submit regular democracy proposal', async ({helper}) => {239    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);240241    await expect(proposalFromAllFinCouncil(councilProposal)).to.be.rejectedWith('BadOrigin');242  });243244  itSub('[Negative] FinCouncil cannot externally propose SuperMajorityAgainst', async ({helper}) => {245    const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));246247    await expect(proposalFromAllFinCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');248  });249250  itSub('[Negative] FinCouncil member cannot submit regular democracy proposal', async ({helper}) => {251    const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);252253    await expect(helper.finCouncil.collective.execute(254      finCounselors.andy,255      memberProposal,256    )).to.be.rejectedWith('BadOrigin');257  });258259  itSub('[Negative] FinCouncil cannot externally propose SimpleMajority', async ({helper}) => {260    const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));261262    await expect(proposalFromAllFinCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');263  });264265  itSub('[Negative] FinCouncil cannot externally propose SuperMajorityApprove', async ({helper}) => {266    const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));267268    await expect(proposalFromAllFinCouncil(commiteeProposal)).to.be.rejectedWith('BadOrigin');269  });270271  itSub('[Negative] FinCouncil member cannot externally propose SuperMajorityAgainst', async ({helper}) => {272    const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));273274    await expect(helper.finCouncil.collective.execute(275      finCounselors.andy,276      memberProposal,277    )).to.be.rejectedWith('BadOrigin');278  });279280  itSub('[Negative] FinCouncil member cannot externally propose SimpleMajority', async ({helper}) => {281    const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));282283    await expect(helper.finCouncil.collective.execute(284      finCounselors.andy,285      memberProposal,286    )).to.be.rejectedWith('BadOrigin');287  });288289  itSub('[Negative] FinCouncil member cannot externally propose SuperMajorityApprove', async ({helper}) => {290    const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));291292    await expect(helper.finCouncil.collective.execute(293      finCounselors.andy,294      memberProposal,295    )).to.be.rejectedWith('BadOrigin');296  });297298  itSub('[Negative] FinCouncil cannot add/remove a Council member', async ({helper}) => {299    const newCouncilMember = helper.arrange.createEmptyAccount();300    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);301    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);302303    await expect(proposalFromAllFinCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');304    await expect(proposalFromAllFinCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');305  });306307  itSub('[Negative] FinCouncil member cannot add/remove a Council member', async ({helper}) => {308    const newCouncilMember = helper.arrange.createEmptyAccount();309    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);310    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);311312    await expect(helper.finCouncil.collective.execute(313      finCounselors.andy,314      addMemberProposal,315    )).to.be.rejectedWith('BadOrigin');316    await expect(helper.finCouncil.collective.execute(317      finCounselors.andy,318      removeMemberProposal,319    )).to.be.rejectedWith('BadOrigin');320  });321322  itSub('[Negative] FinCouncil cannot add/remove a FinCouncil member', async ({helper}) => {323    const newCouncilMember = helper.arrange.createEmptyAccount();324    const addMemberProposal = helper.finCouncil.membership.addMemberCall(newCouncilMember.address);325    const removeMemberProposal = helper.finCouncil.membership.removeMemberCall(finCounselors.ildar.address);326327    await expect(proposalFromAllFinCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');328    await expect(proposalFromAllFinCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');329  });330331  itSub('[Negative] FinCouncil cannot add/remove a FinCouncil prime member', async ({helper}) => {332    const setPrimeCall = helper.finCouncil.membership.setPrimeCall(finCounselors.andy.address);333    const clearPrimeCall = helper.finCouncil.membership.clearPrimeCall();334335    await expect(proposalFromAllFinCouncil(setPrimeCall)).to.be.rejectedWith('BadOrigin');336    await expect(proposalFromAllFinCouncil(clearPrimeCall)).to.be.rejectedWith('BadOrigin');337  });338339  itSub('[Negative] FinCouncil member cannot add/remove a FinCouncil prime member', async ({helper}) => {340    await expect(helper.finCouncil.collective.execute(341      finCounselors.andy,342      helper.finCouncil.membership.setPrimeCall(finCounselors.andy.address),343    )).to.be.rejectedWith('BadOrigin');344345    await expect(helper.finCouncil.collective.execute(346      finCounselors.andy,347      helper.finCouncil.membership.clearPrimeCall(),348    )).to.be.rejectedWith('BadOrigin');349  });350351  itSub('[Negative] FinCouncil member cannot add/remove a FinCouncil member', async ({helper}) => {352    const newCouncilMember = helper.arrange.createEmptyAccount();353    const addMemberProposal = helper.finCouncil.membership.addMemberCall(newCouncilMember.address);354    const removeMemberProposal = helper.finCouncil.membership.removeMemberCall(finCounselors.ildar.address);355356    await expect(helper.finCouncil.collective.execute(357      finCounselors.andy,358      addMemberProposal,359    )).to.be.rejectedWith('BadOrigin');360    await expect(helper.finCouncil.collective.execute(361      finCounselors.andy,362      removeMemberProposal,363    )).to.be.rejectedWith('BadOrigin');364  });365366  itSub('[Negative] FinCouncil cannot set/clear Council prime member', async ({helper}) => {367    const counselors = await initCouncil(donor, sudoer);368    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);369    const proposalForClear = await helper.council.membership.clearPrimeCall();370371    await expect(proposalFromAllFinCouncil(proposalForSet)).to.be.rejectedWith('BadOrigin');372    await expect(proposalFromAllFinCouncil(proposalForClear)).to.be.rejectedWith('BadOrigin');373    await clearCouncil(sudoer);374  });375376  itSub('[Negative] FinCouncil member cannot set/clear Council prime member', async ({helper}) => {377    const counselors = await initCouncil(donor, sudoer);378    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);379    const proposalForClear = await helper.council.membership.clearPrimeCall();380381    await expect(helper.finCouncil.collective.execute(382      finCounselors.andy,383      proposalForSet,384    )).to.be.rejectedWith('BadOrigin');385    await expect(helper.finCouncil.collective.execute(386      finCounselors.andy,387      proposalForClear,388    )).to.be.rejectedWith('BadOrigin');389    await clearCouncil(sudoer);390  });391392  itSub('[Negative] FinCouncil cannot add/remove a TechComm member', async ({helper}) => {393    const newCommMember = helper.arrange.createEmptyAccount();394    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newCommMember.address);395    const removeMemberProposal = helper.technicalCommittee.membership.removeMemberCall(newCommMember.address);396397    await expect(proposalFromAllFinCouncil(addMemberProposal)).to.be.rejectedWith('BadOrigin');398    await expect(proposalFromAllFinCouncil(removeMemberProposal)).to.be.rejectedWith('BadOrigin');399  });400401  itSub('[Negative] FinCouncil member cannot add/remove a TechComm member', async ({helper}) => {402    const newCommMember = helper.arrange.createEmptyAccount();403    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newCommMember.address);404    const removeMemberProposal = helper.technicalCommittee.membership.removeMemberCall(newCommMember.address);405406    await expect(helper.finCouncil.collective.execute(407      finCounselors.andy,408      addMemberProposal,409    )).to.be.rejectedWith('BadOrigin');410    await expect(helper.finCouncil.collective.execute(411      finCounselors.andy,412      removeMemberProposal,413    )).to.be.rejectedWith('BadOrigin');414  });415416  itSub('[Negative] FinCouncil cannot remove a Fellowship member', async ({helper}) => {417    const fellowship = await initFellowship(donor, sudoer);418419    await expect(proposalFromAllFinCouncil(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');420    await clearFellowship(sudoer);421  });422423  itSub('[Negative] FinCouncil member cannot remove a Fellowship member', async ({helper}) => {424    const fellowship = await initFellowship(donor, sudoer);425426    await expect(helper.finCouncil.collective.execute(427      finCounselors.andy,428      helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),429    )).to.be.rejectedWith('BadOrigin');430    await clearFellowship(sudoer);431  });432433434});