git.delta.rocks / unique-network / refs/commits / 81a57542f2f2

difftreelog

test(rmrk-proxy) sample externality test

Fahrrader2022-06-08parent: #719aab2.patch.diff
in: master

3 files changed

modifiedtests/package.jsondiffbeforeafterboth
before · tests/package.json
1{2  "name": "unique-tests",3  "version": "1.0.0",4  "description": "Unique Chain Tests",5  "main": "",6  "devDependencies": {7    "@polkadot/ts": "0.4.22",8    "@polkadot/typegen": "8.6.2",9    "@types/chai": "^4.3.1",10    "@types/chai-as-promised": "^7.1.5",11    "@types/mocha": "^9.1.1",12    "@types/node": "^17.0.35",13    "@typescript-eslint/eslint-plugin": "^5.26.0",14    "@typescript-eslint/parser": "^5.26.0",15    "chai": "^4.3.6",16    "eslint": "^8.16.0",17    "mocha": "^10.0.0",18    "ts-node": "^10.8.0",19    "typescript": "^4.7.2"20  },21  "mocha": {22    "timeout": 9999999,23    "require": "ts-node/register"24  },25  "scripts": {26    "lint": "eslint --ext .ts,.js src/",27    "fix": "eslint --ext .ts,.js src/ --fix",28    "test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",29    "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",30    "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",31    "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",32    "loadTransfer": "ts-node src/transfer.nload.ts",33    "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",34    "testEvent": "mocha --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts",35    "testNesting": "mocha --timeout 9999999 -r ts-node/register ./**/nest.test.ts",36    "testUnnesting": "mocha --timeout 9999999 -r ts-node/register ./**/unnest.test.ts",37    "testStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts",38    "testProperties": "mocha --timeout 9999999 -r ts-node/register ./**/properties.test.ts",39    "testMigrationStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/migration-check.test.ts",40    "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",41    "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",42    "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",43    "testSetCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionSponsor.test.ts",44    "testConfirmSponsorship": "mocha --timeout 9999999 -r ts-node/register ./**/confirmSponsorship.test.ts",45    "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts",46    "testRemoveCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionSponsor.test.ts",47    "testRemoveFromAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromAllowList.test.ts",48    "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",49    "testContracts": "mocha --timeout 9999999 -r ts-node/register ./**/contracts.test.ts",50    "testCreateItem": "mocha --timeout 9999999 -r ts-node/register ./**/createItem.test.ts",51    "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts",52    "testCreateMultipleItemsEx": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItemsEx.test.ts",53    "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts",54    "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts",55    "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",56    "testDestroyCollection": "mocha --timeout 9999999 -r ts-node/register ./**/destroyCollection.test.ts",57    "testToggleContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractAllowList.test.ts",58    "testAddToContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractAllowList.test.ts",59    "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts",60    "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts",61    "testSetMintPermission": "mocha --timeout 9999999 -r ts-node/register ./**/setMintPermission.test.ts",62    "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.test.ts",63    "testEnableContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/enableContractSponsoring.test.ts",64    "testRemoveFromContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromContractAllowList.test.ts",65    "testSetContractSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setContractSponsoringRateLimit.test.ts",66    "testSetOffchainSchema": "mocha --timeout 9999999 -r ts-node/register ./**/setOffchainSchema.test.ts",67    "testOverflow": "mocha --timeout 9999999 -r ts-node/register ./**/overflow.test.ts",68    "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts",69    "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts",70    "testScheduler": "mocha --timeout 9999999 -r ts-node/register ./**/scheduler.test.ts",71    "testSchedulingEVM": "mocha --timeout 9999999 -r ts-node/register ./**/eth/scheduling.test.ts",72    "testXcmTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/xcmTransfer.test.ts",73    "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts",74    "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts",75    "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts",76    "testLimits": "mocha --timeout 9999999 -r ts-node/register ./**/limits.test.ts",77    "testEthCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/eth/createCollection.test.ts",78    "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json",79    "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .",80    "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .",81    "polkadot-types": "echo \"export default {}\" > src/interfaces/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain"82  },83  "author": "",84  "license": "SEE LICENSE IN ../LICENSE",85  "homepage": "",86  "dependencies": {87    "@polkadot/api": "8.6.2",88    "@polkadot/api-contract": "8.6.2",89    "@polkadot/util-crypto": "9.4.1",90    "bignumber.js": "^9.0.2",91    "chai-as-promised": "^7.1.1",92    "find-process": "^1.4.7",93    "solc": "0.8.14-fixed",94    "web3": "^1.7.3"95  },96  "standard": {97    "globals": [98      "it",99      "assert",100      "beforeEach",101      "afterEach",102      "describe",103      "contract",104      "artifacts"105    ]106  },107  "resolutions": {108    "simple-get": "^4.0.1"109  }110}
after · tests/package.json
1{2  "name": "unique-tests",3  "version": "1.0.0",4  "description": "Unique Chain Tests",5  "main": "",6  "devDependencies": {7    "@polkadot/ts": "0.4.22",8    "@polkadot/typegen": "8.6.2",9    "@types/chai": "^4.3.1",10    "@types/chai-as-promised": "^7.1.5",11    "@types/mocha": "^9.1.1",12    "@types/node": "^17.0.35",13    "@typescript-eslint/eslint-plugin": "^5.26.0",14    "@typescript-eslint/parser": "^5.26.0",15    "chai": "^4.3.6",16    "eslint": "^8.16.0",17    "mocha": "^10.0.0",18    "ts-node": "^10.8.0",19    "typescript": "^4.7.2"20  },21  "mocha": {22    "timeout": 9999999,23    "require": "ts-node/register"24  },25  "scripts": {26    "lint": "eslint --ext .ts,.js src/",27    "fix": "eslint --ext .ts,.js src/ --fix",28    "test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",29    "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",30    "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",31    "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",32    "loadTransfer": "ts-node src/transfer.nload.ts",33    "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",34    "testEvent": "mocha --timeout 9999999 -r ts-node/register ./src/check-event/*.test.ts",35    "testNesting": "mocha --timeout 9999999 -r ts-node/register ./**/nest.test.ts",36    "testUnnesting": "mocha --timeout 9999999 -r ts-node/register ./**/unnest.test.ts",37    "testStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/**.test.ts",38    "testProperties": "mocha --timeout 9999999 -r ts-node/register ./**/properties.test.ts",39    "testMigrationStructure": "mocha --timeout 9999999 -r ts-node/register ./**/nesting/migration-check.test.ts",40    "testRmrk": "mocha --timeout 9999999 -r ts-node/register ./**/rmrk/**.test.ts",41    "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",42    "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",43    "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",44    "testSetCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionSponsor.test.ts",45    "testConfirmSponsorship": "mocha --timeout 9999999 -r ts-node/register ./**/confirmSponsorship.test.ts",46    "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts",47    "testRemoveCollectionSponsor": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionSponsor.test.ts",48    "testRemoveFromAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromAllowList.test.ts",49    "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",50    "testContracts": "mocha --timeout 9999999 -r ts-node/register ./**/contracts.test.ts",51    "testCreateItem": "mocha --timeout 9999999 -r ts-node/register ./**/createItem.test.ts",52    "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts",53    "testCreateMultipleItemsEx": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItemsEx.test.ts",54    "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts",55    "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts",56    "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",57    "testDestroyCollection": "mocha --timeout 9999999 -r ts-node/register ./**/destroyCollection.test.ts",58    "testToggleContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractAllowList.test.ts",59    "testAddToContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractAllowList.test.ts",60    "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts",61    "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts",62    "testSetMintPermission": "mocha --timeout 9999999 -r ts-node/register ./**/setMintPermission.test.ts",63    "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.test.ts",64    "testEnableContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/enableContractSponsoring.test.ts",65    "testRemoveFromContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/removeFromContractAllowList.test.ts",66    "testSetContractSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setContractSponsoringRateLimit.test.ts",67    "testSetOffchainSchema": "mocha --timeout 9999999 -r ts-node/register ./**/setOffchainSchema.test.ts",68    "testOverflow": "mocha --timeout 9999999 -r ts-node/register ./**/overflow.test.ts",69    "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts",70    "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts",71    "testScheduler": "mocha --timeout 9999999 -r ts-node/register ./**/scheduler.test.ts",72    "testSchedulingEVM": "mocha --timeout 9999999 -r ts-node/register ./**/eth/scheduling.test.ts",73    "testXcmTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/xcmTransfer.test.ts",74    "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts",75    "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts",76    "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts",77    "testLimits": "mocha --timeout 9999999 -r ts-node/register ./**/limits.test.ts",78    "testEthCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/eth/createCollection.test.ts",79    "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json",80    "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .",81    "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .",82    "polkadot-types": "echo \"export default {}\" > src/interfaces/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain"83  },84  "author": "",85  "license": "SEE LICENSE IN ../LICENSE",86  "homepage": "",87  "dependencies": {88    "@polkadot/api": "8.6.2",89    "@polkadot/api-contract": "8.6.2",90    "@polkadot/util-crypto": "9.4.1",91    "bignumber.js": "^9.0.2",92    "chai-as-promised": "^7.1.1",93    "find-process": "^1.4.7",94    "solc": "0.8.14-fixed",95    "web3": "^1.7.3"96  },97  "standard": {98    "globals": [99      "it",100      "assert",101      "beforeEach",102      "afterEach",103      "describe",104      "contract",105      "artifacts"106    ]107  },108  "resolutions": {109    "simple-get": "^4.0.1"110  }111}
addedtests/src/rmrk/rmrk.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/rmrk.test.ts
@@ -0,0 +1,64 @@
+import {expect} from 'chai';
+import privateKey from '../substrate/privateKey';
+import usingApi, {executeTransaction} from '../substrate/substrate-api';
+import {
+  getCreateCollectionResult,
+  getDetailedCollectionInfo,
+  getGenericResult,
+} from '../util/helpers';
+import {IKeyringPair} from '@polkadot/types/types';
+
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+
+describe('RMRK External Integration Test', () => {
+  before(async () => {
+    await usingApi(async () => {
+      alice = privateKey('//Alice');
+      bob = privateKey('//Bob');
+    });
+  });
+
+  it('Creates a new RMRK collection that is tagged as external', async () => {
+    await usingApi(async api => {
+      const tx = api.tx.rmrkCore.createCollection('no-limit-metadata', null, 'no-limit-symbol');
+      const events = await executeTransaction(api, alice, tx);
+      const result = getCreateCollectionResult(events);
+
+      const collection = (await getDetailedCollectionInfo(api, result.collectionId))!;
+      expect(collection.readOnly.toHuman()).to.be.true;
+    });
+  });
+
+  it('[Negative] Forbids NFT operations with an external collection', async () => {
+    await usingApi(async api => {
+      const tx1 = api.tx.rmrkCore.createCollection('metadata', null, 'symbol');
+      const events1 = await executeTransaction(api, alice, tx1);
+
+      const resultUnique1 = getCreateCollectionResult(events1);
+      const uniqueCollectionId = resultUnique1.collectionId;
+
+      const resultRmrk1 = getGenericResult(events1, 'rmrkCore', 'CollectionCreated', (data) => {
+        return parseInt(data[1].toString(), 10);
+      });
+      const rmrkCollectionId: number = resultRmrk1.data!;
+
+      const tx2 = api.tx.rmrkCore.mintNft(
+        alice.address,
+        rmrkCollectionId,
+        alice.address,
+        null,
+        'nft-metadata',
+        true,
+      );
+      const events2 = await executeTransaction(api, alice, tx2);
+      const result2 = getGenericResult(events2, 'rmrkCore', 'NftMinted', (data) => {
+        return parseInt(data[2].toString(), 10);
+      });
+      const rmrkNftId: number = result2.data!;
+
+      const tx3 = api.tx.unique.burnItem(uniqueCollectionId, rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, tx3)).to.be.rejectedWith(/common\.CollectionIsExternal/);
+    });
+  });
+});
\ No newline at end of file
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -18,6 +18,7 @@
 import '../interfaces/augment-api-query';
 import {ApiPromise, Keyring} from '@polkadot/api';
 import type {AccountId, EventRecord, Event} from '@polkadot/types/interfaces';
