git.delta.rocks / unique-network / refs/commits / 50109b665ea6

difftreelog

fix RMRK disconnect

Daniel Shiposha2022-10-14parent: #2c2096c.patch.diff
in: master

20 files changed

modifiedtests/src/rmrk/acceptNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/acceptNft.test.ts
+++ b/tests/src/rmrk/acceptNft.test.ts
@@ -103,5 +103,5 @@
     expect(isChild).to.be.false;
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/addResource.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/addResource.test.ts
+++ b/tests/src/rmrk/addResource.test.ts
@@ -432,6 +432,6 @@
 
 
   after(() => {
-    api.disconnect();
+    after(async() => { await api.disconnect(); });
   });
 });
modifiedtests/src/rmrk/addTheme.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/addTheme.test.ts
+++ b/tests/src/rmrk/addTheme.test.ts
@@ -125,5 +125,5 @@
     await expectTxFailure(/rmrkEquip\.PermissionError/, tx);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/burnNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/burnNft.test.ts
+++ b/tests/src/rmrk/burnNft.test.ts
@@ -166,7 +166,5 @@
     });
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/changeCollectionIssuer.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/changeCollectionIssuer.test.ts
+++ b/tests/src/rmrk/changeCollectionIssuer.test.ts
@@ -49,7 +49,5 @@
     });
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/createBase.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/createBase.test.ts
+++ b/tests/src/rmrk/createBase.test.ts
@@ -84,5 +84,5 @@
     ]);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/createCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/createCollection.test.ts
+++ b/tests/src/rmrk/createCollection.test.ts
@@ -21,5 +21,5 @@
     await createCollection(api, alice, 'no-limit-metadata', null, 'no-limit-symbol');
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/deleteCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/deleteCollection.test.ts
+++ b/tests/src/rmrk/deleteCollection.test.ts
@@ -42,7 +42,5 @@
     });
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/equipNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/equipNft.test.ts
+++ b/tests/src/rmrk/equipNft.test.ts
@@ -336,7 +336,5 @@
     await expectTxFailure(/rmrkEquip\.CollectionNotEquippable/, tx);
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/getOwnedNfts.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/getOwnedNfts.test.ts
+++ b/tests/src/rmrk/getOwnedNfts.test.ts
@@ -76,5 +76,5 @@
     });
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/lockCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/lockCollection.test.ts
+++ b/tests/src/rmrk/lockCollection.test.ts
@@ -112,7 +112,5 @@
     });
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/mintNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/mintNft.test.ts
+++ b/tests/src/rmrk/mintNft.test.ts
@@ -207,5 +207,5 @@
     expect(nft.isSome).to.be.false;
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/rejectNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rejectNft.test.ts
+++ b/tests/src/rmrk/rejectNft.test.ts
@@ -90,5 +90,5 @@
     await expectTxFailure(/rmrkCore\.CannotRejectNonPendingNft/, tx);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/removeResource.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/removeResource.test.ts
+++ b/tests/src/rmrk/removeResource.test.ts
@@ -343,7 +343,5 @@
     await expectTxFailure(/rmrkCore\.NoPermission/, tx);
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/rmrkIsolation.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rmrkIsolation.test.ts
+++ b/tests/src/rmrk/rmrkIsolation.test.ts
@@ -90,7 +90,7 @@
       bob = privateKey('//Bob');
       normalizedAlice = {Substrate: helper.address.normalizeSubstrateToChainFormat(alice.address)};
 
-      requirePalletsOrSkip(this, helper, [Pallets.RmrkCore]);
+      await requirePalletsOrSkip(this, helper, [Pallets.RmrkCore]);
 
       const collectionIds = await createRmrkCollection(helper, alice);
       uniqueCollectionId = collectionIds.uniqueId;
