difftreelog
Merge pull request #200 from UniqueNetwork/feature/CORE-185
in: master
Collision tests fixed
11 files changed
tests/src/collision-tests/admVsOwnerChanges.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 createItemExpectSuccess,8 createItemExpectSuccess,9 normalizeAccountId,10 waitNewBlocks,9} from '../util/helpers';11} from '../util/helpers';101211chai.use(chaiAsPromised);13chai.use(chaiAsPromised);30 28 await usingApi(async (api) => {31 await usingApi(async (api) => {29 const collectionId = await createCollectionExpectSuccess();32 const collectionId = await createCollectionExpectSuccess();30 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);33 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));31 await submitTransactionAsync(Alice, changeAdminTxBob);34 await submitTransactionAsync(Alice, changeAdminTxBob);32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));33 const changeAdminTxFerdie = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address);35 const changeAdminTxFerdie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Ferdie.address));34 await submitTransactionAsync(Bob, changeAdminTxFerdie);36 await submitTransactionAsync(Bob, changeAdminTxFerdie);35 const itemId = await createItemExpectSuccess(Ferdie, collectionId, 'NFT');37 const itemId = await createItemExpectSuccess(Ferdie, collectionId, 'NFT');36 //38 37 const changeOwner = api.tx.nft.transferFrom(Ferdie.address, Bob.address, collectionId, itemId, 1);39 const changeOwner = api.tx.nft.transferFrom(normalizeAccountId(Ferdie.address), normalizeAccountId(Bob.address), collectionId, itemId, 1);38 const approve = api.tx.nft.approve(Bob.address, collectionId, itemId, 1);40 const approve = api.tx.nft.approve(normalizeAccountId(Bob.address), collectionId, itemId, 1);39 const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1);41 const sendItem = api.tx.nft.transfer(normalizeAccountId(Alice.address), collectionId, itemId, 1);40 await Promise.all([42 await Promise.all([41 changeOwner.signAndSend(Alice),43 changeOwner.signAndSend(Alice),42 approve.signAndSend(Bob),44 approve.signAndSend(Bob),43 sendItem.signAndSend(Ferdie),45 sendItem.signAndSend(Ferdie),44 ]);46 ]);45 const itemBefore: any = await api.query.nft.nftItemList(collectionId, itemId);47 const itemBefore: any = await api.query.nft.nftItemList(collectionId, itemId);46 expect(itemBefore.Owner).not.to.be.eq(Bob.address);48 expect(itemBefore.Owner).not.to.be.eq(Bob.address);47 await timeoutPromise(20000);49 await waitNewBlocks(2);48 });50 });49 });51 });50});52});tests/src/collision-tests/admVsOwnerData.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 createItemExpectSuccess,8 createItemExpectSuccess,9 normalizeAccountId,10 waitNewBlocks,9} from '../util/helpers';11} from '../util/helpers';101211chai.use(chaiAsPromised);13chai.use(chaiAsPromised);26 const AliceData = 1;28 const AliceData = 1;27 const BobData = 2;29 const BobData = 2;28 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();29 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);31 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));30 await submitTransactionAsync(Alice, changeAdminTx);32 await submitTransactionAsync(Alice, changeAdminTx);31 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');33 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');33 //34 //34 // tslint:disable-next-line: max-line-length35 // tslint:disable-next-line: max-line-length41 ]);42 ]);42 const item: any = await api.query.nft.nftItemList(collectionId, itemId);43 const item: any = await api.query.nft.nftItemList(collectionId, itemId);43 expect(item.VariableData).not.to.be.eq(null); // Pseudo-random selection of one of two values44 expect(item.VariableData).not.to.be.eq(null); // Pseudo-random selection of one of two values44 await timeoutPromise(20000);45 await waitNewBlocks(2);45 });46 });46 });47 });47});48});tests/src/collision-tests/admVsOwnerTake.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 createItemExpectSuccess,8 createItemExpectSuccess,9 normalizeAccountId,10 waitNewBlocks,9} from '../util/helpers';11} from '../util/helpers';101211chai.use(chaiAsPromised);13chai.use(chaiAsPromised);27 it('The collection admin burns the token and in the same block the token owner performs a transaction on it ', async () => {29 it('The collection admin burns the token and in the same block the token owner performs a transaction on it ', async () => {28 await usingApi(async (api) => {30 await usingApi(async (api) => {29 const collectionId = await createCollectionExpectSuccess();31 const collectionId = await createCollectionExpectSuccess();30 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);32 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));31 await submitTransactionAsync(Alice, changeAdminTx);33 await submitTransactionAsync(Alice, changeAdminTx);32 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));33 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');34 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');34 //35 //35 const sendItem = api.tx.nft.transfer(Ferdie.address, collectionId, itemId, 1);36 const sendItem = api.tx.nft.transfer(normalizeAccountId(Ferdie.address), collectionId, itemId, 1);36 const burnItem = api.tx.nft.burnItem(collectionId, itemId, 1);37 const burnItem = api.tx.nft.burnItem(collectionId, itemId, 1);37 await Promise.all([38 await Promise.all([38 sendItem.signAndSend(Bob),39 sendItem.signAndSend(Bob),39 burnItem.signAndSend(Alice),40 burnItem.signAndSend(Alice),40 ]);41 ]);41 await timeoutPromise(10000);42 await waitNewBlocks(2);42 let itemBurn = false;43 let itemBurn = false;43 itemBurn = (await (api.query.nft.nftItemList(collectionId, itemId))).toJSON() as boolean;44 itemBurn = (await (api.query.nft.nftItemList(collectionId, itemId))).toJSON() as boolean;44 // tslint:disable-next-line: no-unused-expression45 // tslint:disable-next-line: no-unused-expression45 expect(itemBurn).to.be.null;46 expect(itemBurn).to.be.null;46 await timeoutPromise(20000);47 await waitNewBlocks(2);47 });48 });48 });49 });49});50});tests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';5import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 normalizeAccountId,9 waitNewBlocks,8} from '../util/helpers';10} from '../util/helpers';91110chai.use(chaiAsPromised);12chai.use(chaiAsPromised);26 it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => {28 it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => {27 await usingApi(async (api) => {29 await usingApi(async (api) => {28 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();29 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);31 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));30 await submitTransactionAsync(Alice, changeAdminTx);32 await submitTransactionAsync(Alice, changeAdminTx);31 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));32 await timeoutPromise(10000);33 await waitNewBlocks(1);33 //34 //34 const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, Ferdie.address);35 const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Ferdie.address));35 const destroyCollection = api.tx.nft.destroyCollection(collectionId);36 const destroyCollection = api.tx.nft.destroyCollection(collectionId);36 await Promise.all([37 await Promise.all([37 addWhitelistAdm.signAndSend(Bob),38 addWhitelistAdm.signAndSend(Bob),38 destroyCollection.signAndSend(Alice),39 destroyCollection.signAndSend(Alice),39 ]);40 ]);40 await timeoutPromise(10000);41 await waitNewBlocks(1);41 let whiteList = false;42 let whiteList = false;42 whiteList = (await api.query.nft.whiteList(collectionId, Ferdie.address)).toJSON() as boolean;43 whiteList = (await api.query.nft.whiteList(collectionId, Ferdie.address)).toJSON() as boolean;43 // tslint:disable-next-line: no-unused-expression44 // tslint:disable-next-line: no-unused-expression44 expect(whiteList).to.be.false;45 expect(whiteList).to.be.false;45 await timeoutPromise(20000);46 await waitNewBlocks(2);46 });47 });47 });48 });48});49});tests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth5import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';5import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api';6import {6import {7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,8 normalizeAccountId,9 waitNewBlocks,8} from '../util/helpers';10} from '../util/helpers';91110chai.use(chaiAsPromised);12chai.use(chaiAsPromised);36 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();38 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();37 expect(chainAdminLimit).to.be.equal(5);39 expect(chainAdminLimit).to.be.equal(5);384039 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);41 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Eve.address));40 await submitTransactionAsync(Alice, changeAdminTx1);42 await submitTransactionAsync(Alice, changeAdminTx1);41 const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, Dave.address);43 const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Dave.address));42 await submitTransactionAsync(Alice, changeAdminTx2);44 await submitTransactionAsync(Alice, changeAdminTx2);43 const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);45 const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));44 await submitTransactionAsync(Alice, changeAdminTx3);46 await submitTransactionAsync(Alice, changeAdminTx3);454746 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));47 const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address);48 const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Ferdie.address));48 const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address);49 const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));49 await Promise.all([50 await Promise.all([50 addAdmOne.signAndSend(Bob),51 addAdmOne.signAndSend(Bob),51 addAdmTwo.signAndSend(Alice),52 addAdmTwo.signAndSend(Alice),52 ]);53 ]);53 await timeoutPromise(10000);54 await waitNewBlocks(2);54 const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, Alice.address);55 const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Alice.address));55 await expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected;56 await expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected;565757 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));58 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));58 expect(adminListAfterAddAdmin).to.be.contains(Eve.address);59 expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Eve.address));59 expect(adminListAfterAddAdmin).to.be.contains(Ferdie.address);60 expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Ferdie.address));60 expect(adminListAfterAddAdmin).not.to.be.contains(Alice.address);61 expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(Alice.address));61 await timeoutPromise(20000);62 await waitNewBlocks(2);62 });63 });63 });64 });64});65});tests/src/collision-tests/adminRightsOff.test.tsdiffbeforeafterboth6import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';6import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';7import {7import {8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,9 normalizeAccountId,10 waitNewBlocks,9} from '../util/helpers';11} from '../util/helpers';101211chai.use(chaiAsPromised);13chai.use(chaiAsPromised);25 it('In the block, the collection admin adds a token or changes data, and the collection owner deprives the admin of rights ', async () => {27 it('In the block, the collection admin adds a token or changes data, and the collection owner deprives the admin of rights ', async () => {26 await usingApi(async (api) => {28 await usingApi(async (api) => {27 const collectionId = await createCollectionExpectSuccess();29 const collectionId = await createCollectionExpectSuccess();28 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);30 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));29 await submitTransactionAsync(Alice, changeAdminTx);31 await submitTransactionAsync(Alice, changeAdminTx);30 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));31 await timeoutPromise(10000);32 await waitNewBlocks(1);32 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];33 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];33 const addItemAdm = api.tx.nft.createMultipleItems(collectionId, Bob.address, args);34 const addItemAdm = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);34 const removeAdm = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address);35 const removeAdm = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));35 await Promise.all([36 await Promise.all([36 addItemAdm.signAndSend(Bob),37 addItemAdm.signAndSend(Bob),37 removeAdm.signAndSend(Alice),38 removeAdm.signAndSend(Alice),38 ]);39 ]);39 await timeoutPromise(10000);40 await waitNewBlocks(2);40 const itemsListIndex = await api.query.nft.itemListIndex(collectionId) as unknown as BN;41 const itemsListIndex = await api.query.nft.itemListIndex(collectionId) as unknown as BN;41 expect(itemsListIndex.toNumber()).to.be.equal(0);42 expect(itemsListIndex.toNumber()).to.be.equal(0);42 const adminList: any = (await api.query.nft.adminList(collectionId));43 const adminList: any = (await api.query.nft.adminList(collectionId));43 expect(adminList).not.to.be.contains(Bob.address);44 expect(adminList).not.to.be.contains(normalizeAccountId(Bob.address));44 await timeoutPromise(20000);45 await waitNewBlocks(2);45 });46 });46 });47 });47});48});tests/src/collision-tests/setSponsorNewOwner.test.tsdiffbeforeafterboth6import {6import {7 createCollectionExpectSuccess, setCollectionSponsorExpectSuccess,7 createCollectionExpectSuccess, 8 setCollectionSponsorExpectSuccess,9 waitNewBlocks,8} from '../util/helpers';10} from '../util/helpers';91110chai.use(chaiAsPromised);12chai.use(chaiAsPromised);27 await usingApi(async (api) => {29 await usingApi(async (api) => {28 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();29 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);31 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);30 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));31 await timeoutPromise(10000);32 await waitNewBlocks(2);32 const confirmSponsorship = api.tx.nft.confirmSponsorship(collectionId);33 const confirmSponsorship = api.tx.nft.confirmSponsorship(collectionId);33 const changeCollectionOwner = api.tx.nft.changeCollectionOwner(collectionId, Ferdie.address);34 const changeCollectionOwner = api.tx.nft.changeCollectionOwner(collectionId, Ferdie.address);34 await Promise.all([35 await Promise.all([35 confirmSponsorship.signAndSend(Bob),36 confirmSponsorship.signAndSend(Bob),36 changeCollectionOwner.signAndSend(Alice),37 changeCollectionOwner.signAndSend(Alice),37 ]);38 ]);38 await timeoutPromise(10000);39 await waitNewBlocks(2);39 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();40 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();40 expect(collection.Sponsorship.Confirmed).to.be.eq(Bob.address);41 expect(collection.Sponsorship.confirmed).to.be.eq(Bob.address);41 expect(collection.Owner).to.be.eq(Ferdie.address);42 expect(collection.Owner).to.be.eq(Ferdie.address);42 await timeoutPromise(20000);43 await waitNewBlocks(2);43 });44 });44 });45 });45});46});tests/src/collision-tests/sponsorPayments.test.tsdiffbeforeafterboth10 createCollectionExpectSuccess,10 createCollectionExpectSuccess,11 createItemExpectSuccess,11 createItemExpectSuccess,12 setCollectionSponsorExpectSuccess,12 setCollectionSponsorExpectSuccess,13 normalizeAccountId,14 waitNewBlocks,13} from '../util/helpers';15} from '../util/helpers';141615chai.use(chaiAsPromised);17chai.use(chaiAsPromised);29 it('Payment of commission if one block contains transactions for payment from the sponsor\'s balance and his (sponsor\'s) exclusion from the collection ', async () => {31 it('Payment of commission if one block contains transactions for payment from the sponsor\'s balance and his (sponsor\'s) exclusion from the collection ', async () => {30 await usingApi(async (api) => {32 await usingApi(async (api) => {31 const collectionId = await createCollectionExpectSuccess();33 const collectionId = await createCollectionExpectSuccess();32 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);34 const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));33 await submitTransactionAsync(Alice, changeAdminTxBob);35 await submitTransactionAsync(Alice, changeAdminTxBob);34 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));35 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');36 const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT');36 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);37 await setCollectionSponsorExpectSuccess(collectionId, Bob.address);37 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');38 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');383939 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);40 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);40 const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1);41 const sendItem = api.tx.nft.transfer(normalizeAccountId(Alice.address), collectionId, itemId, 1);41 const revokeSponsor = api.tx.nft.removeCollectionSponsor(collectionId);42 const revokeSponsor = api.tx.nft.removeCollectionSponsor(collectionId);42 await Promise.all([43 await Promise.all([43 sendItem.signAndSend(Bob),44 sendItem.signAndSend(Bob),48 expect(alicesBalanceAfter === alicesBalanceBefore).to.be.true;49 expect(alicesBalanceAfter === alicesBalanceBefore).to.be.true;49 // tslint:disable-next-line:no-unused-expression50 // tslint:disable-next-line:no-unused-expression50 expect(bobsBalanceAfter === bobsBalanceBefore).to.be.true;51 expect(bobsBalanceAfter === bobsBalanceBefore).to.be.true;51 await timeoutPromise(20000);52 await waitNewBlocks(2);52 });53 });53 });54 });54});55});tests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth9 createCollectionExpectSuccess,9 createCollectionExpectSuccess,10 getCreateItemResult,10 getCreateItemResult,11 setMintPermissionExpectSuccess,11 setMintPermissionExpectSuccess,12 normalizeAccountId,13 waitNewBlocks,12} from '../util/helpers';14} from '../util/helpers';131514chai.use(chaiAsPromised);16chai.use(chaiAsPromised);56 const subTxTesult = getCreateItemResult(subTx);58 const subTxTesult = getCreateItemResult(subTx);57 // tslint:disable-next-line:no-unused-expression59 // tslint:disable-next-line:no-unused-expression58 expect(subTxTesult.success).to.be.true;60 expect(subTxTesult.success).to.be.true;59 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));60 await timeoutPromise(10000);61 await waitNewBlocks(2);616262 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];63 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];63 const mintItemOne = api.tx.nft64 const mintItemOne = api.tx.nft64 .createMultipleItems(collectionId, Ferdie.address, args);65 .createMultipleItems(collectionId, normalizeAccountId(Ferdie.address), args);65 const mintItemTwo = api.tx.nft66 const mintItemTwo = api.tx.nft66 .createMultipleItems(collectionId, Bob.address, args);67 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);67 await Promise.all([68 await Promise.all([68 mintItemOne.signAndSend(Ferdie),69 mintItemOne.signAndSend(Ferdie),69 mintItemTwo.signAndSend(Bob),70 mintItemTwo.signAndSend(Bob),70 ]);71 ]);71 await timeoutPromise(10000);72 await waitNewBlocks(2);72 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;73 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;73 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);74 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);74 // TokenLimit = 4. The first transaction is successful. The second should fail.75 // TokenLimit = 4. The first transaction is successful. The second should fail.75 await timeoutPromise(10000);76 await waitNewBlocks(2);76 });77 });77 });78 });78});79});tests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth7 addToWhiteListExpectSuccess,7 addToWhiteListExpectSuccess,8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,9 setMintPermissionExpectSuccess,9 setMintPermissionExpectSuccess,10 normalizeAccountId,11 waitNewBlocks,10} from '../util/helpers';12} from '../util/helpers';111312chai.use(chaiAsPromised);14chai.use(chaiAsPromised);26 it('The collection owner turns off minting mode and there are minting transactions in the same block ', async () => {28 it('The collection owner turns off minting mode and there are minting transactions in the same block ', async () => {27 await usingApi(async (api) => {29 await usingApi(async (api) => {28 const collectionId = await createCollectionExpectSuccess();30 const collectionId = await createCollectionExpectSuccess();29 const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout));30 await setMintPermissionExpectSuccess(Alice, collectionId, true);31 await setMintPermissionExpectSuccess(Alice, collectionId, true);31 await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);32 await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);323333 const mintItem = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT');34 const mintItem = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT');34 const offMinting = api.tx.nft.setMintPermission(collectionId, false);35 const offMinting = api.tx.nft.setMintPermission(collectionId, false);35 await Promise.all([36 await Promise.all([36 mintItem.signAndSend(Ferdie),37 mintItem.signAndSend(Ferdie),40 itemList = (await (api.query.nft.nftItemList(collectionId, mintItem))).toJSON() as boolean;41 itemList = (await (api.query.nft.nftItemList(collectionId, mintItem))).toJSON() as boolean;41 // tslint:disable-next-line: no-unused-expression42 // tslint:disable-next-line: no-unused-expression42 expect(itemList).to.be.null;43 expect(itemList).to.be.null;43 await timeoutPromise(20000);44 await waitNewBlocks(2);44 });45 });45 });46 });46});47});tests/src/util/helpers.tsdiffbeforeafterboth1195 return normalizeAccountId((await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON().Owner);1195 return normalizeAccountId((await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON().Owner);1196}1196}11971198export async function waitNewBlocks(blocksCount = 1): Promise<void> {1199 await usingApi(async (api) => {1200 const promise = new Promise<void>(async (resolve) => {12011202 const unsubscribe = await api.rpc.chain.subscribeNewHeads(() => {1203 if (blocksCount > 0) {1204 blocksCount--;1205 } else {1206 unsubscribe();1207 resolve();1208 }1209 });1210 });1211 return promise;1212 });1213}1214