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.tsdiffbeforeafterboth1import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';2import {readFile} from 'fs/promises';3import {4 ICrossAccountId,5} from '../../util/playgrounds/types';6import {IKeyringPair} from '@polkadot/types/types';7import {UniqueNFTCollection} from '../../util/playgrounds/unique';8import {Contract} from 'web3-eth-contract';9import {createObjectCsvWriter} from 'csv-writer';10import {convertToTokens, createCollectionForBenchmarks, PERMISSIONS, PROPERTIES} from '../utils/common';11import {makeNames} from '../../util';12import {ContractImports} from '../../eth/util/playgrounds/types';13import {RMRKNestableMintable} from './ABIGEN';14import {rm} from 'fs';1516const {dirname} = makeNames(import.meta.url);1718export const CONTRACT_IMPORT: ContractImports[] = [19 {20 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol`,21 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol',22 },23 {24 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol`,25 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol',26 },27 {28 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol`,29 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol',30 },31 {32 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol`,33 solPath: '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol',34 },35 {36 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,37 solPath: '@openzeppelin/contracts/token/ERC721/IERC721.sol',38 },39 {40 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol`,41 solPath: '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol',42 },43 {44 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Address.sol`,45 solPath: '@openzeppelin/contracts/utils/Address.sol',46 },47 {48 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,49 solPath: '@openzeppelin/contracts/utils/Context.sol',50 },51 {52 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,53 solPath: '@openzeppelin/contracts/utils/introspection/IERC165.sol',54 },55 {56 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol`,57 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol',58 },59 {60 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol`,61 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol',62 },63 {64 fsPath: `${dirname}/RMRKNestableMintable.sol`,65 solPath: 'RMRKNestableMintable.sol',66 },67];686970const main = async () => {7172 await usingEthPlaygrounds(async (helper, privateKey) => {7374 const donor = await privateKey('//Alice'); // Seed from account with balance on this network7576 const eth = await measureEth(helper, donor);77 const sub = await measureSub(helper, donor);78 const rmrk = await measureRMRK(helper, donor);79 console.table({susbtrate: sub, eth: eth, rmrk: rmrk});80 });81};8283async function measureRMRK(helper: EthUniqueHelper, donor: IKeyringPair) {84 const CONTRACT_SOURCE = (85 await readFile(`${dirname}/RMRKNestableMintable.sol`)86 ).toString();87 const RELAYER_SOURCE = (await readFile(`${dirname}/relayer.sol`)).toString();8889 const ethSigner = await helper.eth.createAccountWithBalance(donor);9091 const contract = await helper.ethContract.deployByCode(92 ethSigner,93 'RMRKNestableMintable',94 CONTRACT_SOURCE,95 CONTRACT_IMPORT,96 5000000,97 );9899 const relayer = await helper.ethContract.deployByCode(100 ethSigner,101 'Relayer',102 RELAYER_SOURCE,103 CONTRACT_IMPORT,104 5000000,105 [contract.options.address],106 );107108 const relayerAddress = relayer.options.address;109110 const rmrk = contract as any as RMRKNestableMintable;111 const createTokenFor = async (receiver: string) => {112 const tokenReceipt = await rmrk.methods.safeMint(receiver).send({from: ethSigner});113 return tokenReceipt.events!['Transfer'].returnValues.tokenId as number;114 };115116117 const nestId = await createTokenFor(ethSigner);118 const outerCollectionNestedId = 10;119 const contractOwnedNestId = await createTokenFor(relayerAddress);120 const nextTokenId = contractOwnedNestId + 1;121122 const nestTransfer = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {123 const addChildData = rmrk.methods.addChild(nestId, outerCollectionNestedId, []).encodeABI();124 await relayer.methods.relay(addChildData).send({from: ethSigner});125 await rmrk.methods.acceptChild(nestId, 0, relayerAddress, outerCollectionNestedId).send({from: ethSigner});126 });127128129 const nestMint = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {130 const nestMintData = rmrk.methods.nestMint(rmrk.options.address, nextTokenId, contractOwnedNestId).encodeABI();131 await relayer.methods.relay(nestMintData).send({from: ethSigner});132 const acceptNestedToken = rmrk.methods.acceptChild(contractOwnedNestId, 0, rmrk.options.address, nextTokenId).encodeABI();133 await relayer.methods.relay(acceptNestedToken).send({from: ethSigner});134 });135136137 const unnestToken = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {138 const unnestData = rmrk.methods.transferChild(contractOwnedNestId, ethSigner, 0, 0, rmrk.options.address, nextTokenId, false, []).encodeABI();139 await relayer.methods.relay(unnestData).send({from: ethSigner});140 });141142 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};143}144145async function measureEth(helper: EthUniqueHelper, donor: IKeyringPair) {146 const owner = await helper.eth.createAccountWithBalance(donor);147 const {collectionId, contract} = await createNestingCollection(helper, owner);148149 // Create a token to be nested to150 const mintingTargetNFTTokenIdResult = await contract.methods.mint(owner).send({from: owner});151 const targetNFTTokenId = mintingTargetNFTTokenIdResult.events.Transfer.returnValues.tokenId;152 const targetNftTokenAddress = helper.ethAddress.fromTokenId(collectionId, targetNFTTokenId);153154 // Create a nested token155 const nestMint = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {156 await contract.methods.mint(targetNftTokenAddress).send({from: owner});157 });158159 // Create a token to be nested and nest160 const mintingSecondTokenIdResult = await contract.methods.mint(owner).send({from: owner});161 const nestedTokenId = mintingSecondTokenIdResult.events.Transfer.returnValues.tokenId;162163 const nestTransfer = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {164 await contract.methods.transfer(targetNftTokenAddress, nestedTokenId).send({from: owner});165 });166167 const unnestToken = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {168 await contract.methods.transferFrom(targetNftTokenAddress, owner, nestedTokenId).send({from: owner});169 });170 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};171}172173async function measureSub(helper: EthUniqueHelper, donor: IKeyringPair) {174175 const [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);176177 const targetNFTCollection = await helper.nft.mintCollection(alice);178 const targetTokenBob = await targetNFTCollection.mintToken(alice, {Substrate: bob.address});179180181 const collectionForNesting = await helper.nft.mintCollection(bob);182 // permissions should be set:183 await targetNFTCollection.setPermissions(alice, {184 nesting: {tokenOwner: true},185 });186187 const nestMint = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {188 await (collectionForNesting.mintToken(bob, targetTokenBob.nestingAccount()));189 });190191 const nestedToken2 = await collectionForNesting.mintToken(bob);192 const nestTransfer = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {193 await nestedToken2.nest(bob, targetTokenBob);194 });195196 const unnestToken = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {197 await nestedToken2.transferFrom(bob, targetTokenBob.nestingAccount(), {Substrate: bob.address});198 });199200 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};201}202203204const createNestingCollection = async (205 helper: EthUniqueHelper,206 owner: string,207): Promise<{ collectionId: number, collectionAddress: string, contract: Contract }> => {208 const {collectionAddress, collectionId} = await helper.eth.createNFTCollection(owner, 'A', 'B', 'C');209210 const contract = helper.ethNativeContract.collection(collectionAddress, 'nft', owner);211 await contract.methods.setCollectionNesting(true).send({from: owner});212213 return {collectionId, collectionAddress, contract};214};215216main()217 .then(() => process.exit(0))218 .catch((e) => {219 console.log(e);220 process.exit(1);221 });2222232242252262271import {EthUniqueHelper, usingEthPlaygrounds} from '../../eth/util';2import {readFile} from 'fs/promises';3import {IKeyringPair} from '@polkadot/types/types';4import {Contract} from 'web3-eth-contract';5import {convertToTokens} from '../utils/common';6import {makeNames} from '../../util';7import {ContractImports} from '../../eth/util/playgrounds/types';8import {RMRKNestableMintable} from './ABIGEN';910const {dirname} = makeNames(import.meta.url);1112export const CONTRACT_IMPORT: ContractImports[] = [13 {14 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol`,15 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/RMRKNestable.sol',16 },17 {18 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol`,19 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/nestable/IERC6059.sol',20 },21 {22 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol`,23 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/RMRKCore.sol',24 },25 {26 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol`,27 solPath: '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol',28 },29 {30 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,31 solPath: '@openzeppelin/contracts/token/ERC721/IERC721.sol',32 },33 {34 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol`,35 solPath: '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol',36 },37 {38 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Address.sol`,39 solPath: '@openzeppelin/contracts/utils/Address.sol',40 },41 {42 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,43 solPath: '@openzeppelin/contracts/utils/Context.sol',44 },45 {46 fsPath: `${dirname}/../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,47 solPath: '@openzeppelin/contracts/utils/introspection/IERC165.sol',48 },49 {50 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol`,51 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/library/RMRKErrors.sol',52 },53 {54 fsPath: `${dirname}/../../../node_modules/@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol`,55 solPath: '@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol',56 },57 {58 fsPath: `${dirname}/RMRKNestableMintable.sol`,59 solPath: 'RMRKNestableMintable.sol',60 },61];626364const main = async () => {6566 await usingEthPlaygrounds(async (helper, privateKey) => {6768 const donor = await privateKey('//Alice'); // Seed from account with balance on this network6970 const eth = await measureEth(helper, donor);71 const sub = await measureSub(helper, donor);72 const rmrk = await measureRMRK(helper, donor);73 console.table({susbtrate: sub, eth: eth, rmrk: rmrk});74 });75};7677async function measureRMRK(helper: EthUniqueHelper, donor: IKeyringPair) {78 const CONTRACT_SOURCE = (79 await readFile(`${dirname}/RMRKNestableMintable.sol`)80 ).toString();81 const RELAYER_SOURCE = (await readFile(`${dirname}/relayer.sol`)).toString();8283 const ethSigner = await helper.eth.createAccountWithBalance(donor);8485 const contract = await helper.ethContract.deployByCode(86 ethSigner,87 'RMRKNestableMintable',88 CONTRACT_SOURCE,89 CONTRACT_IMPORT,90 5000000,91 );9293 const relayer = await helper.ethContract.deployByCode(94 ethSigner,95 'Relayer',96 RELAYER_SOURCE,97 CONTRACT_IMPORT,98 5000000,99 [contract.options.address],100 );101102 const relayerAddress = relayer.options.address;103104 const rmrk = contract as any as RMRKNestableMintable;105 const createTokenFor = async (receiver: string) => {106 const tokenReceipt = await rmrk.methods.safeMint(receiver).send({from: ethSigner});107 return tokenReceipt.events!['Transfer'].returnValues.tokenId as number;108 };109110111 const nestId = await createTokenFor(ethSigner);112 const outerCollectionNestedId = 10;113 const contractOwnedNestId = await createTokenFor(relayerAddress);114 const nextTokenId = contractOwnedNestId + 1;115116 const nestTransfer = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {117 const addChildData = rmrk.methods.addChild(nestId, outerCollectionNestedId, []).encodeABI();118 await relayer.methods.relay(addChildData).send({from: ethSigner});119 await rmrk.methods.acceptChild(nestId, 0, relayerAddress, outerCollectionNestedId).send({from: ethSigner});120 });121122123 const nestMint = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {124 const nestMintData = rmrk.methods.nestMint(rmrk.options.address, nextTokenId, contractOwnedNestId).encodeABI();125 await relayer.methods.relay(nestMintData).send({from: ethSigner});126 const acceptNestedToken = rmrk.methods.acceptChild(contractOwnedNestId, 0, rmrk.options.address, nextTokenId).encodeABI();127 await relayer.methods.relay(acceptNestedToken).send({from: ethSigner});128 });129130131 const unnestToken = await helper.arrange.calculcateFee({Ethereum: ethSigner}, async () => {132 const unnestData = rmrk.methods.transferChild(contractOwnedNestId, ethSigner, 0, 0, rmrk.options.address, nextTokenId, false, []).encodeABI();133 await relayer.methods.relay(unnestData).send({from: ethSigner});134 });135136 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};137}138139async function measureEth(helper: EthUniqueHelper, donor: IKeyringPair) {140 const owner = await helper.eth.createAccountWithBalance(donor);141 const {collectionId, contract} = await createNestingCollection(helper, owner);142143 // Create a token to be nested to144 const mintingTargetNFTTokenIdResult = await contract.methods.mint(owner).send({from: owner});145 const targetNFTTokenId = mintingTargetNFTTokenIdResult.events.Transfer.returnValues.tokenId;146 const targetNftTokenAddress = helper.ethAddress.fromTokenId(collectionId, targetNFTTokenId);147148 // Create a nested token149 const nestMint = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {150 await contract.methods.mint(targetNftTokenAddress).send({from: owner});151 });152153 // Create a token to be nested and nest154 const mintingSecondTokenIdResult = await contract.methods.mint(owner).send({from: owner});155 const nestedTokenId = mintingSecondTokenIdResult.events.Transfer.returnValues.tokenId;156157 const nestTransfer = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {158 await contract.methods.transfer(targetNftTokenAddress, nestedTokenId).send({from: owner});159 });160161 const unnestToken = await helper.arrange.calculcateFee({Ethereum: owner}, async () => {162 await contract.methods.transferFrom(targetNftTokenAddress, owner, nestedTokenId).send({from: owner});163 });164 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};165}166167async function measureSub(helper: EthUniqueHelper, donor: IKeyringPair) {168169 const [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);170171 const targetNFTCollection = await helper.nft.mintCollection(alice);172 const targetTokenBob = await targetNFTCollection.mintToken(alice, {Substrate: bob.address});173174175 const collectionForNesting = await helper.nft.mintCollection(bob);176 // permissions should be set:177 await targetNFTCollection.setPermissions(alice, {178 nesting: {tokenOwner: true},179 });180181 const nestMint = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {182 await (collectionForNesting.mintToken(bob, targetTokenBob.nestingAccount()));183 });184185 const nestedToken2 = await collectionForNesting.mintToken(bob);186 const nestTransfer = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {187 await nestedToken2.nest(bob, targetTokenBob);188 });189190 const unnestToken = await helper.arrange.calculcateFee({Substrate: bob.address}, async () => {191 await nestedToken2.transferFrom(bob, targetTokenBob.nestingAccount(), {Substrate: bob.address});192 });193194 return {mint: convertToTokens(nestMint), transfer: convertToTokens(nestTransfer), unnest: convertToTokens(unnestToken)};195}196197198const createNestingCollection = async (199 helper: EthUniqueHelper,200 owner: string,201): Promise<{ collectionId: number, collectionAddress: string, contract: Contract }> => {202 const {collectionAddress, collectionId} = await helper.eth.createNFTCollection(owner, 'A', 'B', 'C');203204 const contract = helper.ethNativeContract.collection(collectionAddress, 'nft', owner);205 await contract.methods.setCollectionNesting(true).send({from: owner});206207 return {collectionId, collectionAddress, contract};208};209210main()211 .then(() => process.exit(0))212 .catch((e) => {213 console.log(e);214 process.exit(1);215 });216217218219220221tests/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.tsdiffbeforeafterboth--- a/tests/src/governance/technicalCommittee.test.ts
+++ b/tests/src/governance/technicalCommittee.test.ts
@@ -36,8 +36,8 @@
});
});
- async function proposalFromAllCommittee(proposal: any) {
- return await usingPlaygrounds(async (helper) => {
+ function proposalFromAllCommittee(proposal: any) {
+ return usingPlaygrounds(async (helper) => {
expect((await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length).to.be.equal(allTechCommitteeThreshold);
const proposeResult = await helper.technicalCommittee.collective.propose(
techcomms.andy,
@@ -54,7 +54,13 @@
await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);
await helper.technicalCommittee.collective.vote(techcomms.greg, proposalHash, proposalIndex, true);
- return await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);
+ const closeResult = await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);
+ Event.TechnicalCommittee.Closed.expect(closeResult);
+ Event.TechnicalCommittee.Approved.expect(closeResult);
+ const {result} = Event.TechnicalCommittee.Executed.expect(closeResult);
+ expect(result).to.eq('Ok');
+
+ return closeResult;
});
}
@@ -64,16 +70,16 @@
await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
- await expect(proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))
- .to.be.fulfilled;
+ const fastTrackProposal = await proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));
+ Event.Democracy.Started.expect(fastTrackProposal);
});
itSub('TechComm can cancel Democracy proposals', async ({helper}) => {
const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
- await expect(proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex)))
- .to.be.fulfilled;
+ const cancelProposal = await proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex));
+ Event.Democracy.ProposalCanceled.expect(cancelProposal);
});
itSub('TechComm can cancel ongoing Democracy referendums', async ({helper}) => {
@@ -81,19 +87,19 @@
const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
const referendumIndex = startedEvent.referendumIndex;
- await expect(proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex)))
- .to.be.fulfilled;
+ const emergencyCancelProposal = await proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex));
+ Event.Democracy.Cancelled.expect(emergencyCancelProposal);
});
-
itSub('TechComm member can 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.technicalCommittee.collective.execute(
+ const vetoExternalCall = await helper.technicalCommittee.collective.execute(
techcomms.andy,
helper.democracy.vetoExternalCall(preimageHash),
- )).to.be.fulfilled;
+ );
+ Event.Democracy.Vetoed.expect(vetoExternalCall);
});
itSub('TechComm can cancel Fellowship referendums', async ({helper}) => {
@@ -108,7 +114,8 @@
defaultEnactmentMoment,
);
const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
- await expect(proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex))).to.be.fulfilled;
+ const cancelProposal = await proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex));
+ Event.FellowshipReferenda.Cancelled.expect(cancelProposal);
});
itSub.skip('TechComm member can add a Fellowship member', async ({helper}) => {
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;