1import { IKeyringPair } from '@polkadot/types/types';2import BN from 'bn.js';3import chai from 'chai';4import chaiAsPromised from 'chai-as-promised';5import privateKey from '../substrate/privateKey';6import usingApi, { submitTransactionAsync } from '../substrate/substrate-api';7import {8 addToWhiteListExpectSuccess,9 createCollectionExpectSuccess,10 getCreateItemResult,11 setMintPermissionExpectSuccess,12 normalizeAccountId,13 waitNewBlocks,14} from '../util/helpers';1516chai.use(chaiAsPromised);17const expect = chai.expect;18let Alice: IKeyringPair;19let Bob: IKeyringPair;20let Ferdie: IKeyringPair;2122const accountTokenOwnershipLimit = 4;23const sponsoredMintSize = 4294967295;24const tokenLimit = 4;25const sponsorTimeout = 14400;26const ownerCanTransfer = false;27const ownerCanDestroy = false;2829before(async () => {30 await usingApi(async () => {31 Alice = privateKey('//Alice');32 Bob = privateKey('//Bob');33 Ferdie = privateKey('//Ferdie');34 });35});3637describe('Token limit exceeded collection: ', () => {38 39 it('The number of tokens created in the collection from different addresses exceeds the allowed collection limit ', async () => {40 await usingApi(async (api) => {41 const collectionId = await createCollectionExpectSuccess();42 await setMintPermissionExpectSuccess(Alice, collectionId, true);43 await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address);44 await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address);45 const setCollectionLim = api.tx.nft.setCollectionLimits(46 collectionId,47 {48 accountTokenOwnershipLimit,49 sponsoredMintSize,50 tokenLimit,51 52 sponsorTimeout,53 ownerCanTransfer,54 ownerCanDestroy,55 },56 );57 const subTx = await submitTransactionAsync(Alice, setCollectionLim);58 const subTxTesult = getCreateItemResult(subTx);59 60 expect(subTxTesult.success).to.be.true;61 await waitNewBlocks(2);6263 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];64 const mintItemOne = api.tx.nft65 .createMultipleItems(collectionId, normalizeAccountId(Ferdie.address), args);66 const mintItemTwo = api.tx.nft67 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);68 await Promise.all([69 mintItemOne.signAndSend(Ferdie),70 mintItemTwo.signAndSend(Bob),71 ]);72 await waitNewBlocks(2);73 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;74 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);75 76 await waitNewBlocks(2);77 });78 });79});