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

difftreelog

feat tests requirePallets

Daniel Shiposha2022-08-03parent: #fe18d26.patch.diff
in: master

21 files changed

modifiedtests/src/rmrk/acceptNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/acceptNft.test.ts
+++ b/tests/src/rmrk/acceptNft.test.ts
@@ -8,13 +8,13 @@
 } from './util/tx';
 import {NftIdTuple} from './util/fetch';
 import {isNftChildOfAnother, expectTxFailure} from './util/helpers';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 
 describe('integration test: accept NFT', () => {
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
   
   
modifiedtests/src/rmrk/addResource.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/addResource.test.ts
+++ b/tests/src/rmrk/addResource.test.ts
@@ -12,7 +12,7 @@
   addNftComposableResource,
 } from './util/tx';
 import {RmrkTraitsResourceResourceInfo as ResourceInfo} from '@polkadot/types/lookup';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 
 describe('integration test: add NFT resource', () => {
   const Alice = '//Alice';
@@ -27,7 +27,7 @@
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   it('add resource', async () => {
modifiedtests/src/rmrk/addTheme.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/addTheme.test.ts
+++ b/tests/src/rmrk/addTheme.test.ts
@@ -3,13 +3,13 @@
 import {createBase, addTheme} from './util/tx';
 import {expectTxFailure} from './util/helpers';
 import {getThemeNames} from './util/fetch';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 
 describe('integration test: add Theme to Base', () => {
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkEquip]);
   });
 
   const alice = '//Alice';
modifiedtests/src/rmrk/burnNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/burnNft.test.ts
+++ b/tests/src/rmrk/burnNft.test.ts
@@ -5,7 +5,7 @@
 
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -17,7 +17,7 @@
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/changeCollectionIssuer.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/changeCollectionIssuer.test.ts
+++ b/tests/src/rmrk/changeCollectionIssuer.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {
   changeIssuer,
@@ -13,7 +13,7 @@
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/createBase.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/createBase.test.ts
+++ b/tests/src/rmrk/createBase.test.ts
@@ -1,12 +1,12 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {createCollection, createBase} from './util/tx';
 
 describe('integration test: create new Base', () => {
   let api: any;
   before(async function() {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore, Pallets.RmrkEquip]);
   });
 
   const alice = '//Alice';
modifiedtests/src/rmrk/createCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/createCollection.test.ts
+++ b/tests/src/rmrk/createCollection.test.ts
@@ -1,12 +1,12 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import {getModuleNames, Pallets} from '../util/helpers';
+import {requirePallets, Pallets} from '../util/helpers';
 import {createCollection} from './util/tx';
 
 describe('Integration test: create new collection', () => {
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/deleteCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/deleteCollection.test.ts
+++ b/tests/src/rmrk/deleteCollection.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, deleteCollection} from './util/tx';
 
@@ -7,7 +7,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   const Alice = '//Alice';
modifiedtests/src/rmrk/equipNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/equipNft.test.ts
+++ b/tests/src/rmrk/equipNft.test.ts
@@ -1,7 +1,7 @@
 import {ApiPromise} from '@polkadot/api';
 import {expect} from 'chai';
 import {getApiConnection} from '../substrate/substrate-api';
-import {getModuleNames, Pallets} from '../util/helpers';
+import {requirePallets, Pallets} from '../util/helpers';
 import {getNft, getParts, NftIdTuple} from './util/fetch';
 import {expectTxFailure} from './util/helpers';
 import {
@@ -126,7 +126,7 @@
   
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore, Pallets.RmrkEquip]);
   });
 
   it('equip nft', async () => {
modifiedtests/src/rmrk/getOwnedNfts.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/getOwnedNfts.test.ts
+++ b/tests/src/rmrk/getOwnedNfts.test.ts
@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {getOwnedNfts} from './util/fetch';
 import {mintNft, createCollection} from './util/tx';
 
@@ -9,7 +9,7 @@
   
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/lockCollection.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/lockCollection.test.ts
+++ b/tests/src/rmrk/lockCollection.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, lockCollection, mintNft} from './util/tx';
 
@@ -11,7 +11,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   it('lock collection', async () => {
modifiedtests/src/rmrk/mintNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/mintNft.test.ts
+++ b/tests/src/rmrk/mintNft.test.ts
@@ -1,6 +1,6 @@
 import {expect} from 'chai';
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {getNft} from './util/fetch';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, mintNft} from './util/tx';
@@ -10,7 +10,7 @@
  
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/rejectNft.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rejectNft.test.ts
+++ b/tests/src/rmrk/rejectNft.test.ts
@@ -8,13 +8,13 @@
 } from './util/tx';
 import {getChildren, NftIdTuple} from './util/fetch';
 import {isNftChildOfAnother, expectTxFailure} from './util/helpers';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 
 describe('integration test: reject NFT', () => {
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
 
modifiedtests/src/rmrk/removeResource.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/removeResource.test.ts
+++ b/tests/src/rmrk/removeResource.test.ts
@@ -1,7 +1,7 @@
 import {expect} from 'chai';
 import privateKey from '../substrate/privateKey';
 import {executeTransaction, getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {getNft, NftIdTuple} from './util/fetch';
 import {expectTxFailure} from './util/helpers';
 import {
@@ -20,7 +20,7 @@
   before(async function() {
     api = await getApiConnection();
     ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   const Alice = '//Alice';
modifiedtests/src/rmrk/rmrkIsolation.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rmrkIsolation.test.ts
+++ b/tests/src/rmrk/rmrkIsolation.test.ts
@@ -6,7 +6,7 @@
   getCreateCollectionResult,
   getDetailedCollectionInfo,
   getGenericResult,
-  getModuleNames,
+  requirePallets,
   normalizeAccountId,
   Pallets,
 } from '../util/helpers';
@@ -64,7 +64,7 @@
   before(async function() {
     await usingApi(async (api, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
-      if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+      requirePallets(this, api, [Pallets.RmrkCore]);
     });
   });
 
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} from './util/helpers';6import { getModuleNames, Pallets } from '../util/helpers';78describe('integration test: send NFT', () => {9  let api: any;10  before(async function () {11    api = await getApiConnection();12    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();13  });1415  const maxNftId = 0xFFFFFFFF;1617  const alice = '//Alice';18  const bob = '//Bob';1920  const createTestCollection = async (issuerUri: string) => {21    return await createCollection(22      api,23      issuerUri,24      'nft-collection-metadata',25      null,26      'nft-collection',27    );28  };293031  it('send NFT to another user', async () => {32    const originalOwnerUri = alice;33    const newOwnerUri = bob;3435    const collectionId = await createTestCollection(alice);3637    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3839    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);40  });4142  it('[negative] unable to send non-existing NFT', async () => {43    const originalOwnerUri = alice;44    const newOwnerUri = bob;4546    const collectionId = 0;47    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4849    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);50  });5152  it('[negative] unable to send NFT by a not-an-owner', async () => {53    const originalOwnerUri = alice;54    const newOwnerUri = bob;5556    const collectionId = await createTestCollection(alice);5758    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5960    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);61    await expectTxFailure(/rmrkCore\.NoPermission/, tx);62  });6364  it('send NFT to another NFT (same owner)', async () => {65    const originalOwnerUri = alice;6667    const collectionId = await createTestCollection(alice);6869    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');70    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7172    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7374    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7576    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);77    expect(isChild).to.be.true;78  });7980  it('[negative] send non-existing NFT to another NFT', async () => {81    const originalOwnerUri = alice;8283    const collectionId = await createTestCollection(alice);8485    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');86    const childNftId = maxNftId;8788    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8990    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9192    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9394    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);95    expect(isChild).to.be.false;96  });9798  it('send NFT to another NFT (by not-an-owner)', async () => {99    const originalOwnerUri = alice;100101    const collectionId = await createTestCollection(alice);102103    const author = alice;104    const attacker = bob;105106    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');107    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');108109    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];110111    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);112113    await expectTxFailure(/rmrkCore\.NoPermission/, tx);114115    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);116    expect(isChild).to.be.false;117  });118119  it('[negative] send NFT to non-existing NFT', async () => {120    const originalOwnerUri = alice;121122    const collectionId = await createTestCollection(alice);123124    const parentNftId = maxNftId;125    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');126127    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];128129    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);130131    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);132133    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);134    expect(isChild).to.be.false;135  });136137  it('send NFT to another NFT owned by another user', async () => {138    const ownerAlice = alice;139    const ownerBob = bob;140141    const aliceCollectionId = await createTestCollection(alice);142    const bobCollectionId = await createTestCollection(bob);143144    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');145    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');146147    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];148149    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);150  });151152  it('[negative] unable to send NFT to itself', async () => {153    const nftOwner = alice;154    const collectionId = await createTestCollection(alice);155156    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');157158    const newOwnerNFT: NftIdTuple = [collectionId, nftId];159160    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);161162    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);163164    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);165    expect(isChild).to.be.false;166  });167168  it('[negative] unable to send NFT to child NFT', async () => {169    const originalOwnerUri = alice;170171    const collectionId = await createTestCollection(alice);172173    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');174    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');175176    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];177178    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);179180    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);181    expect(isChild).to.be.true;182183    const descendentOwner: NftIdTuple = [collectionId, childNftId];184    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);185186    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);187    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);188    expect(isOuroboros).to.be.false;189  });190191  it('[negative] unable to send NFT to descendent NFT', async () => {192    const originalOwnerUri = alice;193194    const collectionId = await createTestCollection(alice);195196    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');197    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');198    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');199200    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];201202    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);203204    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);205    expect(isChild).to.be.true;206207    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];208    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);209210    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);211    expect(isGrandson).to.be.true;212213    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];214    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);215216    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);217    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);218    expect(isOuroboros).to.be.false;219  });220221  it('send nested NFT to another user', async () => {222    const originalOwner = alice;223    const newOwner = bob;224225    const collectionId = await createTestCollection(alice);226227    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');228    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');229230    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];231232    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);233234    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);235  });236237  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {238    const originalOwner = alice;239    const newOwner = bob;240241    const collectionId = await createTestCollection(alice);242243    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');244    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');245246    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];247248    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);249250    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);251252    await expectTxFailure(/rmrkCore\.NoPermission/, tx);253  });254255  after(() => { api.disconnect(); });256});
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} from './util/helpers';6import { requirePallets, Pallets } from '../util/helpers';78describe('integration test: send NFT', () => {9  let api: any;10  before(async function () {11    api = await getApiConnection();12    requirePallets(this, api, [Pallets.RmrkCore]);13  });1415  const maxNftId = 0xFFFFFFFF;1617  const alice = '//Alice';18  const bob = '//Bob';1920  const createTestCollection = async (issuerUri: string) => {21    return await createCollection(22      api,23      issuerUri,24      'nft-collection-metadata',25      null,26      'nft-collection',27    );28  };293031  it('send NFT to another user', async () => {32    const originalOwnerUri = alice;33    const newOwnerUri = bob;3435    const collectionId = await createTestCollection(alice);3637    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');3839    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);40  });4142  it('[negative] unable to send non-existing NFT', async () => {43    const originalOwnerUri = alice;44    const newOwnerUri = bob;4546    const collectionId = 0;47    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);4849    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);50  });5152  it('[negative] unable to send NFT by a not-an-owner', async () => {53    const originalOwnerUri = alice;54    const newOwnerUri = bob;5556    const collectionId = await createTestCollection(alice);5758    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');5960    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);61    await expectTxFailure(/rmrkCore\.NoPermission/, tx);62  });6364  it('send NFT to another NFT (same owner)', async () => {65    const originalOwnerUri = alice;6667    const collectionId = await createTestCollection(alice);6869    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');70    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');7172    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];7374    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);7576    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);77    expect(isChild).to.be.true;78  });7980  it('[negative] send non-existing NFT to another NFT', async () => {81    const originalOwnerUri = alice;8283    const collectionId = await createTestCollection(alice);8485    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');86    const childNftId = maxNftId;8788    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];8990    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);9192    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);9394    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);95    expect(isChild).to.be.false;96  });9798  it('send NFT to another NFT (by not-an-owner)', async () => {99    const originalOwnerUri = alice;100101    const collectionId = await createTestCollection(alice);102103    const author = alice;104    const attacker = bob;105106    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');107    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');108109    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];110111    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);112113    await expectTxFailure(/rmrkCore\.NoPermission/, tx);114115    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);116    expect(isChild).to.be.false;117  });118119  it('[negative] send NFT to non-existing NFT', async () => {120    const originalOwnerUri = alice;121122    const collectionId = await createTestCollection(alice);123124    const parentNftId = maxNftId;125    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');126127    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];128129    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);130131    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);132133    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);134    expect(isChild).to.be.false;135  });136137  it('send NFT to another NFT owned by another user', async () => {138    const ownerAlice = alice;139    const ownerBob = bob;140141    const aliceCollectionId = await createTestCollection(alice);142    const bobCollectionId = await createTestCollection(bob);143144    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');145    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');146147    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];148149    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);150  });151152  it('[negative] unable to send NFT to itself', async () => {153    const nftOwner = alice;154    const collectionId = await createTestCollection(alice);155156    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');157158    const newOwnerNFT: NftIdTuple = [collectionId, nftId];159160    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);161162    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);163164    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);165    expect(isChild).to.be.false;166  });167168  it('[negative] unable to send NFT to child NFT', async () => {169    const originalOwnerUri = alice;170171    const collectionId = await createTestCollection(alice);172173    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');174    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');175176    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];177178    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);179180    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);181    expect(isChild).to.be.true;182183    const descendentOwner: NftIdTuple = [collectionId, childNftId];184    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);185186    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);187    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);188    expect(isOuroboros).to.be.false;189  });190191  it('[negative] unable to send NFT to descendent NFT', async () => {192    const originalOwnerUri = alice;193194    const collectionId = await createTestCollection(alice);195196    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');197    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');198    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');199200    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];201202    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);203204    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);205    expect(isChild).to.be.true;206207    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];208    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);209210    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);211    expect(isGrandson).to.be.true;212213    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];214    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);215216    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);217    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);218    expect(isOuroboros).to.be.false;219  });220221  it('send nested NFT to another user', async () => {222    const originalOwner = alice;223    const newOwner = bob;224225    const collectionId = await createTestCollection(alice);226227    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');228    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');229230    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];231232    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);233234    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);235  });236237  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {238    const originalOwner = alice;239    const newOwner = bob;240241    const collectionId = await createTestCollection(alice);242243    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');244    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');245246    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];247248    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);249250    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);251252    await expectTxFailure(/rmrkCore\.NoPermission/, tx);253  });254255  after(() => { api.disconnect(); });256});
modifiedtests/src/rmrk/setCollectionProperty.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setCollectionProperty.test.ts
+++ b/tests/src/rmrk/setCollectionProperty.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, setPropertyCollection} from './util/tx';
 