+import type {GenericEventData} from '@polkadot/types';
 import {AnyTuple, IEvent, IKeyringPair} from '@polkadot/types/types';
 import {evmToAddress} from '@polkadot/util-crypto';
 import BN from 'bn.js';
@@ -88,9 +89,10 @@
 const CENTIUNIQUE = 10n * MILLIUNIQUE;
 export const UNIQUE = 100n * CENTIUNIQUE;
 
-type GenericResult = {
-  success: boolean,
-};
+interface GenericResult<T> {
+  success: boolean;
+  data: T | null;
+}
 
 interface CreateCollectionResult {
   success: boolean;
@@ -170,20 +172,27 @@
   return event.event as T;
 }
 
-export function getGenericResult(events: EventRecord[]): GenericResult {
-  const result: GenericResult = {
-    success: false,
-  };
-  events.forEach(({event: {method}}) => {
-    // console.log(`    ${phase}: ${section}.${method}:: ${data}`);
+export function getGenericResult<T>(
+  events: EventRecord[],
+  expectSection?: string,
+  expectMethod?: string,
+  extractAction?: (data: GenericEventData) => T,
+): GenericResult<T> {
+  let success = false;
+  let successData = null;
+  events.forEach(({event: {data, method, section}}) => {
     if (method === 'ExtrinsicSuccess') {
-      result.success = true;
+      success = true;
+    } else if ((expectSection == section) && (expectMethod == method)) {
+      successData = extractAction!(data);
     }
   });
+  const result: GenericResult<T> = {
+    success,
+    data: successData,
+  };
   return result;
 }
-
-
 
 export function getCreateCollectionResult(events: EventRecord[]): CreateCollectionResult {
   let success = false;