modifiedtests/src/rmrk/sendNft.test.tsdiffbeforeafterboth
before · tests/src/rmrk/sendNft.test.ts
1import {expect} from 'chai';2import {getApiConnection} from '../substrate/substrate-api';3import {createCollection, mintNft, sendNft} from './util/tx';4import {NftIdTuple} from './util/fetch';5import {isNftChildOfAnother, expectTxFailure, requirePallets, Pallets} from './util/helpers';67describe('integration test: send NFT', () => {8  let api: any;9  before(async function () {10    api = await getApiConnection();11    await requirePallets(this, [Pallets.RmrkCore]);12  });1314  const maxNftId = 0xFFFFFFFF;1516  const alice = '//Alice';17  const bob = '//Bob';1819  const createTestCollection = async (issuerUri: string) => {20    return await createCollection(21      api,22      issuerUri,23      'nft-collection-metadata',24      null,25      'nft-collection',26    );27  };282930  it('send NFT to another user', async () => {31    const originalOwnerUri = alice;32    const newOwnerUri = bob;3334    const collectionId = await createTestCollection(alice);3536    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3738    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);39  });4041  it('[negative] unable to send non-existing NFT', async () => {42    const originalOwnerUri = alice;43    const newOwnerUri = bob;4445    const collectionId = 0;46    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4748    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);49  });5051  it('[negative] unable to send NFT by a not-an-owner', async () => {52    const originalOwnerUri = alice;53    const newOwnerUri = bob;5455    const collectionId = await createTestCollection(alice);5657    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5859    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);60    await expectTxFailure(/rmrkCore\.NoPermission/, tx);61  });6263  it('send NFT to another NFT (same owner)', async () => {64    const originalOwnerUri = alice;6566    const collectionId = await createTestCollection(alice);6768    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');69    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7071    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7273    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7475    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);76    expect(isChild).to.be.true;77  });7879  it('[negative] send non-existing NFT to another NFT', async () => {80    const originalOwnerUri = alice;8182    const collectionId = await createTestCollection(alice);8384    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');85    const childNftId = maxNftId;8687    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8889    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9091    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9293    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);94    expect(isChild).to.be.false;95  });9697  it('send NFT to another NFT (by not-an-owner)', async () => {98    const originalOwnerUri = alice;99100    const collectionId = await createTestCollection(alice);101102    const author = alice;103    const attacker = bob;104105    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');106    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');107108    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];109110    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);111112    await expectTxFailure(/rmrkCore\.NoPermission/, tx);113114    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);115    expect(isChild).to.be.false;116  });117118  it('[negative] send NFT to non-existing NFT', async () => {119    const originalOwnerUri = alice;120121    const collectionId = await createTestCollection(alice);122123    const parentNftId = maxNftId;124    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');125126    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];127128    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);129130    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);131132    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);133    expect(isChild).to.be.false;134  });135136  it('send NFT to another NFT owned by another user', async () => {137    const ownerAlice = alice;138    const ownerBob = bob;139140    const aliceCollectionId = await createTestCollection(alice);141    const bobCollectionId = await createTestCollection(bob);142143    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');144    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');145146    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];147148    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);149  });150151  it('[negative] unable to send NFT to itself', async () => {152    const nftOwner = alice;153    const collectionId = await createTestCollection(alice);154155    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');156157    const newOwnerNFT: NftIdTuple = [collectionId, nftId];158159    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);160161    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);162163    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);164    expect(isChild).to.be.false;165  });166167  it('[negative] unable to send NFT to child NFT', async () => {168    const originalOwnerUri = alice;169170    const collectionId = await createTestCollection(alice);171172    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');173    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');174175    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];176177    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);178179    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);180    expect(isChild).to.be.true;181182    const descendentOwner: NftIdTuple = [collectionId, childNftId];183    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);184185    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);186    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);187    expect(isOuroboros).to.be.false;188  });189190  it('[negative] unable to send NFT to descendent NFT', async () => {191    const originalOwnerUri = alice;192193    const collectionId = await createTestCollection(alice);194195    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');196    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');197    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');198199    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];200201    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);202203    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);204    expect(isChild).to.be.true;205206    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];207    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);208209    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);210    expect(isGrandson).to.be.true;211212    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];213    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);214215    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);216    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);217    expect(isOuroboros).to.be.false;218  });219220  it('send nested NFT to another user', async () => {221    const originalOwner = alice;222    const newOwner = bob;223224    const collectionId = await createTestCollection(alice);225226    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');227    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');228229    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];230231    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);232233    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);234  });235236  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {237    const originalOwner = alice;238    const newOwner = bob;239240    const collectionId = await createTestCollection(alice);241242    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');243    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');244245    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];246247    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);248249    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);250251    await expectTxFailure(/rmrkCore\.NoPermission/, tx);252  });253254  after(() => { api.disconnect(); });255});
after · tests/src/rmrk/sendNft.test.ts
1import {expect} from 'chai';2import {getApiConnection} from '../substrate/substrate-api';3import {createCollection, mintNft, sendNft} from './util/tx';4import {NftIdTuple} from './util/fetch';5import {isNftChildOfAnother, expectTxFailure, requirePallets, Pallets} from './util/helpers';67describe('integration test: send NFT', () => {8  let api: any;9  before(async function () {10    api = await getApiConnection();11    await requirePallets(this, [Pallets.RmrkCore]);12  });1314  const maxNftId = 0xFFFFFFFF;1516  const alice = '//Alice';17  const bob = '//Bob';1819  const createTestCollection = async (issuerUri: string) => {20    return await createCollection(21      api,22      issuerUri,23      'nft-collection-metadata',24      null,25      'nft-collection',26    );27  };282930  it('send NFT to another user', async () => {31    const originalOwnerUri = alice;32    const newOwnerUri = bob;3334    const collectionId = await createTestCollection(alice);3536    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3738    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);39  });4041  it('[negative] unable to send non-existing NFT', async () => {42    const originalOwnerUri = alice;43    const newOwnerUri = bob;4445    const collectionId = 0;46    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4748    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);49  });5051  it('[negative] unable to send NFT by a not-an-owner', async () => {52    const originalOwnerUri = alice;53    const newOwnerUri = bob;5455    const collectionId = await createTestCollection(alice);5657    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5859    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);60    await expectTxFailure(/rmrkCore\.NoPermission/, tx);61  });6263  it('send NFT to another NFT (same owner)', async () => {64    const originalOwnerUri = alice;6566    const collectionId = await createTestCollection(alice);6768    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');69    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7071    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7273    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7475    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);76    expect(isChild).to.be.true;77  });7879  it('[negative] send non-existing NFT to another NFT', async () => {80    const originalOwnerUri = alice;8182    const collectionId = await createTestCollection(alice);8384    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');85    const childNftId = maxNftId;8687    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8889    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9091    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9293    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);94    expect(isChild).to.be.false;95  });9697  it('send NFT to another NFT (by not-an-owner)', async () => {98    const originalOwnerUri = alice;99100    const collectionId = await createTestCollection(alice);101102    const author = alice;103    const attacker = bob;104105    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');106    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');107108    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];109110    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);111112    await expectTxFailure(/rmrkCore\.NoPermission/, tx);113114    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);115    expect(isChild).to.be.false;116  });117118  it('[negative] send NFT to non-existing NFT', async () => {119    const originalOwnerUri = alice;120121    const collectionId = await createTestCollection(alice);122123    const parentNftId = maxNftId;124    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');125126    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];127128    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);129130    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);131132    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);133    expect(isChild).to.be.false;134  });135136  it('send NFT to another NFT owned by another user', async () => {137    const ownerAlice = alice;138    const ownerBob = bob;139140    const aliceCollectionId = await createTestCollection(alice);141    const bobCollectionId = await createTestCollection(bob);142143    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');144    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');145146    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];147148    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);149  });150151  it('[negative] unable to send NFT to itself', async () => {152    const nftOwner = alice;153    const collectionId = await createTestCollection(alice);154155    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');156157    const newOwnerNFT: NftIdTuple = [collectionId, nftId];158159    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);160161    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);162163    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);164    expect(isChild).to.be.false;165  });166167  it('[negative] unable to send NFT to child NFT', async () => {168    const originalOwnerUri = alice;169170    const collectionId = await createTestCollection(alice);171172    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');173    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');174175    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];176177    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);178179    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);180    expect(isChild).to.be.true;181182    const descendentOwner: NftIdTuple = [collectionId, childNftId];183    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);184185    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);186    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);187    expect(isOuroboros).to.be.false;188  });189190  it('[negative] unable to send NFT to descendent NFT', async () => {191    const originalOwnerUri = alice;192193    const collectionId = await createTestCollection(alice);194195    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');196    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');197    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');198199    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];200201    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);202203    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);204    expect(isChild).to.be.true;205206    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];207    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);208209    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);210    expect(isGrandson).to.be.true;211212    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];213    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);214215    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);216    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);217    expect(isOuroboros).to.be.false;218  });219220  it('send nested NFT to another user', async () => {221    const originalOwner = alice;222    const newOwner = bob;223224    const collectionId = await createTestCollection(alice);225226    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');227    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');228229    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];230231    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);232233    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);234  });235236  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {237    const originalOwner = alice;238    const newOwner = bob;239240    const collectionId = await createTestCollection(alice);241242    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');243    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');244245    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];246247    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);248249    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);250251    await expectTxFailure(/rmrkCore\.NoPermission/, tx);252  });253254  after(async() => { await api.disconnect(); });255});
modifiedtests/src/rmrk/setCollectionProperty.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setCollectionProperty.test.ts
+++ b/tests/src/rmrk/setCollectionProperty.test.ts
@@ -62,7 +62,5 @@
     });
   });
 
-  after(() => {
-    api.disconnect();
-  });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/setEquippableList.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setEquippableList.test.ts
+++ b/tests/src/rmrk/setEquippableList.test.ts
@@ -110,5 +110,5 @@
     await expectTxFailure(/rmrkEquip\.PartDoesntExist/, tx);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/setNftProperty.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setNftProperty.test.ts
+++ b/tests/src/rmrk/setNftProperty.test.ts
@@ -84,5 +84,5 @@
     await expectTxFailure(/rmrkCore\.NoPermission/, tx);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });
modifiedtests/src/rmrk/setResourcePriorities.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setResourcePriorities.test.ts
+++ b/tests/src/rmrk/setResourcePriorities.test.ts
@@ -54,5 +54,5 @@
     await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
   });
 
-  after(() => { api.disconnect(); });
+  after(async() => { await api.disconnect(); });
 });