git.delta.rocks / unique-network / refs/commits / e873ca1d6f23

difftreelog

Merge pull request #200 from UniqueNetwork/feature/CORE-185

kozyrevdev2021-09-09parents: #c510897 #0b9c9db.patch.diff
in: master
Collision tests fixed

11 files changed

modifiedtests/src/collision-tests/admVsOwnerChanges.test.tsdiffbeforeafterboth
6import {6import {
7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,
8 createItemExpectSuccess,8 createItemExpectSuccess,
9 normalizeAccountId,
10 waitNewBlocks,
9} from '../util/helpers';11} from '../util/helpers';
1012
11chai.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});
modifiedtests/src/collision-tests/admVsOwnerData.test.tsdiffbeforeafterboth
6import {6import {
7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,
8 createItemExpectSuccess,8 createItemExpectSuccess,
9 normalizeAccountId,
10 waitNewBlocks,
9} from '../util/helpers';11} from '../util/helpers';
1012
11chai.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-length
41 ]);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 values
44 await timeoutPromise(20000);45 await waitNewBlocks(2);
45 });46 });
46 });47 });
47});48});
modifiedtests/src/collision-tests/admVsOwnerTake.test.tsdiffbeforeafterboth
6import {6import {
7 createCollectionExpectSuccess,7 createCollectionExpectSuccess,
8 createItemExpectSuccess,8 createItemExpectSuccess,
9 normalizeAccountId,
10 waitNewBlocks,
9} from '../util/helpers';11} from '../util/helpers';
1012
11chai.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-expression
45 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});
modifiedtests/src/collision-tests/adminDestroyCollection.test.tsdiffbeforeafterboth
5import 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';
911
10chai.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-expression
44 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});
modifiedtests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth
5import 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';
911
10chai.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);
3840
39 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);
4547
46 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;
5657
57 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});
modifiedtests/src/collision-tests/adminRightsOff.test.tsdiffbeforeafterboth
6import 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';
1012
11chai.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});
modifiedtests/src/collision-tests/setSponsorNewOwner.test.tsdiffbeforeafterboth
6import {6import {
7 createCollectionExpectSuccess, setCollectionSponsorExpectSuccess,7 createCollectionExpectSuccess,
8 setCollectionSponsorExpectSuccess,
9 waitNewBlocks,
8} from '../util/helpers';10} from '../util/helpers';
911
10chai.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});
modifiedtests/src/collision-tests/sponsorPayments.test.tsdiffbeforeafterboth
10 createCollectionExpectSuccess,10 createCollectionExpectSuccess,
11 createItemExpectSuccess,11 createItemExpectSuccess,
12 setCollectionSponsorExpectSuccess,12 setCollectionSponsorExpectSuccess,
13 normalizeAccountId,
14 waitNewBlocks,
13} from '../util/helpers';15} from '../util/helpers';
1416
15chai.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');
3839
39 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-expression
50 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});
modifiedtests/src/collision-tests/tokenLimitsOff.test.tsdiffbeforeafterboth
9 createCollectionExpectSuccess,9 createCollectionExpectSuccess,
10 getCreateItemResult,10 getCreateItemResult,
11 setMintPermissionExpectSuccess,11 setMintPermissionExpectSuccess,
12 normalizeAccountId,
13 waitNewBlocks,
12} from '../util/helpers';14} from '../util/helpers';
1315
14chai.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-expression
58 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);
6162
62 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.nft
64 .createMultipleItems(collectionId, Ferdie.address, args);65 .createMultipleItems(collectionId, normalizeAccountId(Ferdie.address), args);
65 const mintItemTwo = api.tx.nft66 const mintItemTwo = api.tx.nft
66 .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});
modifiedtests/src/collision-tests/turnsOffMinting.test.tsdiffbeforeafterboth
7 addToWhiteListExpectSuccess,7 addToWhiteListExpectSuccess,
8 createCollectionExpectSuccess,8 createCollectionExpectSuccess,
9 setMintPermissionExpectSuccess,9 setMintPermissionExpectSuccess,
10 normalizeAccountId,
11 waitNewBlocks,
10} from '../util/helpers';12} from '../util/helpers';
1113
12chai.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);
3233
33 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-expression
42 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});
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
1195 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}
1197
1198export async function waitNewBlocks(blocksCount = 1): Promise<void> {
1199 await usingApi(async (api) => {
1200 const promise = new Promise<void>(async (resolve) => {
1201
1202 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