--- a/tests/src/collision-tests/admVsOwnerChanges.test.ts +++ b/tests/src/collision-tests/admVsOwnerChanges.test.ts @@ -48,8 +48,6 @@ ]); const itemBefore: any = await api.query.nft.nftItemList(collectionId, itemId); expect(itemBefore.Owner.toString()).not.to.be.eq(Bob.address); - const blockHash = await api.query.system.number(); - console.log(`blockHash: ${blockHash}`); }); }); }); --- a/tests/src/collision-tests/admVsOwnerData.test.ts +++ b/tests/src/collision-tests/admVsOwnerData.test.ts @@ -47,8 +47,6 @@ ]); const item: any = await api.query.nft.nftItemList(collectionId, itemId); expect(Array.from(item.VariableData)).to.deep.equal(Array.from([])); - const blockHash = await api.query.system.number(); - console.log(`blockHash: ${blockHash}`); }); }); }); --- a/tests/src/collision-tests/admVsOwnerTake.test.ts +++ b/tests/src/collision-tests/admVsOwnerTake.test.ts @@ -44,8 +44,6 @@ ]); const itemBurn: any = await api.query.nft.nftItemList(collectionId, itemId); expect(itemBurn.Owner.toString()).to.be.eq('5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM'); - const blockHash = await api.query.system.number(); - console.log(`blockHash: ${blockHash}`); }); }); }); --- /dev/null +++ b/tests/src/collision-tests/adminLimitsOff.test.ts @@ -0,0 +1,73 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api'; +import { + createCollectionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; +let Charlie: IKeyringPair; +let Eve: IKeyringPair; +let Dave: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + Charlie = privateKey('//Charlie'); + Eve = privateKey('//Eve'); + Dave = privateKey('//Dave'); + }); +}); + +describe('Admin limit exceeded collection: ', () => { + // tslint:disable-next-line: max-line-length + it('In one block, the owner and admin add new admins to the collection more than the limit ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + + const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN }; + const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber(); + expect(chainAdminLimit).to.be.equal(5); + + const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address); + await submitTransactionAsync(Alice, changeAdminTx1); + const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, Dave.address); + await submitTransactionAsync(Alice, changeAdminTx2); + const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx3); + + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + // + const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address); + const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address); + await Promise.all + ([ + addAdmOne.signAndSend(Bob), + addAdmTwo.signAndSend(Alice), + ]); + await timeoutPromise(10000); + const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, Alice.address); + // tslint:disable-next-line: no-unused-expression + expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected; + + const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); + expect(adminListAfterAddAdmin).to.be.contains(Eve.address); + expect(adminListAfterAddAdmin).to.be.contains(Ferdie.address); + expect(adminListAfterAddAdmin).not.to.be.contains(Alice.address); + }); + }); +}); --- a/tests/src/collision-tests/sponsorPayments.test.ts +++ b/tests/src/collision-tests/sponsorPayments.test.ts @@ -51,8 +51,6 @@ expect(alicesBalanceAfter === alicesBalanceBefore).to.be.true; // tslint:disable-next-line:no-unused-expression expect(bobsBalanceAfter === bobsBalanceBefore).to.be.true; - const blockHash = await api.query.system.number(); - console.log(`blockHash: ${blockHash}`); }); }); }); --- /dev/null +++ b/tests/src/collision-tests/tokenLimitsOff.test.ts @@ -0,0 +1,95 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import { + addToWhiteListExpectSuccess, + createCollectionExpectSuccess, + getCreateItemResult, + setMintPermissionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +const AccountTokenOwnershipLimit = 4; +const SponsoredMintSize = 4294967295; +const TokenLimit = 4; +const SponsorTimeout = 14400; +const OwnerCanTransfer = false; +const OwnerCanDestroy = false; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Token limit exceeded collection: ', () => { + // tslint:disable-next-line: max-line-length + it('The number of tokens created in the collection from different addresses exceeds the allowed collection limit ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + await setMintPermissionExpectSuccess(Alice, collectionId, true); + await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address); + await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address); + const setCollectionLim = api.tx.nft.setCollectionLimits( + collectionId, + { + AccountTokenOwnershipLimit, + SponsoredMintSize, + TokenLimit, + // tslint:disable-next-line: object-literal-sort-keys + SponsorTimeout, + OwnerCanTransfer, + OwnerCanDestroy, + }, + ); + const subTx = await submitTransactionAsync(Alice, setCollectionLim); + const subTxTesult = getCreateItemResult(subTx); + // tslint:disable-next-line:no-unused-expression + expect(subTxTesult.success).to.be.true; + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await timeoutPromise(10000); + // + const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }]; + const mintItemOne = api.tx.nft + .createMultipleItems(collectionId, Ferdie.address, args); + const mintItemTwo = api.tx.nft + .createMultipleItems(collectionId, Bob.address, args); + await Promise.all + ([ + mintItemOne.signAndSend(Ferdie), + mintItemTwo.signAndSend(Bob), + ]); + await timeoutPromise(10000); + const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; + expect(itemsListIndexAfter.toNumber()).to.be.equal(6); // Maybe 4? TokenLimit = 4. + 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; + const token4Data = await api.query.nft.nftItemList(collectionId, 4) as unknown as ITokenDataType; + const token5Data = await api.query.nft.nftItemList(collectionId, 5) as unknown as ITokenDataType; + const token6Data = await api.query.nft.nftItemList(collectionId, 6) as unknown as ITokenDataType; + + expect(token1Data.Owner.toString()).to.be.equal(Bob.address); + expect(token2Data.Owner.toString()).to.be.equal(Bob.address); + expect(token3Data.Owner.toString()).to.be.equal(Bob.address); + expect(token4Data.Owner.toString()).to.be.equal(Ferdie.address); + expect(token5Data.Owner.toString()).to.be.equal(Ferdie.address); + expect(token6Data.Owner.toString()).to.be.equal(Ferdie.address); + }); + }); +}); --- a/tests/src/collision-tests/turnsOffMinting.test.ts +++ b/tests/src/collision-tests/turnsOffMinting.test.ts @@ -41,8 +41,6 @@ ]); const itemList: any = await api.query.nft.nftItemList(collectionId, mintItem); expect(itemList.Owner.toString()).to.be.eq('5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM'); - const blockHash = await api.query.system.number(); - console.log(`blockHash: ${blockHash}`); }); }); });