difftreelog
createMultipleItems test
in: master
3 files changed
tests/package-lock.jsondiffbeforeafterboth4824 "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",4824 "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==",4825 "dev": true4825 "dev": true4826 },4826 },4827 "@types/sprintf-js": {4828 "version": "1.1.2",4829 "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz",4830 "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA=="4831 },4827 "@types/stack-utils": {4832 "@types/stack-utils": {4828 "version": "1.0.1",4833 "version": "1.0.1",4829 "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",4834 "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",5867 "dev": true,5872 "dev": true,5868 "requires": {5873 "requires": {5869 "sprintf-js": "~1.0.2"5874 "sprintf-js": "~1.0.2"5870 }5875 },5876 "dependencies": {5877 "sprintf-js": {5878 "version": "1.0.3",5879 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",5880 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",5881 "dev": true5882 }5883 }5871 },5884 },5872 "arr-diff": {5885 "arr-diff": {5873 "version": "4.0.0",5886 "version": "4.0.0",20684 }20697 }20685 },20698 },20686 "sprintf-js": {20699 "sprintf-js": {20687 "version": "1.0.3",20700 "version": "1.1.2",20688 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",20701 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",20689 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",20702 "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="20690 "dev": true20691 },20703 },20692 "sshpk": {20704 "sshpk": {20693 "version": "1.16.1",20705 "version": "1.16.1",tests/package.jsondiffbeforeafterboth--- a/tests/package.json
+++ b/tests/package.json
@@ -21,7 +21,8 @@
"testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",
"testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",
"testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",
- "testCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts"
+ "testCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",
+ "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts"
},
"author": "",
"license": "Apache 2.0",
tests/src/createMultipleItems.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -3,18 +3,53 @@
// file 'LICENSE', which is part of this source code package.
//
import { ApiPromise } from '@polkadot/api';
-import { assert } from 'chai';
-import { alicesPublicKey } from './accounts';
+import BN from 'bn.js';
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
import privateKey from './substrate/privateKey';
-import usingApi from './substrate/substrate-api';
-import waitNewBlocks from './substrate/wait-new-blocks';
+import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers';
-const idCollection = 12;
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+interface ITokenDataType {
+ Owner: number[];
+ ConstData: number[];
+ VariableData: number[];
+}
describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {
await usingApi(async (api: ApiPromise) => {
+ const collectionId = await createCollectionExpectSuccess();
+ const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
+ expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
+ const Alice = privateKey('//Alice');
+ const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId, Alice.address, args);
+ await submitTransactionAsync(Alice, createMultipleItemsTx);
+ const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
+ expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
+ const token1Data = await api.query.nft.nftItemList(collectionId, 1) as unknown as ITokenDataType;
+ const token2Data = await api.query.nft.nftItemList(collectionId, 2) as unknown as ITokenDataType;
+ const token3Data = await api.query.nft.nftItemList(collectionId, 3) as unknown as ITokenDataType;
+
+ expect(token1Data.Owner.toString()).to.be.equal(Alice.address);
+ expect(token2Data.Owner.toString()).to.be.equal(Alice.address);
+ expect(token3Data.Owner.toString()).to.be.equal(Alice.address);
+
+ expect(token1Data.ConstData.toString()).to.be.equal('0x31');
+ expect(token2Data.ConstData.toString()).to.be.equal('0x32');
+ expect(token3Data.ConstData.toString()).to.be.equal('0x33');
+ expect(token1Data.VariableData.toString()).to.be.equal('0x31');
+ expect(token2Data.VariableData.toString()).to.be.equal('0x32');
+ expect(token3Data.VariableData.toString()).to.be.equal('0x33');
+
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
});
@@ -22,94 +57,90 @@
describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
it('Create token with not existing type', async () => {
await usingApi(async (api: ApiPromise) => {
-
+ const collectionId = await createCollectionExpectSuccess();
+ const Alice = privateKey('//Alice');
+ try {
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId, Alice.address, ['UNKNOWN', 'UNKNOWN', 'UNKNOWN']);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ } catch (e) {
+ // tslint:disable-next-line:no-unused-expression
+ expect(e).to.be.exist;
+ }
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
it('Create token in not existing collection', async () => {
await usingApi(async (api: ApiPromise) => {
-
+ const collectionId = await createCollectionExpectSuccess();
+ const Alice = privateKey('//Alice');
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId + 1, Alice.address, ['NFT', 'NFT', 'NFT']);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
- it('Create token that has reached the maximum data limit', async () => {
+ it('Create NFT and Re-fungible tokens that has reached the maximum data limit', async () => {
await usingApi(async (api: ApiPromise) => {
+ // NFT
+ const collectionId = await createCollectionExpectSuccess();
+ const Alice = privateKey('//Alice');
+ const args = [
+ { nft: ['A'.repeat(2049), 'A'.repeat(2049)] },
+ { nft: ['B'.repeat(2049), 'B'.repeat(2049)] },
+ { nft: ['C'.repeat(2049), 'C'.repeat(2049)] },
+ ];
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId, Alice.address, args);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
+ // Fungible
+ const collectionIdFungible = await createCollectionExpectSuccess();
+ const argsFungible = [
+ { fungible: parseInt('1'.repeat(2049), 10) },
+ { fungible: parseInt('2'.repeat(2049), 10) },
+ { fungible: parseInt('3'.repeat(2049), 10) },
+ ];
+ const createMultipleItemsTxFungible = await api.tx.nft
+ .createMultipleItems(collectionIdFungible, Alice.address, argsFungible);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTxFungible)).to.be.rejected;
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
it('Create tokens with different types', async () => {
await usingApi(async (api: ApiPromise) => {
-
+ const collectionId = await createCollectionExpectSuccess();
+ const Alice = privateKey('//Alice');
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId, Alice.address, ['NFT', 'Fungible', 'ReFungible']);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
-
- it('Create tokens in not existing collection', async () => {
- await usingApi(async (api: ApiPromise) => {
- });
- });
-
it('Create tokens with different data limits <> maximum data limit', async () => {
await usingApi(async (api: ApiPromise) => {
-
- });
- });
-});
-
-describe.skip('integration test: ext. createMultipleItems():', () => {
- it('Create two NFT tokens in active NFT collection', async () => {
- await usingApi(async (api) => {
- const AitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (before): ${AitemListIndex}`);
- const args = ['NFT', 'NFT'];
- const alicePrivateKey = privateKey('//Alice');
- const createMultipleItems = await api.tx.nft
- .createMultipleItems(idCollection, alicesPublicKey, args)
- .signAndSend(alicePrivateKey);
- // tslint:disable-next-line: no-unused-expression
- assert.exists(createMultipleItems, 'createMultipleItems is neither `null` or `undefined`');
- console.log(`Ext. createMultipleItems submitted with hash: ${createMultipleItems}`);
- await waitNewBlocks(api);
- const BitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (after): ${BitemListIndex}`);
- if (BitemListIndex === AitemListIndex) { assert.fail('Corret token not added in collection!'); }
- });
- });
- it('(!negative test!) Create two Fungible tokens in active NFT collection', async () => {
- await usingApi(async (api) => {
- const AitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (before): ${AitemListIndex}`);
- const args = ['Fungible', 'Fungible'];
- const alicePrivateKey = privateKey('//Alice');
- const createMultipleItems = await api.tx.nft
- .createMultipleItems(idCollection, alicesPublicKey, args)
- .signAndSend(alicePrivateKey);
- // tslint:disable-next-line: no-unused-expression
- assert.exists(createMultipleItems, 'createMultipleItems is neither `null` or `undefined`');
- console.log(`Ext. createMultipleItems submitted with hash: ${createMultipleItems}`);
- await waitNewBlocks(api);
- const BitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (after): ${BitemListIndex}`);
- if (BitemListIndex > AitemListIndex) { assert.fail('Incorrect token added in collection!'); }
- });
- });
- it('(!negative test!) Create two ReFungible tokens in active NFT collection', async () => {
- await usingApi(async (api) => {
- const AitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (before): ${AitemListIndex}`);
- const args = ['ReFungible', 'ReFungible'];
- const alicePrivateKey = privateKey('//Alice');
- const createMultipleItems = await api.tx.nft
- .createMultipleItems(idCollection, alicesPublicKey, args)
- .signAndSend(alicePrivateKey);
- // tslint:disable-next-line: no-unused-expression
- assert.exists(createMultipleItems, 'createMultipleItems is neither `null` or `undefined`');
- console.log(`Ext. createMultipleItems submitted with hash: ${createMultipleItems}`);
- await waitNewBlocks(api);
- const BitemListIndex = await api.query.nft.itemListIndex(idCollection);
- console.log(`itemListIndex count (after): ${BitemListIndex}`);
- if (BitemListIndex > AitemListIndex) { assert.fail('Incorrect token added in collection!'); }
+ const collectionId = await createCollectionExpectSuccess();
+ const Alice = privateKey('//Alice');
+ const args = [
+ { nft: ['A', 'A'] },
+ { nft: ['B', 'B'.repeat(2049)] },
+ { nft: ['C'.repeat(2049), 'C'] },
+ ];
+ const createMultipleItemsTx = await api.tx.nft
+ .createMultipleItems(collectionId, Alice.address, args);
+ await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
+ // garbage collection :-D
+ await destroyCollectionExpectSuccess(collectionId);
});
});
});