12import { ApiPromise, Keyring } from '@polkadot/api';3import { IKeyringPair } from '@polkadot/types/types';4import chai from 'chai';5import chaiAsPromised from 'chai-as-promised';6import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';7import { ICollectionInterface } from './types';8import {9 createCollectionExpectSuccess, getCreatedCollectionCount,10 getCreateItemResult,11 getDetailedCollectionInfo,12} from './util/helpers';1314chai.use(chaiAsPromised);15const expect = chai.expect;1617let alice: IKeyringPair;18let bob: IKeyringPair;19let collectionIdForTesting: number;2021const accountTokenOwnershipLimit = 0;22const sponsoredDataSize = 0;23const sponsoredMintSize = 0;24const tokenLimit = 0;2526describe('hooks', () => {27 before(async () => {28 await usingApi(async () => {29 const keyring = new Keyring({ type: 'sr25519' });30 alice = keyring.addFromUri('//Alice');31 });32 });33 it('choose or create collection for testing', async () => {34 await usingApi(async () => {35 collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: 'NFT'});36 });37 });38});3940describe('setCollectionLimits positive', () => {41 let tx;42 before(async () => {43 await usingApi(async () => {44 const keyring = new Keyring({ type: 'sr25519' });45 alice = keyring.addFromUri('//Alice');46 });47 });48 it('execute setCollectionLimits with predefined params ', async () => {49 await usingApi(async (api: ApiPromise) => {50 tx = api.tx.nft.setCollectionLimits(51 collectionIdForTesting,52 {53 accountTokenOwnershipLimit,54 sponsoredDataSize,55 sponsoredMintSize,56 tokenLimit,57 },58 );59 const events = await submitTransactionAsync(alice, tx);60 const result = getCreateItemResult(events);61 62 expect(result.success).to.be.true;63 });64 });65 it('get collection limits defined in previous test', async () => {66 await usingApi(async (api: ApiPromise) => {67 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;68 expect(collectionInfo.Limits.AccountTokenOwnershipLimit.toNumber()).to.be.equal(accountTokenOwnershipLimit);69 expect(collectionInfo.Limits.SponsoredMintSize.toNumber()).to.be.equal(sponsoredMintSize);70 expect(collectionInfo.Limits.TokenLimit.toNumber()).to.be.equal(tokenLimit);71 expect(collectionInfo.Limits.SponsorTimeout.toNumber()).to.be.equal(sponsoredDataSize);72 });73 });74});7576describe('setCollectionLimits negative', () => {77 let tx;78 before(async () => {79 await usingApi(async () => {80 const keyring = new Keyring({ type: 'sr25519' });81 alice = keyring.addFromUri('//Alice');82 bob = keyring.addFromUri('//Bob');83 });84 });85 it('execute setCollectionLimits for not exists collection', async () => {86 await usingApi(async (api: ApiPromise) => {87 const collectionCount = await getCreatedCollectionCount(api);88 const nonExistedCollectionId = collectionCount + 1;89 tx = api.tx.nft.setCollectionLimits(90 nonExistedCollectionId,91 {92 accountTokenOwnershipLimit,93 sponsoredDataSize,94 sponsoredMintSize,95 tokenLimit,96 },97 );98 await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;99 });100 });101 it('execute setCollectionLimits from user who is not owner of this collection', async () => {102 await usingApi(async (api: ApiPromise) => {103 tx = api.tx.nft.setCollectionLimits(104 collectionIdForTesting,105 {106 accountTokenOwnershipLimit,107 sponsoredDataSize,108 sponsoredMintSize,109 tokenLimit,110 },111 );112 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;113 });114 });115 it('execute setCollectionLimits with incorrect limits', async () => {116 await usingApi(async (api: ApiPromise) => {117 tx = api.tx.nft.setCollectionLimits(118 collectionIdForTesting,119 {120 accountTokenOwnershipLimit: 'awdawd',121 sponsorTransferTimeout: 'awd',122 sponsoredDataSize: '12312312312312312',123 tokenLimit: '-100',124 },125 );126 await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;127 });128 });129});