difftreelog
test fix eslint warnings
in: master
4 files changed
tests/src/createItem.test.tsdiffbeforeafterboth--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-import {default as usingApi, executeTransaction} from './substrate/substrate-api';
+import {default as usingApi} from './substrate/substrate-api';
import chai from 'chai';
import {Keyring} from '@polkadot/api';
import {IKeyringPair} from '@polkadot/types/types';
@@ -125,7 +125,7 @@
});
it('No editing rights', async () => {
- await usingApi(async api => {
+ await usingApi(async () => {
const createMode = 'NFT';
const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode},
propPerm: [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: false}}]});
@@ -136,14 +136,14 @@
});
it('User doesnt have editing rights', async () => {
- await usingApi(async api => {
+ await usingApi(async () => {
const newCollectionID = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
await createItemWithPropsExpectFailure(bob, newCollectionID, 'NFT', [{key: 'key1', value: 'v'}]);
});
});
it('Adding property without access rights', async () => {
- await usingApi(async api => {
+ await usingApi(async () => {
const newCollectionID = await createCollectionWithPropsExpectSuccess();
await addCollectionAdminExpectSuccess(alice, newCollectionID, bob.address);
@@ -152,7 +152,7 @@
});
it('Adding more than 64 prps', async () => {
- await usingApi(async api => {
+ await usingApi(async () => {
const prps = [];
for (let i = 0; i < 65; i++) {
@@ -166,7 +166,7 @@
});
it('Trying to add bigger property than allowed', async () => {
- await usingApi(async api => {
+ await usingApi(async () => {
const newCollectionID = await createCollectionWithPropsExpectSuccess();
createItemWithPropsExpectFailure(alice, newCollectionID, 'NFT', [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]);
tests/src/createMultipleItems.test.tsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {ApiPromise} from '@polkadot/api';18import {IKeyringPair} from '@polkadot/types/types';19import chai from 'chai';20import chaiAsPromised from 'chai-as-promised';21import privateKey from './substrate/privateKey';22import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync, executeTransaction} from './substrate/substrate-api';23import {24 createCollectionExpectSuccess,25 destroyCollectionExpectSuccess,26 getGenericResult,27 normalizeAccountId,28 setCollectionLimitsExpectSuccess,29 addCollectionAdminExpectSuccess,30 getBalance,31 getTokenOwner,32 getLastTokenId,33 getCreatedCollectionCount,34 createCollectionWithPropsExpectSuccess,35 createMultipleItemsWithPropsExpectSuccess,36 getTokenProperties,37} from './util/helpers';3839chai.use(chaiAsPromised);40const expect = chai.expect;4142describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {43 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {44 await usingApi(async (api: ApiPromise) => {45 const collectionId = await createCollectionExpectSuccess();46 const itemsListIndexBefore = await getLastTokenId(api, collectionId);47 expect(itemsListIndexBefore).to.be.equal(0);4849 const alice = privateKey('//Alice');50 await submitTransactionAsync(51 alice, 52 api.tx.unique.setPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}])53 );54 55 const args = [56 {NFT: {properties: [{key: 'data', value: '1'}]}},57 {NFT: {properties: [{key: 'data', value: '2'}]}},58 {NFT: {properties: [{key: 'data', value: '3'}]}}59 ];60 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);61 await submitTransactionAsync(alice, createMultipleItemsTx);62 const itemsListIndexAfter = await getLastTokenId(api, collectionId);63 expect(itemsListIndexAfter).to.be.equal(3);6465 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));66 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));67 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));6869 expect((await getTokenProperties(api, collectionId, 1, ['data']))[0].value).to.be.equal('1');70 expect((await getTokenProperties(api, collectionId, 2, ['data']))[0].value).to.be.equal('2');71 expect((await getTokenProperties(api, collectionId, 3, ['data']))[0].value).to.be.equal('3');72 });73 });7475 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {76 await usingApi(async (api: ApiPromise) => {77 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});78 const itemsListIndexBefore = await getLastTokenId(api, collectionId);79 expect(itemsListIndexBefore).to.be.equal(0);80 const alice = privateKey('//Alice');81 const args = [82 {Fungible: {value: 1}},83 {Fungible: {value: 2}},84 {Fungible: {value: 3}},85 ];86 const createMultipleItemsTx = api.tx.unique87 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);88 await submitTransactionAsync(alice, createMultipleItemsTx);89 const token1Data = await getBalance(api, collectionId, alice.address, 0);9091 expect(token1Data).to.be.equal(6n); // 1 + 2 + 392 });93 });9495 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {96 await usingApi(async (api: ApiPromise) => {97 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});98 const itemsListIndexBefore = await getLastTokenId(api, collectionId);99 expect(itemsListIndexBefore).to.be.equal(0);100 const alice = privateKey('//Alice');101 const args = [102 {ReFungible: {pieces: 1}},103 {ReFungible: {pieces: 2}},104 {ReFungible: {pieces: 3}},105 ];106 const createMultipleItemsTx = api.tx.unique107 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);108 await submitTransactionAsync(alice, createMultipleItemsTx);109 const itemsListIndexAfter = await getLastTokenId(api, collectionId);110 expect(itemsListIndexAfter).to.be.equal(3);111112 expect(await getBalance(api, collectionId, alice.address, 1)).to.be.equal(1n);113 expect(await getBalance(api, collectionId, alice.address, 2)).to.be.equal(2n);114 expect(await getBalance(api, collectionId, alice.address, 3)).to.be.equal(3n);115 });116 });117118 it('Can mint amount of items equals to collection limits', async () => {119 await usingApi(async (api) => {120 const alice = privateKey('//Alice');121122 const collectionId = await createCollectionExpectSuccess();123 await setCollectionLimitsExpectSuccess(alice, collectionId, {124 tokenLimit: 2,125 });126 const args = [127 {NFT: {}},128 {NFT: {}},129 ];130 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);131 const events = await submitTransactionAsync(alice, createMultipleItemsTx);132 const result = getGenericResult(events);133 expect(result.success).to.be.true;134 });135 });136137 it('Create 0x31, 0x32, 0x33 items in active NFT with property Admin', async () => {138 await usingApi(async (api: ApiPromise) => {139 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});140 const itemsListIndexBefore = await getLastTokenId(api, collectionId);141 expect(itemsListIndexBefore).to.be.equal(0);142 const alice = privateKey('//Alice');143 const args = [144 {NFT: {properties: [{key: 'k', value: 'v1'}]}},145 {NFT: {properties: [{key: 'k', value: 'v2'}]}},146 {NFT: {properties: [{key: 'k', value: 'v3'}]}}147 ];148149 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);150 const itemsListIndexAfter = await getLastTokenId(api, collectionId);151 expect(itemsListIndexAfter).to.be.equal(3);152153 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));154 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));155 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));156157 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');158 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');159 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');160 });161 });162163 it('Create 0x31, 0x32, 0x33 items in active NFT with property AdminConst', async () => {164 await usingApi(async (api: ApiPromise) => {165 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});166 const itemsListIndexBefore = await getLastTokenId(api, collectionId);167 expect(itemsListIndexBefore).to.be.equal(0);168 const alice = privateKey('//Alice');169 const bob = privateKey('//Bob');170 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);171 const args = [172 {NFT: {properties: [{key: 'k', value: 'v1'}]}},173 {NFT: {properties: [{key: 'k', value: 'v2'}]}},174 {NFT: {properties: [{key: 'k', value: 'v3'}]}}175 ];176177 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);178 const itemsListIndexAfter = await getLastTokenId(api, collectionId);179 expect(itemsListIndexAfter).to.be.equal(3);180181 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));182 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));183 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));184185 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');186 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');187 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');188 });189 });190191 it('Create 0x31, 0x32, 0x33 items in active NFT with property itemOwnerOrAdmin', async () => {192 await usingApi(async (api: ApiPromise) => {193 const collectionId = await createCollectionWithPropsExpectSuccess(194 {propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]}195 );196 const itemsListIndexBefore = await getLastTokenId(api, collectionId);197 expect(itemsListIndexBefore).to.be.equal(0);198 const alice = privateKey('//Alice');199 const args = [200 {NFT: {properties: [{key: 'k', value: 'v1'}]}},201 {NFT: {properties: [{key: 'k', value: 'v2'}]}},202 {NFT: {properties: [{key: 'k', value: 'v3'}]}}203 ];204205 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);206 const itemsListIndexAfter = await getLastTokenId(api, collectionId);207 expect(itemsListIndexAfter).to.be.equal(3);208209 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));210 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));211 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));212213 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');214 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');215 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');216 });217 });218});219220describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {221 let alice: IKeyringPair;222 let bob: IKeyringPair;223224 before(async () => {225 await usingApi(async () => {226 alice = privateKey('//Alice');227 bob = privateKey('//Bob');228 });229 });230231 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {232 await usingApi(async (api: ApiPromise) => {233 const collectionId = await createCollectionWithPropsExpectSuccess(234 {propPerm: [{key: 'data', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]}235 );236 const itemsListIndexBefore = await getLastTokenId(api, collectionId);237 expect(itemsListIndexBefore).to.be.equal(0);238 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);239 const args = [240 {NFT: {properties: [{key: 'data', value: 'v1'}]}},241 {NFT: {properties: [{key: 'data', value: 'v2'}]}},242 {NFT: {properties: [{key: 'data', value: 'v3'}]}}243 ];244 const createMultipleItemsTx = api.tx.unique245 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);246 await submitTransactionAsync(bob, createMultipleItemsTx);247 const itemsListIndexAfter = await getLastTokenId(api, collectionId);248 expect(itemsListIndexAfter).to.be.equal(3);249250 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(bob.address));251 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(bob.address));252 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(bob.address));253254 expect((await getTokenProperties(api, collectionId, 1, ['data']))[0].value).to.be.equal('v1');255 expect((await getTokenProperties(api, collectionId, 2, ['data']))[0].value).to.be.equal('v2');256 expect((await getTokenProperties(api, collectionId, 3, ['data']))[0].value).to.be.equal('v3');257 });258 });259260 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {261 await usingApi(async (api: ApiPromise) => {262 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});263 const itemsListIndexBefore = await getLastTokenId(api, collectionId);264 expect(itemsListIndexBefore).to.be.equal(0);265 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);266 const args = [267 {Fungible: {value: 1}},268 {Fungible: {value: 2}},269 {Fungible: {value: 3}},270 ];271 const createMultipleItemsTx = api.tx.unique272 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);273 await submitTransactionAsync(bob, createMultipleItemsTx);274 const token1Data = await getBalance(api, collectionId, bob.address, 0);275276 expect(token1Data).to.be.equal(6n); // 1 + 2 + 3277 });278 });279280 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {281 await usingApi(async (api: ApiPromise) => {282 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});283 const itemsListIndexBefore = await getLastTokenId(api, collectionId);284 expect(itemsListIndexBefore).to.be.equal(0);285 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);286 const args = [287 {ReFungible: {pieces: 1}},288 {ReFungible: {pieces: 2}},289 {ReFungible: {pieces: 3}},290 ];291 const createMultipleItemsTx = api.tx.unique292 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);293 await submitTransactionAsync(bob, createMultipleItemsTx);294 const itemsListIndexAfter = await getLastTokenId(api, collectionId);295 expect(itemsListIndexAfter).to.be.equal(3);296297 expect(await getBalance(api, collectionId, bob.address, 1)).to.be.equal(1n);298 expect(await getBalance(api, collectionId, bob.address, 2)).to.be.equal(2n);299 expect(await getBalance(api, collectionId, bob.address, 3)).to.be.equal(3n);300 });301 });302});303304describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {305 let alice: IKeyringPair;306 let bob: IKeyringPair;307308 before(async () => {309 await usingApi(async () => {310 alice = privateKey('//Alice');311 bob = privateKey('//Bob');312 });313 });314315 it('Regular user cannot create items in active NFT collection', async () => {316 await usingApi(async (api: ApiPromise) => {317 const collectionId = await createCollectionExpectSuccess();318 const itemsListIndexBefore = await getLastTokenId(api, collectionId);319 expect(itemsListIndexBefore).to.be.equal(0);320 const args = [{NFT: {}},321 {NFT: {}},322 {NFT: {}}];323 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);324 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);325 });326 });327328 it('Regular user cannot create items in active Fungible collection', async () => {329 await usingApi(async (api: ApiPromise) => {330 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});331 const itemsListIndexBefore = await getLastTokenId(api, collectionId);332 expect(itemsListIndexBefore).to.be.equal(0);333 const args = [334 {Fungible: {value: 1}},335 {Fungible: {value: 2}},336 {Fungible: {value: 3}},337 ];338 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);339 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);340 });341 });342343 it('Regular user cannot create items in active ReFungible collection', async () => {344 await usingApi(async (api: ApiPromise) => {345 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});346 const itemsListIndexBefore = await getLastTokenId(api, collectionId);347 expect(itemsListIndexBefore).to.be.equal(0);348 const args = [349 {ReFungible: {pieces: 1}},350 {ReFungible: {pieces: 1}},351 {ReFungible: {pieces: 1}},352 ];353 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);354 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);355 });356 });357358 it('Create token in not existing collection', async () => {359 await usingApi(async (api: ApiPromise) => {360 const collectionId = await getCreatedCollectionCount(api) + 1;361 const createMultipleItemsTx = api.tx.unique.createMultipleItems(362 collectionId, normalizeAccountId(alice.address), ['NFT', 'NFT', 'NFT']363 );364 await expect(executeTransaction(api, alice, createMultipleItemsTx)).to.be.rejectedWith(/common\.CollectionNotFound/);365 });366 });367368 it('Create NFT and Re-fungible tokens that has reached the maximum data limit', async () => {369 await usingApi(async (api: ApiPromise) => {370 // NFT371 const collectionId = await createCollectionWithPropsExpectSuccess({372 propPerm: [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]373 });374 const alice = privateKey('//Alice');375 const args = [376 {NFT: {properties: [{key: 'key', value: 'A'.repeat(32769)}]}},377 {NFT: {properties: [{key: 'key', value: 'B'.repeat(32769)}]}},378 {NFT: {properties: [{key: 'key', value: 'C'.repeat(32769)}]}},379 ];380 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);381 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;382383 // ReFungible384 const collectionIdReFungible =385 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});386 const argsReFungible = [387 {ReFungible: ['1'.repeat(2049), 10]},388 {ReFungible: ['2'.repeat(2049), 10]},389 {ReFungible: ['3'.repeat(2049), 10]},390 ];391 const createMultipleItemsTxFungible = api.tx.unique392 .createMultipleItems(collectionIdReFungible, normalizeAccountId(alice.address), argsReFungible);393 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTxFungible)).to.be.rejected;394 });395 });396397 it('Create tokens with different types', async () => {398 await usingApi(async (api: ApiPromise) => {399 const collectionId = await createCollectionExpectSuccess();400 const createMultipleItemsTx = api.tx.unique401 .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'Fungible', 'ReFungible']);402 await expect(403 executeTransaction(api, alice, createMultipleItemsTx)404 ).to.be.rejectedWith(405 /nonfungible\.NotNonfungibleDataUsedToMintFungibleCollectionToken/406 );407 // garbage collection :-D // lol408 await destroyCollectionExpectSuccess(collectionId);409 });410 });411412 it('Create tokens with different data limits <> maximum data limit', async () => {413 await usingApi(async (api: ApiPromise) => {414 const collectionId = await createCollectionWithPropsExpectSuccess({415 propPerm: [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]416 });417 const args = [418 {NFT: {properties: [{key: 'key', value: 'A'}]}},419 {NFT: {properties: [{key: 'key', value: 'B'.repeat(32769)}]}},420 ];421 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);422 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;423 });424 });425426 it('Fails when minting tokens exceeds collectionLimits amount', async () => {427 await usingApi(async (api) => {428 const collectionId = await createCollectionExpectSuccess();429 await setCollectionLimitsExpectSuccess(alice, collectionId, {430 tokenLimit: 1,431 });432 const args = [433 {NFT: {}},434 {NFT: {}},435 ];436 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);437 await expect(executeTransaction(api, alice, createMultipleItemsTx)).to.be.rejectedWith(/common\.CollectionTokenLimitExceeded/);438 });439 });440441 it('User doesnt have editing rights', async () => {442 await usingApi(async (api: ApiPromise) => {443 const collectionId = await createCollectionWithPropsExpectSuccess({444 propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]445 });446 const itemsListIndexBefore = await getLastTokenId(api, collectionId);447 expect(itemsListIndexBefore).to.be.equal(0);448 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);449 const args = [450 {NFT: {properties: [{key: 'key1', value: 'v2'}]}},451 {NFT: {}},452 {NFT: {}}453 ];454455 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(bob.address), args);456 await expect(executeTransaction(api, bob, tx)).to.be.rejectedWith(/common\.NoPermission/);457 });458 });459460 it('Adding property without access rights', async () => {461 await usingApi(async (api: ApiPromise) => {462 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'k', value: 'v1'}]});463 const itemsListIndexBefore = await getLastTokenId(api, collectionId);464 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);465 expect(itemsListIndexBefore).to.be.equal(0);466 const args = [{NFT: {properties: [{key: 'k', value: 'v'}]}},467 {NFT: {}},468 {NFT: {}}];469470 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(bob.address), args);471 await expect(executeTransaction(api, bob, tx)).to.be.rejectedWith(/common\.NoPermission/);472 });473 });474475 it('Adding more than 64 prps', async () => {476 await usingApi(async (api: ApiPromise) => {477 const propPerms = [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}];478 for (let i = 0; i < 65; i++) {479 propPerms.push({key: `key${i}`, permission: {mutable: true, collectionAdmin: true, tokenOwner: true}});480 }481482 const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});483484 const tx1 = api.tx.unique.setPropertyPermissions(collectionId, propPerms);485 await expect(executeTransaction(api, alice, tx1)).to.be.rejectedWith(/common\.PropertyLimitReached/);486487 const itemsListIndexBefore = await getLastTokenId(api, collectionId);488 expect(itemsListIndexBefore).to.be.equal(0);489 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);490491 const prps = [];492493 for (let i = 0; i < 65; i++) {494 prps.push({key: `key${i}`, value: `value${i}`});495 }496497 const args = [498 {NFT: {properties: prps}},499 {NFT: {properties: prps}},500 {NFT: {properties: prps}}501 ];502503 // there are no permissions, but will fail anyway because of too much weight for a block504 const tx2 = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);;505 await expect(submitTransactionExpectFailAsync(alice, tx2)).to.be.rejected;506 });507 });508509 it('Trying to add bigger property than allowed', async () => {510 await usingApi(async (api: ApiPromise) => {511 const collectionId = await createCollectionWithPropsExpectSuccess({512 propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]513 });514 const itemsListIndexBefore = await getLastTokenId(api, collectionId);515 expect(itemsListIndexBefore).to.be.equal(0);516 const args = [{NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},517 {NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},518 {NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}}];519520 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);521 await expect(executeTransaction(api, alice, tx)).to.be.rejectedWith(/common\.NoPermission/);522 });523 });524});1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {ApiPromise} from '@polkadot/api';18import {IKeyringPair} from '@polkadot/types/types';19import chai from 'chai';20import chaiAsPromised from 'chai-as-promised';21import privateKey from './substrate/privateKey';22import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync, executeTransaction} from './substrate/substrate-api';23import {24 createCollectionExpectSuccess,25 destroyCollectionExpectSuccess,26 getGenericResult,27 normalizeAccountId,28 setCollectionLimitsExpectSuccess,29 addCollectionAdminExpectSuccess,30 getBalance,31 getTokenOwner,32 getLastTokenId,33 getCreatedCollectionCount,34 createCollectionWithPropsExpectSuccess,35 createMultipleItemsWithPropsExpectSuccess,36 getTokenProperties,37} from './util/helpers';3839chai.use(chaiAsPromised);40const expect = chai.expect;4142describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {43 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {44 await usingApi(async (api: ApiPromise) => {45 const collectionId = await createCollectionExpectSuccess();46 const itemsListIndexBefore = await getLastTokenId(api, collectionId);47 expect(itemsListIndexBefore).to.be.equal(0);4849 const alice = privateKey('//Alice');50 await submitTransactionAsync(51 alice, 52 api.tx.unique.setPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}]),53 );54 55 const args = [56 {NFT: {properties: [{key: 'data', value: '1'}]}},57 {NFT: {properties: [{key: 'data', value: '2'}]}},58 {NFT: {properties: [{key: 'data', value: '3'}]}},59 ];60 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);61 await submitTransactionAsync(alice, createMultipleItemsTx);62 const itemsListIndexAfter = await getLastTokenId(api, collectionId);63 expect(itemsListIndexAfter).to.be.equal(3);6465 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));66 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));67 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));6869 expect((await getTokenProperties(api, collectionId, 1, ['data']))[0].value).to.be.equal('1');70 expect((await getTokenProperties(api, collectionId, 2, ['data']))[0].value).to.be.equal('2');71 expect((await getTokenProperties(api, collectionId, 3, ['data']))[0].value).to.be.equal('3');72 });73 });7475 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {76 await usingApi(async (api: ApiPromise) => {77 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});78 const itemsListIndexBefore = await getLastTokenId(api, collectionId);79 expect(itemsListIndexBefore).to.be.equal(0);80 const alice = privateKey('//Alice');81 const args = [82 {Fungible: {value: 1}},83 {Fungible: {value: 2}},84 {Fungible: {value: 3}},85 ];86 const createMultipleItemsTx = api.tx.unique87 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);88 await submitTransactionAsync(alice, createMultipleItemsTx);89 const token1Data = await getBalance(api, collectionId, alice.address, 0);9091 expect(token1Data).to.be.equal(6n); // 1 + 2 + 392 });93 });9495 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {96 await usingApi(async (api: ApiPromise) => {97 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});98 const itemsListIndexBefore = await getLastTokenId(api, collectionId);99 expect(itemsListIndexBefore).to.be.equal(0);100 const alice = privateKey('//Alice');101 const args = [102 {ReFungible: {pieces: 1}},103 {ReFungible: {pieces: 2}},104 {ReFungible: {pieces: 3}},105 ];106 const createMultipleItemsTx = api.tx.unique107 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);108 await submitTransactionAsync(alice, createMultipleItemsTx);109 const itemsListIndexAfter = await getLastTokenId(api, collectionId);110 expect(itemsListIndexAfter).to.be.equal(3);111112 expect(await getBalance(api, collectionId, alice.address, 1)).to.be.equal(1n);113 expect(await getBalance(api, collectionId, alice.address, 2)).to.be.equal(2n);114 expect(await getBalance(api, collectionId, alice.address, 3)).to.be.equal(3n);115 });116 });117118 it('Can mint amount of items equals to collection limits', async () => {119 await usingApi(async (api) => {120 const alice = privateKey('//Alice');121122 const collectionId = await createCollectionExpectSuccess();123 await setCollectionLimitsExpectSuccess(alice, collectionId, {124 tokenLimit: 2,125 });126 const args = [127 {NFT: {}},128 {NFT: {}},129 ];130 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);131 const events = await submitTransactionAsync(alice, createMultipleItemsTx);132 const result = getGenericResult(events);133 expect(result.success).to.be.true;134 });135 });136137 it('Create 0x31, 0x32, 0x33 items in active NFT with property Admin', async () => {138 await usingApi(async (api: ApiPromise) => {139 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});140 const itemsListIndexBefore = await getLastTokenId(api, collectionId);141 expect(itemsListIndexBefore).to.be.equal(0);142 const alice = privateKey('//Alice');143 const args = [144 {NFT: {properties: [{key: 'k', value: 'v1'}]}},145 {NFT: {properties: [{key: 'k', value: 'v2'}]}},146 {NFT: {properties: [{key: 'k', value: 'v3'}]}},147 ];148149 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);150 const itemsListIndexAfter = await getLastTokenId(api, collectionId);151 expect(itemsListIndexAfter).to.be.equal(3);152153 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));154 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));155 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));156157 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');158 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');159 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');160 });161 });162163 it('Create 0x31, 0x32, 0x33 items in active NFT with property AdminConst', async () => {164 await usingApi(async (api: ApiPromise) => {165 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});166 const itemsListIndexBefore = await getLastTokenId(api, collectionId);167 expect(itemsListIndexBefore).to.be.equal(0);168 const alice = privateKey('//Alice');169 const bob = privateKey('//Bob');170 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);171 const args = [172 {NFT: {properties: [{key: 'k', value: 'v1'}]}},173 {NFT: {properties: [{key: 'k', value: 'v2'}]}},174 {NFT: {properties: [{key: 'k', value: 'v3'}]}},175 ];176177 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);178 const itemsListIndexAfter = await getLastTokenId(api, collectionId);179 expect(itemsListIndexAfter).to.be.equal(3);180181 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));182 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));183 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));184185 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');186 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');187 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');188 });189 });190191 it('Create 0x31, 0x32, 0x33 items in active NFT with property itemOwnerOrAdmin', async () => {192 await usingApi(async (api: ApiPromise) => {193 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});194 const itemsListIndexBefore = await getLastTokenId(api, collectionId);195 expect(itemsListIndexBefore).to.be.equal(0);196 const alice = privateKey('//Alice');197 const args = [198 {NFT: {properties: [{key: 'k', value: 'v1'}]}},199 {NFT: {properties: [{key: 'k', value: 'v2'}]}},200 {NFT: {properties: [{key: 'k', value: 'v3'}]}},201 ];202203 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);204 const itemsListIndexAfter = await getLastTokenId(api, collectionId);205 expect(itemsListIndexAfter).to.be.equal(3);206207 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));208 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));209 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));210211 expect((await getTokenProperties(api, collectionId, 1, ['k']))[0].value).to.be.equal('v1');212 expect((await getTokenProperties(api, collectionId, 2, ['k']))[0].value).to.be.equal('v2');213 expect((await getTokenProperties(api, collectionId, 3, ['k']))[0].value).to.be.equal('v3');214 });215 });216});217218describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {219 let alice: IKeyringPair;220 let bob: IKeyringPair;221222 before(async () => {223 await usingApi(async () => {224 alice = privateKey('//Alice');225 bob = privateKey('//Bob');226 });227 });228229 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {230 await usingApi(async (api: ApiPromise) => {231 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'data', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});232 const itemsListIndexBefore = await getLastTokenId(api, collectionId);233 expect(itemsListIndexBefore).to.be.equal(0);234 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);235 const args = [236 {NFT: {properties: [{key: 'data', value: 'v1'}]}},237 {NFT: {properties: [{key: 'data', value: 'v2'}]}},238 {NFT: {properties: [{key: 'data', value: 'v3'}]}},239 ];240 const createMultipleItemsTx = api.tx.unique241 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);242 await submitTransactionAsync(bob, createMultipleItemsTx);243 const itemsListIndexAfter = await getLastTokenId(api, collectionId);244 expect(itemsListIndexAfter).to.be.equal(3);245246 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(bob.address));247 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(bob.address));248 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(bob.address));249250 expect((await getTokenProperties(api, collectionId, 1, ['data']))[0].value).to.be.equal('v1');251 expect((await getTokenProperties(api, collectionId, 2, ['data']))[0].value).to.be.equal('v2');252 expect((await getTokenProperties(api, collectionId, 3, ['data']))[0].value).to.be.equal('v3');253 });254 });255256 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {257 await usingApi(async (api: ApiPromise) => {258 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});259 const itemsListIndexBefore = await getLastTokenId(api, collectionId);260 expect(itemsListIndexBefore).to.be.equal(0);261 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);262 const args = [263 {Fungible: {value: 1}},264 {Fungible: {value: 2}},265 {Fungible: {value: 3}},266 ];267 const createMultipleItemsTx = api.tx.unique268 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);269 await submitTransactionAsync(bob, createMultipleItemsTx);270 const token1Data = await getBalance(api, collectionId, bob.address, 0);271272 expect(token1Data).to.be.equal(6n); // 1 + 2 + 3273 });274 });275276 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {277 await usingApi(async (api: ApiPromise) => {278 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});279 const itemsListIndexBefore = await getLastTokenId(api, collectionId);280 expect(itemsListIndexBefore).to.be.equal(0);281 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);282 const args = [283 {ReFungible: {pieces: 1}},284 {ReFungible: {pieces: 2}},285 {ReFungible: {pieces: 3}},286 ];287 const createMultipleItemsTx = api.tx.unique288 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);289 await submitTransactionAsync(bob, createMultipleItemsTx);290 const itemsListIndexAfter = await getLastTokenId(api, collectionId);291 expect(itemsListIndexAfter).to.be.equal(3);292293 expect(await getBalance(api, collectionId, bob.address, 1)).to.be.equal(1n);294 expect(await getBalance(api, collectionId, bob.address, 2)).to.be.equal(2n);295 expect(await getBalance(api, collectionId, bob.address, 3)).to.be.equal(3n);296 });297 });298});299300describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {301 let alice: IKeyringPair;302 let bob: IKeyringPair;303304 before(async () => {305 await usingApi(async () => {306 alice = privateKey('//Alice');307 bob = privateKey('//Bob');308 });309 });310311 it('Regular user cannot create items in active NFT collection', async () => {312 await usingApi(async (api: ApiPromise) => {313 const collectionId = await createCollectionExpectSuccess();314 const itemsListIndexBefore = await getLastTokenId(api, collectionId);315 expect(itemsListIndexBefore).to.be.equal(0);316 const args = [{NFT: {}},317 {NFT: {}},318 {NFT: {}}];319 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);320 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);321 });322 });323324 it('Regular user cannot create items in active Fungible collection', async () => {325 await usingApi(async (api: ApiPromise) => {326 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});327 const itemsListIndexBefore = await getLastTokenId(api, collectionId);328 expect(itemsListIndexBefore).to.be.equal(0);329 const args = [330 {Fungible: {value: 1}},331 {Fungible: {value: 2}},332 {Fungible: {value: 3}},333 ];334 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);335 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);336 });337 });338339 it('Regular user cannot create items in active ReFungible collection', async () => {340 await usingApi(async (api: ApiPromise) => {341 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});342 const itemsListIndexBefore = await getLastTokenId(api, collectionId);343 expect(itemsListIndexBefore).to.be.equal(0);344 const args = [345 {ReFungible: {pieces: 1}},346 {ReFungible: {pieces: 1}},347 {ReFungible: {pieces: 1}},348 ];349 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);350 await expect(executeTransaction(api, bob, createMultipleItemsTx)).to.be.rejectedWith(/common\.PublicMintingNotAllowed/);351 });352 });353354 it('Create token in not existing collection', async () => {355 await usingApi(async (api: ApiPromise) => {356 const collectionId = await getCreatedCollectionCount(api) + 1;357 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'NFT', 'NFT']);358 await expect(executeTransaction(api, alice, createMultipleItemsTx)).to.be.rejectedWith(/common\.CollectionNotFound/);359 });360 });361362 it('Create NFT and Re-fungible tokens that has reached the maximum data limit', async () => {363 await usingApi(async (api: ApiPromise) => {364 // NFT365 const collectionId = await createCollectionWithPropsExpectSuccess({366 propPerm: [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}],367 });368 const alice = privateKey('//Alice');369 const args = [370 {NFT: {properties: [{key: 'key', value: 'A'.repeat(32769)}]}},371 {NFT: {properties: [{key: 'key', value: 'B'.repeat(32769)}]}},372 {NFT: {properties: [{key: 'key', value: 'C'.repeat(32769)}]}},373 ];374 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);375 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;376377 // ReFungible378 const collectionIdReFungible =379 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});380 const argsReFungible = [381 {ReFungible: ['1'.repeat(2049), 10]},382 {ReFungible: ['2'.repeat(2049), 10]},383 {ReFungible: ['3'.repeat(2049), 10]},384 ];385 const createMultipleItemsTxFungible = api.tx.unique386 .createMultipleItems(collectionIdReFungible, normalizeAccountId(alice.address), argsReFungible);387 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTxFungible)).to.be.rejected;388 });389 });390391 it('Create tokens with different types', async () => {392 await usingApi(async (api: ApiPromise) => {393 const collectionId = await createCollectionExpectSuccess();394 const createMultipleItemsTx = api.tx.unique395 .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'Fungible', 'ReFungible']);396 await expect(executeTransaction(api, alice, createMultipleItemsTx)).to.be.rejectedWith(/nonfungible\.NotNonfungibleDataUsedToMintFungibleCollectionToken/);397 // garbage collection :-D // lol398 await destroyCollectionExpectSuccess(collectionId);399 });400 });401402 it('Create tokens with different data limits <> maximum data limit', async () => {403 await usingApi(async (api: ApiPromise) => {404 const collectionId = await createCollectionWithPropsExpectSuccess({405 propPerm: [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}],406 });407 const args = [408 {NFT: {properties: [{key: 'key', value: 'A'}]}},409 {NFT: {properties: [{key: 'key', value: 'B'.repeat(32769)}]}},410 ];411 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);412 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;413 });414 });415416 it('Fails when minting tokens exceeds collectionLimits amount', async () => {417 await usingApi(async (api) => {418 const collectionId = await createCollectionExpectSuccess();419 await setCollectionLimitsExpectSuccess(alice, collectionId, {420 tokenLimit: 1,421 });422 const args = [423 {NFT: {}},424 {NFT: {}},425 ];426 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);427 await expect(executeTransaction(api, alice, createMultipleItemsTx)).to.be.rejectedWith(/common\.CollectionTokenLimitExceeded/);428 });429 });430431 it('User doesnt have editing rights', async () => {432 await usingApi(async (api: ApiPromise) => {433 const collectionId = await createCollectionWithPropsExpectSuccess({434 propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}],435 });436 const itemsListIndexBefore = await getLastTokenId(api, collectionId);437 expect(itemsListIndexBefore).to.be.equal(0);438 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);439 const args = [440 {NFT: {properties: [{key: 'key1', value: 'v2'}]}},441 {NFT: {}},442 {NFT: {}},443 ];444445 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(bob.address), args);446 await expect(executeTransaction(api, bob, tx)).to.be.rejectedWith(/common\.NoPermission/);447 });448 });449450 it('Adding property without access rights', async () => {451 await usingApi(async (api: ApiPromise) => {452 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'k', value: 'v1'}]});453 const itemsListIndexBefore = await getLastTokenId(api, collectionId);454 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);455 expect(itemsListIndexBefore).to.be.equal(0);456 const args = [{NFT: {properties: [{key: 'k', value: 'v'}]}},457 {NFT: {}},458 {NFT: {}}];459460 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(bob.address), args);461 await expect(executeTransaction(api, bob, tx)).to.be.rejectedWith(/common\.NoPermission/);462 });463 });464465 it('Adding more than 64 prps', async () => {466 await usingApi(async (api: ApiPromise) => {467 const propPerms = [{key: 'key', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}];468 for (let i = 0; i < 65; i++) {469 propPerms.push({key: `key${i}`, permission: {mutable: true, collectionAdmin: true, tokenOwner: true}});470 }471472 const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});473474 const tx1 = api.tx.unique.setPropertyPermissions(collectionId, propPerms);475 await expect(executeTransaction(api, alice, tx1)).to.be.rejectedWith(/common\.PropertyLimitReached/);476477 const itemsListIndexBefore = await getLastTokenId(api, collectionId);478 expect(itemsListIndexBefore).to.be.equal(0);479 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);480481 const prps = [];482483 for (let i = 0; i < 65; i++) {484 prps.push({key: `key${i}`, value: `value${i}`});485 }486487 const args = [488 {NFT: {properties: prps}},489 {NFT: {properties: prps}},490 {NFT: {properties: prps}},491 ];492493 // there are no permissions, but will fail anyway because of too much weight for a block494 const tx2 = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);495 await expect(submitTransactionExpectFailAsync(alice, tx2)).to.be.rejected;496 });497 });498499 it('Trying to add bigger property than allowed', async () => {500 await usingApi(async (api: ApiPromise) => {501 const collectionId = await createCollectionWithPropsExpectSuccess({502 propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}],503 });504 const itemsListIndexBefore = await getLastTokenId(api, collectionId);505 expect(itemsListIndexBefore).to.be.equal(0);506 const args = [{NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},507 {NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},508 {NFT: {properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}}];509510 const tx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);511 await expect(executeTransaction(api, alice, tx)).to.be.rejectedWith(/common\.NoPermission/);512 });513 });514});tests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -16,8 +16,8 @@
import {expect} from 'chai';
import privateKey from './substrate/privateKey';
-import usingApi, {executeTransaction, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';
-import {createCollectionExpectSuccess, createCollectionWithPropsExpectSuccess, addCollectionAdminExpectSuccess, getCreateItemsResult} from './util/helpers';
+import usingApi, {executeTransaction} from './substrate/substrate-api';
+import {createCollectionExpectSuccess, createCollectionWithPropsExpectSuccess, addCollectionAdminExpectSuccess} from './util/helpers';
describe('createMultipleItemsEx', () => {
it('can initialize multiple NFT with different owners', async () => {
@@ -175,7 +175,6 @@
propPerm: [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: false}}]});
const alice = privateKey('//Alice');
const bob = privateKey('//Bob');
- const charlie = privateKey('//Charlie');
await addCollectionAdminExpectSuccess(alice, collection, bob.address);
await usingApi(async (api) => {
const data = [
@@ -236,9 +235,7 @@
const alice = privateKey('//Alice');
const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
await usingApi(async (api) => {
- await expect(
- executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, propPerms))
- ).to.be.rejectedWith(/common\.PropertyLimitReached/);
+ await expect(executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, propPerms))).to.be.rejectedWith(/common\.PropertyLimitReached/);
});
});
tests/src/util/helpers.tsdiffbeforeafterboth--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -347,7 +347,7 @@
name: strToUTF16(name),
description: strToUTF16(description),
tokenPrefix: strToUTF16(tokenPrefix),
- mode: modeprm as any
+ mode: modeprm as any,
});
const events = await submitTransactionAsync(alicePrivateKey, tx);
const result = getCreateCollectionResult(events);
@@ -561,7 +561,7 @@
expect(result.success).to.be.true;
});
-}
+};
export async function setCollectionLimitsExpectFailure(sender: IKeyringPair, collectionId: number, limits: any) {
await usingApi(async (api) => {