1234567891011121314151617import {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 getConstMetadata,34 getCreatedCollectionCount,35 createCollectionWithPropsExpectSuccess,36 getCreateItemsResult,37 createMultipleItemsWithPropsExpectSuccess,38 createMultipleItemsWithPropsExpectFailure,39} from './util/helpers';4041chai.use(chaiAsPromised);42const expect = chai.expect;4344describe('Integration Test createMultipleItems(collection_id, owner, items_data):', () => {45 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {46 await usingApi(async (api: ApiPromise) => {47 const collectionId = await createCollectionExpectSuccess();48 const itemsListIndexBefore = await getLastTokenId(api, collectionId);49 expect(itemsListIndexBefore).to.be.equal(0);50 const alice = privateKey('//Alice');51 const args = [{Nft: {const_data: '0x31'}},52 {Nft: {const_data: '0x32'}},53 {Nft: {const_data: '0x33'}}];54 const createMultipleItemsTx = api.tx.unique55 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);56 await submitTransactionAsync(alice, createMultipleItemsTx);57 const itemsListIndexAfter = await getLastTokenId(api, collectionId);58 expect(itemsListIndexAfter).to.be.equal(3);5960 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));61 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));62 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));6364 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);65 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);66 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);67 });68 });6970 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {71 await usingApi(async (api: ApiPromise) => {72 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});73 const itemsListIndexBefore = await getLastTokenId(api, collectionId);74 expect(itemsListIndexBefore).to.be.equal(0);75 const alice = privateKey('//Alice');76 const args = [77 {Fungible: {value: 1}},78 {Fungible: {value: 2}},79 {Fungible: {value: 3}},80 ];81 const createMultipleItemsTx = api.tx.unique82 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);83 await submitTransactionAsync(alice, createMultipleItemsTx);84 const token1Data = await getBalance(api, collectionId, alice.address, 0);8586 expect(token1Data).to.be.equal(6n); 87 });88 });8990 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {91 await usingApi(async (api: ApiPromise) => {92 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});93 const itemsListIndexBefore = await getLastTokenId(api, collectionId);94 expect(itemsListIndexBefore).to.be.equal(0);95 const alice = privateKey('//Alice');96 const args = [97 {ReFungible: {const_data: [0x31], pieces: 1}},98 {ReFungible: {const_data: [0x32], pieces: 1}},99 {ReFungible: {const_data: [0x33], pieces: 1}},100 ];101 const createMultipleItemsTx = api.tx.unique102 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);103 await submitTransactionAsync(alice, createMultipleItemsTx);104 const itemsListIndexAfter = await getLastTokenId(api, collectionId);105 expect(itemsListIndexAfter).to.be.equal(3);106107 expect(await getBalance(api, collectionId, alice.address, 1)).to.be.equal(1n);108 expect(await getBalance(api, collectionId, alice.address, 2)).to.be.equal(1n);109 expect(await getBalance(api, collectionId, alice.address, 3)).to.be.equal(1n);110111 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);112 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);113 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);114 });115 });116117 it('Can mint amount of items equals to collection limits', async () => {118 await usingApi(async (api) => {119 const alice = privateKey('//Alice');120121 const collectionId = await createCollectionExpectSuccess();122 await setCollectionLimitsExpectSuccess(alice, collectionId, {123 tokenLimit: 2,124 });125 const args = [126 {NFT: {const_data: 'A'}},127 {NFT: {const_data: 'B'}},128 ];129 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);130 const events = await submitTransactionAsync(alice, createMultipleItemsTx);131 const result = getGenericResult(events);132 expect(result.success).to.be.true;133 });134 });135136 it('Create 0x31, 0x32, 0x33 items in active NFT with property Admin', async () => {137 await usingApi(async (api: ApiPromise) => {138 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});139 const itemsListIndexBefore = await getLastTokenId(api, collectionId);140 expect(itemsListIndexBefore).to.be.equal(0);141 const alice = privateKey('//Alice');142 const bob = privateKey('//Bob');143 const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},144 {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},145 {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];146147 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);148 const itemsListIndexAfter = await getLastTokenId(api, collectionId);149 expect(itemsListIndexAfter).to.be.equal(3);150151 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));152 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));153 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));154155 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);156 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);157 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);158 });159 });160161 it('Create 0x31, 0x32, 0x33 items in active NFT with property AdminConst', async () => {162 await usingApi(async (api: ApiPromise) => {163 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});164 const itemsListIndexBefore = await getLastTokenId(api, collectionId);165 expect(itemsListIndexBefore).to.be.equal(0);166 const alice = privateKey('//Alice');167 const bob = privateKey('//Bob');168 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);169 const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},170 {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},171 {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];172173 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);174 const itemsListIndexAfter = await getLastTokenId(api, collectionId);175 expect(itemsListIndexAfter).to.be.equal(3);176177 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));178 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));179 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));180181 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);182 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);183 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);184 });185 });186187 it('Create 0x31, 0x32, 0x33 items in active NFT with property itemOwnerOrAdmin', async () => {188 await usingApi(async (api: ApiPromise) => {189 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});190 const itemsListIndexBefore = await getLastTokenId(api, collectionId);191 expect(itemsListIndexBefore).to.be.equal(0);192 const alice = privateKey('//Alice');193 const bob = privateKey('//Bob');194 const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},195 {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},196 {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];197198 await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);199 const itemsListIndexAfter = await getLastTokenId(api, collectionId);200 expect(itemsListIndexAfter).to.be.equal(3);201202 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));203 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));204 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));205206 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);207 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);208 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);209 });210 });211});212213describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {214215 let alice: IKeyringPair;216 let bob: IKeyringPair;217218 before(async () => {219 await usingApi(async () => {220 alice = privateKey('//Alice');221 bob = privateKey('//Bob');222 });223 });224225 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {226 await usingApi(async (api: ApiPromise) => {227 const collectionId = await createCollectionExpectSuccess();228 const itemsListIndexBefore = await getLastTokenId(api, collectionId);229 expect(itemsListIndexBefore).to.be.equal(0);230 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);231 const args = [{Nft: {const_data: '0x31'}},232 {Nft: {const_data: '0x32'}},233 {Nft: {const_data: '0x33'}}];234 const createMultipleItemsTx = api.tx.unique235 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);236 await submitTransactionAsync(bob, createMultipleItemsTx);237 const itemsListIndexAfter = await getLastTokenId(api, collectionId);238 expect(itemsListIndexAfter).to.be.equal(3);239240 expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(bob.address));241 expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(bob.address));242 expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(bob.address));243244 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);245 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);246 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);247 });248 });249250 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {251 await usingApi(async (api: ApiPromise) => {252 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});253 const itemsListIndexBefore = await getLastTokenId(api, collectionId);254 expect(itemsListIndexBefore).to.be.equal(0);255 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);256 const args = [257 {Fungible: {value: 1}},258 {Fungible: {value: 2}},259 {Fungible: {value: 3}},260 ];261 const createMultipleItemsTx = api.tx.unique262 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);263 await submitTransactionAsync(bob, createMultipleItemsTx);264 const token1Data = await getBalance(api, collectionId, bob.address, 0);265266 expect(token1Data).to.be.equal(6n); 267 });268 });269270 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {271 await usingApi(async (api: ApiPromise) => {272 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});273 const itemsListIndexBefore = await getLastTokenId(api, collectionId);274 expect(itemsListIndexBefore).to.be.equal(0);275 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);276 const args = [277 {ReFungible: {const_data: [0x31], pieces: 1}},278 {ReFungible: {const_data: [0x32], pieces: 1}},279 {ReFungible: {const_data: [0x33], pieces: 1}},280 ];281 const createMultipleItemsTx = api.tx.unique282 .createMultipleItems(collectionId, normalizeAccountId(bob.address), args);283 await submitTransactionAsync(bob, createMultipleItemsTx);284 const itemsListIndexAfter = await getLastTokenId(api, collectionId);285 expect(itemsListIndexAfter).to.be.equal(3);286287 expect(await getBalance(api, collectionId, bob.address, 1)).to.be.equal(1n);288 expect(await getBalance(api, collectionId, bob.address, 2)).to.be.equal(1n);289 expect(await getBalance(api, collectionId, bob.address, 3)).to.be.equal(1n);290291 expect(await getConstMetadata(api, collectionId, 1)).to.be.deep.equal([0x31]);292 expect(await getConstMetadata(api, collectionId, 2)).to.be.deep.equal([0x32]);293 expect(await getConstMetadata(api, collectionId, 3)).to.be.deep.equal([0x33]);294 });295 });296});297298describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {299300 let alice: IKeyringPair;301 let bob: IKeyringPair;302303 before(async () => {304 await usingApi(async () => {305 alice = privateKey('//Alice');306 bob = privateKey('//Bob');307 });308 });309310 it('Regular user cannot create items in active NFT collection', async () => {311 await usingApi(async (api: ApiPromise) => {312 const collectionId = await createCollectionExpectSuccess();313 const itemsListIndexBefore = await getLastTokenId(api, collectionId);314 expect(itemsListIndexBefore).to.be.equal(0);315 const args = [{Nft: {const_data: '0x31'}},316 {Nft: {const_data: '0x32'}},317 {Nft: {const_data: '0x33'}}];318 const createMultipleItemsTx = api.tx.unique319 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);320 await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;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.unique335 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);336 await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;337 });338 });339340 it('Regular user cannot create items in active ReFungible collection', async () => {341 await usingApi(async (api: ApiPromise) => {342 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});343 const itemsListIndexBefore = await getLastTokenId(api, collectionId);344 expect(itemsListIndexBefore).to.be.equal(0);345 const args = [346 {ReFungible: {const_data: [0x31], pieces: 1}},347 {ReFungible: {const_data: [0x32], pieces: 1}},348 {ReFungible: {const_data: [0x33], pieces: 1}},349 ];350 const createMultipleItemsTx = api.tx.unique351 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);352 await expect(submitTransactionAsync(bob, createMultipleItemsTx)).to.be.rejected;353 });354 });355356 it('Create token in not existing collection', async () => {357 await usingApi(async (api: ApiPromise) => {358 const collectionId = await getCreatedCollectionCount(api) + 1;359 const createMultipleItemsTx = api.tx.unique360 .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'NFT', 'NFT']);361 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;362 });363 });364365 it('Create NFT and Re-fungible tokens that has reached the maximum data limit', async () => {366 await usingApi(async (api: ApiPromise) => {367 368 const collectionId = await createCollectionExpectSuccess();369 const alice = privateKey('//Alice');370 const args = [371 {NFT: {const_data: 'A'.repeat(2049)}},372 {NFT: {const_data: 'B'.repeat(2049)}},373 {NFT: {const_data: 'C'.repeat(2049)}},374 ];375 const createMultipleItemsTx = api.tx.unique376 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);377 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;378379 380 const collectionIdReFungible =381 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});382 const argsReFungible = [383 {ReFungible: ['1'.repeat(2049), 10]},384 {ReFungible: ['2'.repeat(2049), 10]},385 {ReFungible: ['3'.repeat(2049), 10]},386 ];387 const createMultipleItemsTxFungible = api.tx.unique388 .createMultipleItems(collectionIdReFungible, normalizeAccountId(alice.address), argsReFungible);389 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTxFungible)).to.be.rejected;390 });391 });392393 it('Create tokens with different types', async () => {394 await usingApi(async (api: ApiPromise) => {395 const collectionId = await createCollectionExpectSuccess();396 const createMultipleItemsTx = api.tx.unique397 .createMultipleItems(collectionId, normalizeAccountId(alice.address), ['NFT', 'Fungible', 'ReFungible']);398 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;399 400 await destroyCollectionExpectSuccess(collectionId);401 });402 });403404 it('Create tokens with different data limits <> maximum data limit', async () => {405 await usingApi(async (api: ApiPromise) => {406 const collectionId = await createCollectionExpectSuccess();407 const args = [408 {NFT: {const_data: 'A'}},409 {NFT: {const_data: 'B'.repeat(2049)}},410 ];411 const createMultipleItemsTx = await api.tx.unique412 .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);413 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;414 });415 });416417 it('Fails when minting tokens exceeds collectionLimits amount', async () => {418 await usingApi(async (api) => {419420 const collectionId = await createCollectionExpectSuccess();421 await setCollectionLimitsExpectSuccess(alice, collectionId, {422 tokenLimit: 1,423 });424 const args = [425 {NFT: {const_data: 'A'}},426 {NFT: {const_data: 'B'}},427 ];428 const createMultipleItemsTx = api.tx.unique.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);429 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;430 });431 });432433 it('No editing rights', async () => {434 await usingApi(async (api: ApiPromise) => {435 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],436 propPerm: [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: true}}]});437 const itemsListIndexBefore = await getLastTokenId(api, collectionId);438 expect(itemsListIndexBefore).to.be.equal(0);439 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);440 const args = [{Nft: {const_data: '0x31', properties: [{key: 'key1', value: 'v2'}]}},441 {Nft: {const_data: '0x32'}},442 {Nft: {const_data: '0x33'}}];443444 await createMultipleItemsWithPropsExpectFailure(bob, collectionId, args);445 });446 });447448 it('User doesnt have editing rights', async () => {449 await usingApi(async (api: ApiPromise) => {450 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],451 propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});452 const itemsListIndexBefore = await getLastTokenId(api, collectionId);453 expect(itemsListIndexBefore).to.be.equal(0);454 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);455 const args = [{Nft: {const_data: '0x31', properties: [{key: 'key1', value: 'v2'}]}},456 {Nft: {const_data: '0x32'}},457 {Nft: {const_data: '0x33'}}];458459 await createMultipleItemsWithPropsExpectFailure(bob, collectionId, args);460 });461 });462463 it('Adding property without access rights', async () => {464 await usingApi(async (api: ApiPromise) => {465 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'k', value: 'v1'}]});466 const itemsListIndexBefore = await getLastTokenId(api, collectionId);467 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);468 expect(itemsListIndexBefore).to.be.equal(0);469 const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v'}]}},470 {Nft: {const_data: '0x32'}},471 {Nft: {const_data: '0x33'}}];472473 await createMultipleItemsWithPropsExpectFailure(bob, collectionId, args);474 });475 });476477 it('Adding more than 64 prps', async () => {478 await usingApi(async (api: ApiPromise) => {479 const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],480 propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});481 const itemsListIndexBefore = await getLastTokenId(api, collectionId);482 expect(itemsListIndexBefore).to.be.equal(0);483 await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);484485 const prps = [];486487 for (let i = 0; i < 65; i++) {488 prps.push({key: `key${i}`, value: `value${i}`});489 }490491 const args = [{Nft: {const_data: '0x31', properties: prps}},492 {Nft: {const_data: '0x32', properties: prps}},493 {Nft: {const_data: '0x33', properties: prps}}];494495 createMultipleItemsWithPropsExpectFailure(alice, collectionId, args);496 });497 });498499 it('Trying to add bigger property than allowed', async () => {500 await usingApi(async (api: ApiPromise) => {501 const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});502 const itemsListIndexBefore = await getLastTokenId(api, collectionId);503 expect(itemsListIndexBefore).to.be.equal(0);504 const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},505 {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}},506 {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'vvvvvv'.repeat(5000)}, {key: 'k2', value: 'vvv'.repeat(5000)}]}}];507508 createMultipleItemsWithPropsExpectFailure(alice, collectionId, args);509 });510 });511});