@@ -10,7 +10,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   it('set collection property', async () => {
modifiedtests/src/rmrk/setEquippableList.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setEquippableList.test.ts
+++ b/tests/src/rmrk/setEquippableList.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, createBase, setEquippableList} from './util/tx';
 
@@ -7,7 +7,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   const alice = '//Alice';
modifiedtests/src/rmrk/setNftProperty.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setNftProperty.test.ts
+++ b/tests/src/rmrk/setNftProperty.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {NftIdTuple} from './util/fetch';
 import {expectTxFailure} from './util/helpers';
 import {createCollection, mintNft, sendNft, setNftProperty} from './util/tx';
@@ -8,7 +8,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   const alice = '//Alice';
modifiedtests/src/rmrk/setResourcePriorities.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/setResourcePriorities.test.ts
+++ b/tests/src/rmrk/setResourcePriorities.test.ts
@@ -1,5 +1,5 @@
 import {getApiConnection} from '../substrate/substrate-api';
-import { getModuleNames, Pallets } from '../util/helpers';
+import { requirePallets, Pallets } from '../util/helpers';
 import {expectTxFailure} from './util/helpers';
 import {mintNft, createCollection, setResourcePriorities} from './util/tx';
 
@@ -7,7 +7,7 @@
   let api: any;
   before(async function () {
     api = await getApiConnection();
-    if (!getModuleNames(api).includes(Pallets.RmrkCore)) this.skip();
+    requirePallets(this, api, [Pallets.RmrkCore]);
   });
 
   const alice = '//Alice';
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -28,6 +28,7 @@
 import {hexToStr, strToUTF16, utf16ToStr} from './util';
 import {UpDataStructsRpcCollection, UpDataStructsCreateItemData, UpDataStructsProperty} from '@polkadot/types/lookup';
 import {UpDataStructsTokenChild} from '../interfaces';
+import { Context } from 'mocha';
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -42,6 +43,7 @@
 export enum Pallets {
   Inflation = 'inflation',
   RmrkCore = 'rmrkcore',
+  RmrkEquip = 'rmrkequip',
   ReFungible = 'refungible',
   Fungible = 'fungible',
   NFT = 'nonfungible',
@@ -70,6 +72,16 @@
   return modulesNames;
 }
 
+export function requirePallets(mocha: Context, api: ApiPromise, requiredPallets: string[]) {
+  const pallets = getModuleNames(api);
+
+  const isAllPalletsPresent = requiredPallets.every(p => pallets.includes(p));
+
+  if (!isAllPalletsPresent) {
+    mocha.skip();
+  }
+}
+
 export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId {
   if (typeof input === 'string') {
     if (input.length >= 47) {