git.delta.rocks / unique-network / refs/commits / afa8f9707a6b

difftreelog

source

tests/src/eth/collectionLimits.test.ts4.6 KiBsourcehistory
1import {IKeyringPair} from '@polkadot/types/types';2import {Pallets} from '../util';3import {CollectionLimits, expect, itEth, usingEthPlaygrounds} from './util';456describe('Can set collection limits', () => {7  let donor: IKeyringPair;89  before(async () => {10    await usingEthPlaygrounds(async (_helper, privateKey) => {11      donor = await privateKey({filename: __filename});12    });13  });1415  [16    {case: 'nft' as const},17    {case: 'rft' as const, requiredPallets: [Pallets.ReFungible]},18    {case: 'ft' as const},19  ].map(testCase =>20    itEth.ifWithPallets(`for ${testCase.case}`, testCase.requiredPallets || [], async ({helper}) => {21      const owner = await helper.eth.createAccountWithBalance(donor);22      const {collectionId, collectionAddress} = await helper.eth.createCollection(testCase.case, owner, 'Limits', 'absolutely anything', 'FLO', 18);23      const limits = {24        accountTokenOwnershipLimit: 1000,25        sponsoredDataSize: 1024,26        sponsoredDataRateLimit: 30,27        tokenLimit: 1000000,28        sponsorTransferTimeout: 6,29        sponsorApproveTimeout: 6,30        ownerCanTransfer: 1,31        ownerCanDestroy: 0,32        transfersEnabled: 0,33      };34      35      const expectedLimits = {36        accountTokenOwnershipLimit: 1000,37        sponsoredDataSize: 1024,38        sponsoredDataRateLimit: {blocks: 30},39        tokenLimit: 1000000,40        sponsorTransferTimeout: 6,41        sponsorApproveTimeout: 6,42        ownerCanTransfer: true,43        ownerCanDestroy: false,44        transfersEnabled: false,45      };46     47      const collection = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner);48      await collection.methods.setCollectionLimit(CollectionLimits.AccountTokenOwnership, true, limits.accountTokenOwnershipLimit).send();49      await collection.methods.setCollectionLimit(CollectionLimits.SponsoredDataSize, true, limits.sponsoredDataSize).send();50      await collection.methods.setCollectionLimit(CollectionLimits.SponsoredDataRateLimit, true, limits.sponsoredDataRateLimit).send();51      await collection.methods.setCollectionLimit(CollectionLimits.TokenLimit, true, limits.tokenLimit).send();52      await collection.methods.setCollectionLimit(CollectionLimits.SponsorTransferTimeout, true, limits.sponsorTransferTimeout).send();53      await collection.methods.setCollectionLimit(CollectionLimits.SponsorApproveTimeout, true, limits.sponsorApproveTimeout).send();54      await collection.methods.setCollectionLimit(CollectionLimits.OwnerCanTransfer, true, limits.ownerCanTransfer).send();55      await collection.methods.setCollectionLimit(CollectionLimits.OwnerCanDestroy, true, limits.ownerCanDestroy).send();56      await collection.methods.setCollectionLimit(CollectionLimits.TransferEnabled, true, limits.transfersEnabled).send();57      58      const data = (await helper.rft.getData(collectionId))!;59      expect(data.raw.limits).to.deep.eq(expectedLimits);60      expect(await helper.collection.getEffectiveLimits(collectionId)).to.deep.eq(expectedLimits);61    }));62});6364describe('Cannot set invalid collection limits', () => {65  let donor: IKeyringPair;6667  before(async () => {68    await usingEthPlaygrounds(async (_helper, privateKey) => {69      donor = await privateKey({filename: __filename});70    });71  });7273  [74    {case: 'nft' as const},75    {case: 'rft' as const, requiredPallets: [Pallets.ReFungible]},76    {case: 'ft' as const},77  ].map(testCase =>78    itEth.ifWithPallets(`for ${testCase.case}`, testCase.requiredPallets || [], async ({helper}) => {79      const invalidLimits = {80        accountTokenOwnershipLimit: BigInt(Number.MAX_SAFE_INTEGER),81        transfersEnabled: 3,82      };8384      const owner = await helper.eth.createAccountWithBalance(donor);85      const {collectionAddress} = await helper.eth.createCollection(testCase.case, owner, 'Limits', 'absolutely anything', 'ISNI', 18);86      const collectionEvm = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner);87      await expect(collectionEvm.methods88        .setCollectionLimit(20, true, 1)89        .call()).to.be.rejectedWith('Returned error: VM Exception while processing transaction: revert Value not convertible into enum "CollectionLimits"');90      91      await expect(collectionEvm.methods92        .setCollectionLimit(CollectionLimits.AccountTokenOwnership, true, BigInt(Number.MAX_SAFE_INTEGER))93        .call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`);94      95      await expect(collectionEvm.methods96        .setCollectionLimit(CollectionLimits.TransferEnabled, true, 3)97        .call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`);98    }));99});