difftreelog
test add event asserts (#982)
in: master
* add events asserts * fix eslint * eslint fix - unused vars
7 files changed
tests/src/benchmarks/nesting/index.tsdiffbeforeafterboth--- a/tests/src/benchmarks/nesting/index.ts
+++ b/tests/src/benchmarks/nesting/index.ts
@@ -1,17 +1,11 @@
import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';
import {readFile} from 'fs/promises';
-import {
- ICrossAccountId,
-} from '../../util/playgrounds/types';
import {IKeyringPair} from '@polkadot/types/types';
-import {UniqueNFTCollection} from '../../util/playgrounds/unique';
import {Contract} from 'web3-eth-contract';
-import {createObjectCsvWriter} from 'csv-writer';
-import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common';
+import {convertToTokens} from '../utils/common';
import {makeNames} from '../../util';
import {ContractImports} from '../../eth/util/playgrounds/types';
import {RMRKNestableMintable} from './ABIGEN';
-import {rm} from 'fs';
const {dirname} = makeNames(import.meta.url);
tests/src/eth/nesting/nest.test.tsdiffbeforeafterboth--- a/tests/src/eth/nesting/nest.test.ts
+++ b/tests/src/eth/nesting/nest.test.ts
@@ -162,7 +162,7 @@
const malignant = await helper.eth.createAccountWithBalance(donor);
const {collectionId: collectionIdA, contract: contractA} = await createNestingCollection(helper, owner);
- const {collectionId: collectionIdB, contract: contractB} = await createNestingCollection(helper, owner);
+ const {contract: contractB} = await createNestingCollection(helper, owner);
await contractA.methods.setCollectionNesting([true, false, [contractA.options.address, contractB.options.address]]).send({from: owner});
tests/src/fetchMetadata.tsdiffbeforeafterboth--- a/tests/src/fetchMetadata.ts
+++ b/tests/src/fetchMetadata.ts
@@ -1,16 +1,16 @@
-import { writeFile } from "fs/promises";
-import { join } from "path";
-import { exit } from "process";
-import { fileURLToPath } from "url";
+import {writeFile} from 'fs/promises';
+import {join} from 'path';
+import {exit} from 'process';
+import {fileURLToPath} from 'url';
const url = process.env.RPC_URL;
-if (!url) throw new Error('RPC_URL is not set');
+if(!url) throw new Error('RPC_URL is not set');
const srcDir = fileURLToPath(new URL('.', import.meta.url));
-for (let i = 0; i < 10; i++) {
+for(let i = 0; i < 10; i++) {
try {
- console.log(`Trying to fetch metadata, retry ${i + 1}/${10}`)
+ console.log(`Trying to fetch metadata, retry ${i + 1}/${10}`);
const response = await fetch(url, {
method: 'POST',
headers: {
tests/src/governance/technicalCommittee.test.tsdiffbeforeafterboth1import {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';3import {Event} from '../util/playgrounds/unique.dev';4import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, ITechComms, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util';56describeGov('Governance: Technical Committee tests', () => {7 let sudoer: IKeyringPair;8 let techcomms: ITechComms;9 let donor: IKeyringPair;10 let preImageHash: string;111213 const allTechCommitteeThreshold = 3;1415 before(async function() {16 await usingPlaygrounds(async (helper, privateKey) => {17 requirePalletsOrSkip(this, helper, [Pallets.TechnicalCommittee]);18 sudoer = await privateKey('//Alice');19 donor = await privateKey({url: import.meta.url});2021 techcomms = await initTechComm(donor, sudoer);2223 const proposalCall = await helper.constructApiCall('api.tx.balances.forceSetBalance', [donor.address, 20n * 10n ** 25n]);24 preImageHash = await helper.preimage.notePreimageFromCall(sudoer, proposalCall, true);25 });26 });2728 after(async () => {29 await usingPlaygrounds(async (helper) => {30 await clearTechComm(sudoer);3132 await helper.preimage.unnotePreimage(sudoer, preImageHash);33 await hardResetFellowshipReferenda(sudoer);34 await hardResetDemocracy(sudoer);35 await hardResetGovScheduler(sudoer);36 });37 });3839 async function proposalFromAllCommittee(proposal: any) {40 return await usingPlaygrounds(async (helper) => {41 expect((await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length).to.be.equal(allTechCommitteeThreshold);42 const proposeResult = await helper.technicalCommittee.collective.propose(43 techcomms.andy,44 proposal,45 allTechCommitteeThreshold,46 );4748 const commiteeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);49 const proposalIndex = commiteeProposedEvent.proposalIndex;50 const proposalHash = commiteeProposedEvent.proposalHash;515253 await helper.technicalCommittee.collective.vote(techcomms.andy, proposalHash, proposalIndex, true);54 await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);55 await helper.technicalCommittee.collective.vote(techcomms.greg, proposalHash, proposalIndex, true);5657 return await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);58 });59 }6061 itSub('TechComm can fast-track Democracy proposals', async ({helper}) => {62 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);63 await helper.wait.parachainBlockMultiplesOf(35n);6465 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);6667 await expect(proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))68 .to.be.fulfilled;69 });7071 itSub('TechComm can cancel Democracy proposals', async ({helper}) => {72 const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);73 const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;7475 await expect(proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex)))76 .to.be.fulfilled;77 });7879 itSub('TechComm can cancel ongoing Democracy referendums', async ({helper}) => {80 await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));81 const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);82 const referendumIndex = startedEvent.referendumIndex;8384 await expect(proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex)))85 .to.be.fulfilled;86 });878889 itSub('TechComm member can veto Democracy proposals', async ({helper}) => {90 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);91 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);9293 await expect(helper.technicalCommittee.collective.execute(94 techcomms.andy,95 helper.democracy.vetoExternalCall(preimageHash),96 )).to.be.fulfilled;97 });9899 itSub('TechComm can cancel Fellowship referendums', async ({helper}) => {100 const fellowship = await initFellowship(donor, sudoer);101 const fellowshipProposer = fellowship[5][0];102 const proposal = dummyProposal(helper);103104 const submitResult = await helper.fellowship.referenda.submit(105 fellowshipProposer,106 fellowshipPropositionOrigin,107 proposal,108 defaultEnactmentMoment,109 );110 const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;111 await expect(proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex))).to.be.fulfilled;112 });113114 itSub.skip('TechComm member can add a Fellowship member', async ({helper}) => {115 const newFellowshipMember = helper.arrange.createEmptyAccount();116 await expect(helper.technicalCommittee.collective.execute(117 techcomms.andy,118 helper.fellowship.collective.addMemberCall(newFellowshipMember.address),119 )).to.be.fulfilled;120 const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();121 expect(fellowshipMembers).to.contains(newFellowshipMember.address);122 await clearFellowship(sudoer);123 });124125 itSub('[Negative] TechComm cannot submit regular democracy proposal', async ({helper}) => {126 const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);127128 await expect(proposalFromAllCommittee(councilProposal)).to.be.rejectedWith('BadOrigin');129 });130131 itSub('[Negative] TechComm cannot externally propose SuperMajorityAgainst', async ({helper}) => {132 const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));133134 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');135 });136137 itSub('[Negative] TechComm cannot externally propose SimpleMajority', async ({helper}) => {138 const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));139140 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');141 });142143 itSub('[Negative] TechComm cannot externally propose SuperMajorityApprove', async ({helper}) => {144 const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));145146 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');147 });148149 itSub('[Negative] TechComm member cannot submit regular democracy proposal', async ({helper}) => {150 const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);151152 await expect(helper.technicalCommittee.collective.execute(153 techcomms.andy,154 memberProposal,155 )).to.be.rejectedWith('BadOrigin');156 });157158 itSub('[Negative] TechComm member cannot externally propose SuperMajorityAgainst', async ({helper}) => {159 const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));160161 await expect(helper.technicalCommittee.collective.execute(162 techcomms.andy,163 memberProposal,164 )).to.be.rejectedWith('BadOrigin');165 });166167 itSub('[Negative] TechComm member cannot externally propose SimpleMajority', async ({helper}) => {168 const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));169170 await expect(helper.technicalCommittee.collective.execute(171 techcomms.andy,172 memberProposal,173 )).to.be.rejectedWith('BadOrigin');174 });175176 itSub('[Negative] TechComm member cannot externally propose SuperMajorityApprove', async ({helper}) => {177 const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));178179 await expect(helper.technicalCommittee.collective.execute(180 techcomms.andy,181 memberProposal,182 )).to.be.rejectedWith('BadOrigin');183 });184185186 itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async ({helper}) => {187188 });189190 itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async ({helper}) => {191192 });193194 itSub('[Negative] TechComm cannot add/remove a Council member', async ({helper}) => {195 const newCouncilMember = helper.arrange.createEmptyAccount();196 const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);197 const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);198199 await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');200 await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');201 });202203 itSub('[Negative] TechComm member cannot add/remove a Council member', async ({helper}) => {204 const newCouncilMember = helper.arrange.createEmptyAccount();205 const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);206 const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);207208 await expect(helper.technicalCommittee.collective.execute(209 techcomms.andy,210 addMemberProposal,211 )).to.be.rejectedWith('BadOrigin');212 await expect(helper.technicalCommittee.collective.execute(213 techcomms.andy,214 removeMemberProposal,215 )).to.be.rejectedWith('BadOrigin');216 });217218 itSub('[Negative] TechComm cannot set/clear Council prime member', async ({helper}) => {219 const counselors = await initCouncil(donor, sudoer);220 const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);221 const proposalForClear = await helper.council.membership.clearPrimeCall();222223 await expect(proposalFromAllCommittee(proposalForSet)).to.be.rejectedWith('BadOrigin');224 await expect(proposalFromAllCommittee(proposalForClear)).to.be.rejectedWith('BadOrigin');225 await clearCouncil(sudoer);226 });227228 itSub('[Negative] TechComm member cannot set/clear Council prime member', async ({helper}) => {229 const counselors = await initCouncil(donor, sudoer);230 const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);231 const proposalForClear = await helper.council.membership.clearPrimeCall();232233 await expect(helper.technicalCommittee.collective.execute(234 techcomms.andy,235 proposalForSet,236 )).to.be.rejectedWith('BadOrigin');237 await expect(helper.technicalCommittee.collective.execute(238 techcomms.andy,239 proposalForClear,240 )).to.be.rejectedWith('BadOrigin');241 await clearCouncil(sudoer);242 });243244 itSub('[Negative] TechComm cannot add/remove a TechComm member', async ({helper}) => {245 const newCommMember = helper.arrange.createEmptyAccount();246 const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);247 const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);248249 await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');250 await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');251 });252253 itSub('[Negative] TechComm member cannot add/remove a TechComm member', async ({helper}) => {254 const newCommMember = helper.arrange.createEmptyAccount();255 const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);256 const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);257258 await expect(helper.technicalCommittee.collective.execute(259 techcomms.andy,260 addMemberProposal,261 )).to.be.rejectedWith('BadOrigin');262 await expect(helper.technicalCommittee.collective.execute(263 techcomms.andy,264 removeMemberProposal,265 )).to.be.rejectedWith('BadOrigin');266 });267268 itSub('[Negative] TechComm cannot remove a Fellowship member', async ({helper}) => {269 const fellowship = await initFellowship(donor, sudoer);270271 await expect(proposalFromAllCommittee(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');272 await clearFellowship(sudoer);273 });274275 itSub('[Negative] TechComm member cannot remove a Fellowship member', async ({helper}) => {276 const fellowship = await initFellowship(donor, sudoer);277278 await expect(helper.technicalCommittee.collective.execute(279 techcomms.andy,280 helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),281 )).to.be.rejectedWith('BadOrigin');282 await clearFellowship(sudoer);283 });284285 itSub('[Negative] TechComm member cannot fast-track Democracy proposals', async ({helper}) => {286 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);287 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);288289 await expect(helper.technicalCommittee.collective.execute(290 techcomms.andy,291 helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),292 )).to.be.rejectedWith('BadOrigin');293 });294295 itSub('[Negative] TechComm member cannot cancel Democracy proposals', async ({helper}) => {296 const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);297 const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;298299 await expect(helper.technicalCommittee.collective.execute(300 techcomms.andy,301 helper.democracy.cancelProposalCall(proposalIndex),302 ))303 .to.be.rejectedWith('BadOrigin');304 });305306 itSub('[Negative] TechComm member cannot cancel ongoing Democracy referendums', async ({helper}) => {307 await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));308 const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);309 const referendumIndex = startedEvent.referendumIndex;310311 await expect(helper.technicalCommittee.collective.execute(312 techcomms.andy,313 helper.democracy.emergencyCancelCall(referendumIndex),314 )).to.be.rejectedWith('BadOrigin');315 });316317 itSub('[Negative] TechComm cannot blacklist Democracy proposals', async ({helper}) => {318 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);319 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);320321 await expect(proposalFromAllCommittee(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');322 });323324 itSub('[Negative] TechComm member cannot blacklist Democracy proposals', async ({helper}) => {325 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);326 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);327328 await expect(helper.technicalCommittee.collective.execute(329 techcomms.andy,330 helper.democracy.blacklistCall(preimageHash),331 )).to.be.rejectedWith('BadOrigin');332 });333334 itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async ({helper}) => {335336 });337338 itSub('[Negative] TechComm member cannot cancel Fellowship referendums', async ({helper}) => {339 const fellowship = await initFellowship(donor, sudoer);340 const fellowshipProposer = fellowship[5][0];341 const proposal = dummyProposal(helper);342343 const submitResult = await helper.fellowship.referenda.submit(344 fellowshipProposer,345 fellowshipPropositionOrigin,346 proposal,347 defaultEnactmentMoment,348 );349350 const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;351352 await expect(helper.technicalCommittee.collective.execute(353 techcomms.andy,354 helper.fellowship.referenda.cancelCall(referendumIndex),355 )).to.be.rejectedWith('BadOrigin');356 });357358 itSub('[Negative] TechComm referendum cannot be closed until the voting threshold is met', async ({helper}) => {359 const committeeSize = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length as any as number;360 expect(committeeSize).is.greaterThan(1);361 const proposeResult = await helper.technicalCommittee.collective.propose(362 techcomms.andy,363 dummyProposalCall(helper),364 committeeSize,365 );366367 const committeeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);368 const proposalIndex = committeeProposedEvent.proposalIndex;369 const proposalHash = committeeProposedEvent.proposalHash;370371 await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);372373 await expect(helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');374 });375});1import {IKeyringPair} from '@polkadot/types/types';2import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util';3import {Event} from '../util/playgrounds/unique.dev';4import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, ITechComms, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util';56describeGov('Governance: Technical Committee tests', () => {7 let sudoer: IKeyringPair;8 let techcomms: ITechComms;9 let donor: IKeyringPair;10 let preImageHash: string;111213 const allTechCommitteeThreshold = 3;1415 before(async function() {16 await usingPlaygrounds(async (helper, privateKey) => {17 requirePalletsOrSkip(this, helper, [Pallets.TechnicalCommittee]);18 sudoer = await privateKey('//Alice');19 donor = await privateKey({url: import.meta.url});2021 techcomms = await initTechComm(donor, sudoer);2223 const proposalCall = await helper.constructApiCall('api.tx.balances.forceSetBalance', [donor.address, 20n * 10n ** 25n]);24 preImageHash = await helper.preimage.notePreimageFromCall(sudoer, proposalCall, true);25 });26 });2728 after(async () => {29 await usingPlaygrounds(async (helper) => {30 await clearTechComm(sudoer);3132 await helper.preimage.unnotePreimage(sudoer, preImageHash);33 await hardResetFellowshipReferenda(sudoer);34 await hardResetDemocracy(sudoer);35 await hardResetGovScheduler(sudoer);36 });37 });3839 function proposalFromAllCommittee(proposal: any) {40 return usingPlaygrounds(async (helper) => {41 expect((await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length).to.be.equal(allTechCommitteeThreshold);42 const proposeResult = await helper.technicalCommittee.collective.propose(43 techcomms.andy,44 proposal,45 allTechCommitteeThreshold,46 );4748 const commiteeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);49 const proposalIndex = commiteeProposedEvent.proposalIndex;50 const proposalHash = commiteeProposedEvent.proposalHash;515253 await helper.technicalCommittee.collective.vote(techcomms.andy, proposalHash, proposalIndex, true);54 await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);55 await helper.technicalCommittee.collective.vote(techcomms.greg, proposalHash, proposalIndex, true);5657 const closeResult = await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);58 Event.TechnicalCommittee.Closed.expect(closeResult);59 Event.TechnicalCommittee.Approved.expect(closeResult);60 const {result} = Event.TechnicalCommittee.Executed.expect(closeResult);61 expect(result).to.eq('Ok');6263 return closeResult;64 });65 }6667 itSub('TechComm can fast-track Democracy proposals', async ({helper}) => {68 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);69 await helper.wait.parachainBlockMultiplesOf(35n);7071 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);7273 const fastTrackProposal = await proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));74 Event.Democracy.Started.expect(fastTrackProposal);75 });7677 itSub('TechComm can cancel Democracy proposals', async ({helper}) => {78 const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);79 const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;8081 const cancelProposal = await proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex));82 Event.Democracy.ProposalCanceled.expect(cancelProposal);83 });8485 itSub('TechComm can cancel ongoing Democracy referendums', async ({helper}) => {86 await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));87 const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);88 const referendumIndex = startedEvent.referendumIndex;8990 const emergencyCancelProposal = await proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex));91 Event.Democracy.Cancelled.expect(emergencyCancelProposal);92 });9394 itSub('TechComm member can veto Democracy proposals', async ({helper}) => {95 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);96 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);9798 const vetoExternalCall = await helper.technicalCommittee.collective.execute(99 techcomms.andy,100 helper.democracy.vetoExternalCall(preimageHash),101 );102 Event.Democracy.Vetoed.expect(vetoExternalCall);103 });104105 itSub('TechComm can cancel Fellowship referendums', async ({helper}) => {106 const fellowship = await initFellowship(donor, sudoer);107 const fellowshipProposer = fellowship[5][0];108 const proposal = dummyProposal(helper);109110 const submitResult = await helper.fellowship.referenda.submit(111 fellowshipProposer,112 fellowshipPropositionOrigin,113 proposal,114 defaultEnactmentMoment,115 );116 const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;117 const cancelProposal = await proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex));118 Event.FellowshipReferenda.Cancelled.expect(cancelProposal);119 });120121 itSub.skip('TechComm member can add a Fellowship member', async ({helper}) => {122 const newFellowshipMember = helper.arrange.createEmptyAccount();123 await expect(helper.technicalCommittee.collective.execute(124 techcomms.andy,125 helper.fellowship.collective.addMemberCall(newFellowshipMember.address),126 )).to.be.fulfilled;127 const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();128 expect(fellowshipMembers).to.contains(newFellowshipMember.address);129 await clearFellowship(sudoer);130 });131132 itSub('[Negative] TechComm cannot submit regular democracy proposal', async ({helper}) => {133 const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);134135 await expect(proposalFromAllCommittee(councilProposal)).to.be.rejectedWith('BadOrigin');136 });137138 itSub('[Negative] TechComm cannot externally propose SuperMajorityAgainst', async ({helper}) => {139 const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));140141 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');142 });143144 itSub('[Negative] TechComm cannot externally propose SimpleMajority', async ({helper}) => {145 const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));146147 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');148 });149150 itSub('[Negative] TechComm cannot externally propose SuperMajorityApprove', async ({helper}) => {151 const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));152153 await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');154 });155156 itSub('[Negative] TechComm member cannot submit regular democracy proposal', async ({helper}) => {157 const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);158159 await expect(helper.technicalCommittee.collective.execute(160 techcomms.andy,161 memberProposal,162 )).to.be.rejectedWith('BadOrigin');163 });164165 itSub('[Negative] TechComm member cannot externally propose SuperMajorityAgainst', async ({helper}) => {166 const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));167168 await expect(helper.technicalCommittee.collective.execute(169 techcomms.andy,170 memberProposal,171 )).to.be.rejectedWith('BadOrigin');172 });173174 itSub('[Negative] TechComm member cannot externally propose SimpleMajority', async ({helper}) => {175 const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));176177 await expect(helper.technicalCommittee.collective.execute(178 techcomms.andy,179 memberProposal,180 )).to.be.rejectedWith('BadOrigin');181 });182183 itSub('[Negative] TechComm member cannot externally propose SuperMajorityApprove', async ({helper}) => {184 const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));185186 await expect(helper.technicalCommittee.collective.execute(187 techcomms.andy,188 memberProposal,189 )).to.be.rejectedWith('BadOrigin');190 });191192193 itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async ({helper}) => {194195 });196197 itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async ({helper}) => {198199 });200201 itSub('[Negative] TechComm cannot add/remove a Council member', async ({helper}) => {202 const newCouncilMember = helper.arrange.createEmptyAccount();203 const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);204 const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);205206 await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');207 await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');208 });209210 itSub('[Negative] TechComm member cannot add/remove a Council member', async ({helper}) => {211 const newCouncilMember = helper.arrange.createEmptyAccount();212 const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);213 const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);214215 await expect(helper.technicalCommittee.collective.execute(216 techcomms.andy,217 addMemberProposal,218 )).to.be.rejectedWith('BadOrigin');219 await expect(helper.technicalCommittee.collective.execute(220 techcomms.andy,221 removeMemberProposal,222 )).to.be.rejectedWith('BadOrigin');223 });224225 itSub('[Negative] TechComm cannot set/clear Council prime member', async ({helper}) => {226 const counselors = await initCouncil(donor, sudoer);227 const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);228 const proposalForClear = await helper.council.membership.clearPrimeCall();229230 await expect(proposalFromAllCommittee(proposalForSet)).to.be.rejectedWith('BadOrigin');231 await expect(proposalFromAllCommittee(proposalForClear)).to.be.rejectedWith('BadOrigin');232 await clearCouncil(sudoer);233 });234235 itSub('[Negative] TechComm member cannot set/clear Council prime member', async ({helper}) => {236 const counselors = await initCouncil(donor, sudoer);237 const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);238 const proposalForClear = await helper.council.membership.clearPrimeCall();239240 await expect(helper.technicalCommittee.collective.execute(241 techcomms.andy,242 proposalForSet,243 )).to.be.rejectedWith('BadOrigin');244 await expect(helper.technicalCommittee.collective.execute(245 techcomms.andy,246 proposalForClear,247 )).to.be.rejectedWith('BadOrigin');248 await clearCouncil(sudoer);249 });250251 itSub('[Negative] TechComm cannot add/remove a TechComm member', async ({helper}) => {252 const newCommMember = helper.arrange.createEmptyAccount();253 const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);254 const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);255256 await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');257 await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');258 });259260 itSub('[Negative] TechComm member cannot add/remove a TechComm member', async ({helper}) => {261 const newCommMember = helper.arrange.createEmptyAccount();262 const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);263 const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);264265 await expect(helper.technicalCommittee.collective.execute(266 techcomms.andy,267 addMemberProposal,268 )).to.be.rejectedWith('BadOrigin');269 await expect(helper.technicalCommittee.collective.execute(270 techcomms.andy,271 removeMemberProposal,272 )).to.be.rejectedWith('BadOrigin');273 });274275 itSub('[Negative] TechComm cannot remove a Fellowship member', async ({helper}) => {276 const fellowship = await initFellowship(donor, sudoer);277278 await expect(proposalFromAllCommittee(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');279 await clearFellowship(sudoer);280 });281282 itSub('[Negative] TechComm member cannot remove a Fellowship member', async ({helper}) => {283 const fellowship = await initFellowship(donor, sudoer);284285 await expect(helper.technicalCommittee.collective.execute(286 techcomms.andy,287 helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),288 )).to.be.rejectedWith('BadOrigin');289 await clearFellowship(sudoer);290 });291292 itSub('[Negative] TechComm member cannot fast-track Democracy proposals', async ({helper}) => {293 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);294 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);295296 await expect(helper.technicalCommittee.collective.execute(297 techcomms.andy,298 helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),299 )).to.be.rejectedWith('BadOrigin');300 });301302 itSub('[Negative] TechComm member cannot cancel Democracy proposals', async ({helper}) => {303 const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);304 const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;305306 await expect(helper.technicalCommittee.collective.execute(307 techcomms.andy,308 helper.democracy.cancelProposalCall(proposalIndex),309 ))310 .to.be.rejectedWith('BadOrigin');311 });312313 itSub('[Negative] TechComm member cannot cancel ongoing Democracy referendums', async ({helper}) => {314 await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));315 const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);316 const referendumIndex = startedEvent.referendumIndex;317318 await expect(helper.technicalCommittee.collective.execute(319 techcomms.andy,320 helper.democracy.emergencyCancelCall(referendumIndex),321 )).to.be.rejectedWith('BadOrigin');322 });323324 itSub('[Negative] TechComm cannot blacklist Democracy proposals', async ({helper}) => {325 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);326 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);327328 await expect(proposalFromAllCommittee(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');329 });330331 itSub('[Negative] TechComm member cannot blacklist Democracy proposals', async ({helper}) => {332 const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);333 await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);334335 await expect(helper.technicalCommittee.collective.execute(336 techcomms.andy,337 helper.democracy.blacklistCall(preimageHash),338 )).to.be.rejectedWith('BadOrigin');339 });340341 itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async ({helper}) => {342343 });344345 itSub('[Negative] TechComm member cannot cancel Fellowship referendums', async ({helper}) => {346 const fellowship = await initFellowship(donor, sudoer);347 const fellowshipProposer = fellowship[5][0];348 const proposal = dummyProposal(helper);349350 const submitResult = await helper.fellowship.referenda.submit(351 fellowshipProposer,352 fellowshipPropositionOrigin,353 proposal,354 defaultEnactmentMoment,355 );356357 const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;358359 await expect(helper.technicalCommittee.collective.execute(360 techcomms.andy,361 helper.fellowship.referenda.cancelCall(referendumIndex),362 )).to.be.rejectedWith('BadOrigin');363 });364365 itSub('[Negative] TechComm referendum cannot be closed until the voting threshold is met', async ({helper}) => {366 const committeeSize = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length as any as number;367 expect(committeeSize).is.greaterThan(1);368 const proposeResult = await helper.technicalCommittee.collective.propose(369 techcomms.andy,370 dummyProposalCall(helper),371 committeeSize,372 );373374 const committeeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);375 const proposalIndex = committeeProposedEvent.proposalIndex;376 const proposalHash = committeeProposedEvent.proposalHash;377378 await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);379380 await expect(helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');381 });382});tests/src/maintenance.seqtest.tsdiffbeforeafterboth--- a/tests/src/maintenance.seqtest.ts
+++ b/tests/src/maintenance.seqtest.ts
@@ -18,7 +18,6 @@
import {ApiPromise} from '@polkadot/api';
import {expect, itSched, itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds} from './util';
import {itEth} from './eth/util';
-import {UniqueHelper} from './util/playgrounds/unique';
import {main as correctState} from './migrations/correctStateAfterMaintenance';
async function maintenanceEnabled(api: ApiPromise): Promise<boolean> {
tests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.dev.ts
+++ b/tests/src/util/playgrounds/unique.dev.ts
@@ -174,6 +174,20 @@
static Passed = this.Method('Passed', data => ({
referendumIndex: eventJsonData<number>(data, 0),
}));
+
+ static ProposalCanceled = this.Method('ProposalCanceled', data => ({
+ propIndex: eventJsonData<number>(data, 0),
+ }));
+
+ static Cancelled = this.Method('Cancelled', data => ({
+ propIndex: eventJsonData<number>(data, 0),
+ }));
+
+ static Vetoed = this.Method('Vetoed', data => ({
+ who: eventHumanData(data, 0),
+ proposalHash: eventHumanData(data, 1),
+ until: eventJsonData<number>(data, 1),
+ }));
};
static Council = class extends EventSection('council') {
@@ -188,6 +202,9 @@
yes: eventJsonData<number>(data, 1),
no: eventJsonData<number>(data, 2),
}));
+ static Executed = this.Method('Executed', data => ({
+ proposalHash: eventHumanData(data, 0),
+ }));
};
static TechnicalCommittee = class extends EventSection('technicalCommittee') {
@@ -202,6 +219,13 @@
yes: eventJsonData<number>(data, 1),
no: eventJsonData<number>(data, 2),
}));
+ static Approved = this.Method('Approved', data => ({
+ proposalHash: eventHumanData(data, 0),
+ }));
+ static Executed = this.Method('Executed', data => ({
+ proposalHash: eventHumanData(data, 0),
+ result: eventHumanData(data, 1),
+ }));
};
static FellowshipReferenda = class extends EventSection('fellowshipReferenda') {
@@ -210,6 +234,11 @@
trackId: eventJsonData<number>(data, 1),
proposal: eventJsonData(data, 2),
}));
+
+ static Cancelled = this.Method('Cancelled', data => ({
+ index: eventJsonData<number>(data, 0),
+ tally: eventJsonData(data, 1),
+ }));
};
static UniqueScheduler = schedulerSection('uniqueScheduler');
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.ts
+++ b/tests/src/util/playgrounds/unique.ts
@@ -44,15 +44,11 @@
MoonbeamAssetInfo,
DemocracyStandardAccountVote,
IEthCrossAccountId,
- CollectionFlag,
IPhasicEvent,
- DemocracySplitAccount,
} from './types';
import {RuntimeDispatchInfo} from '@polkadot/types/interfaces';
import type {Vec} from '@polkadot/types-codec';
-import {FrameSupportPreimagesBounded, FrameSupportScheduleDispatchTime, FrameSystemEventRecord, PalletBalancesIdAmount, PalletDemocracyConviction, PalletDemocracyVoteAccountVote} from '@polkadot/types/lookup';
-import {arrayUnzip} from '@polkadot/util';
-import {Event} from './unique.dev';
+import {FrameSystemEventRecord, PalletDemocracyConviction} from '@polkadot/types/lookup';
export class CrossAccountId {
Substrate!: TSubstrateAccount;