From c875bc19c83f1860de4c2d21750c71b95dae4c33 Mon Sep 17 00:00:00 2001 From: Max Andreev Date: Wed, 07 Dec 2022 08:47:27 +0000 Subject: [PATCH] Combine evm collection limits tests --- --- /dev/null +++ b/tests/src/eth/collectionLimits.test.ts @@ -0,0 +1,99 @@ +import {IKeyringPair} from '@polkadot/types/types'; +import {expect, itEth, usingEthPlaygrounds} from './util'; + + +describe('Can set collection limits', () => { + let donor: IKeyringPair; + + before(async () => { + await usingEthPlaygrounds(async (_helper, privateKey) => { + donor = await privateKey({filename: __filename}); + }); + }); + + [ + {case: 'nft' as const, method: 'createNFTCollection' as const}, + {case: 'rft' as const, method: 'createRFTCollection' as const}, + {case: 'ft' as const, method: 'createFTCollection' as const}, + ].map(testCase => + itEth(`for ${testCase.case}`, async ({helper}) => { + const owner = await helper.eth.createAccountWithBalance(donor); + const {collectionId, collectionAddress} = await helper.eth.createCollecion(testCase.method, owner, 'Limits', 'absolutely anything', 'FLO', 18); + const limits = { + accountTokenOwnershipLimit: 1000, + sponsoredDataSize: 1024, + sponsoredDataRateLimit: 30, + tokenLimit: 1000000, + sponsorTransferTimeout: 6, + sponsorApproveTimeout: 6, + ownerCanTransfer: 1, + ownerCanDestroy: 0, + transfersEnabled: 0, + }; + + const expectedLimits = { + accountTokenOwnershipLimit: 1000, + sponsoredDataSize: 1024, + sponsoredDataRateLimit: {blocks: 30}, + tokenLimit: 1000000, + sponsorTransferTimeout: 6, + sponsorApproveTimeout: 6, + ownerCanTransfer: true, + ownerCanDestroy: false, + transfersEnabled: false, + }; + + const collection = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner); + await collection.methods.setCollectionLimit('accountTokenOwnershipLimit', limits.accountTokenOwnershipLimit).send(); + await collection.methods.setCollectionLimit('sponsoredDataSize', limits.sponsoredDataSize).send(); + await collection.methods.setCollectionLimit('sponsoredDataRateLimit', limits.sponsoredDataRateLimit).send(); + await collection.methods.setCollectionLimit('tokenLimit', limits.tokenLimit).send(); + await collection.methods.setCollectionLimit('sponsorTransferTimeout', limits.sponsorTransferTimeout).send(); + await collection.methods.setCollectionLimit('sponsorApproveTimeout', limits.sponsorApproveTimeout).send(); + await collection.methods.setCollectionLimit('ownerCanTransfer', limits.ownerCanTransfer).send(); + await collection.methods.setCollectionLimit('ownerCanDestroy', limits.ownerCanDestroy).send(); + await collection.methods.setCollectionLimit('transfersEnabled', limits.transfersEnabled).send(); + + const data = (await helper.rft.getData(collectionId))!; + expect(data.raw.limits).to.deep.eq(expectedLimits); + expect(await helper.collection.getEffectiveLimits(collectionId)).to.deep.eq(expectedLimits); + })); +}); + +describe('Cannot set invalid collection limits', () => { + let donor: IKeyringPair; + + before(async () => { + await usingEthPlaygrounds(async (_helper, privateKey) => { + donor = await privateKey({filename: __filename}); + }); + }); + + [ + {case: 'nft' as const, method: 'createNFTCollection' as const}, + {case: 'rft' as const, method: 'createRFTCollection' as const}, + {case: 'ft' as const, method: 'createFTCollection' as const}, + ].map(testCase => + itEth(`for ${testCase.case}`, async ({helper}) => { + const invalidLimits = { + accountTokenOwnershipLimit: BigInt(Number.MAX_SAFE_INTEGER), + transfersEnabled: 3, + }; + + const owner = await helper.eth.createAccountWithBalance(donor); + const {collectionAddress} = await helper.eth.createCollecion(testCase.method, owner, 'Limits', 'absolutely anything', 'ISNI', 18); + const collectionEvm = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner); + await expect(collectionEvm.methods + .setCollectionLimit('badLimit', '1') + .call()).to.be.rejectedWith('unknown limit "badLimit"'); + + await expect(collectionEvm.methods + .setCollectionLimit(Object.keys(invalidLimits)[0], invalidLimits.accountTokenOwnershipLimit) + .call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`); + + await expect(collectionEvm.methods + .setCollectionLimit(Object.keys(invalidLimits)[1], invalidLimits.transfersEnabled) + .call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`); + })); +}); + \ No newline at end of file --- a/tests/src/eth/createFTCollection.test.ts +++ b/tests/src/eth/createFTCollection.test.ts @@ -79,56 +79,6 @@ expect(await collection.methods.description().call()).to.deep.equal(description); }); - itEth('Set limits', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionId, collectionAddress} = await helper.eth.createFungibleCollection(owner, 'Limits', DECIMALS, 'absolutely anything', 'INSI'); - const limits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: 0, - ownerCanDestroy: 0, - transfersEnabled: 0, - }; - - const expectedLimits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: false, - ownerCanDestroy: false, - transfersEnabled: false, - }; - - const collection = helper.ethNativeContract.collection(collectionAddress, 'ft', owner); - await collection.methods.setCollectionLimit('accountTokenOwnershipLimit', limits.accountTokenOwnershipLimit).send(); - await collection.methods.setCollectionLimit('sponsoredDataSize', limits.sponsoredDataSize).send(); - await collection.methods.setCollectionLimit('sponsoredDataRateLimit', limits.sponsoredDataRateLimit).send(); - await collection.methods.setCollectionLimit('tokenLimit', limits.tokenLimit).send(); - await collection.methods.setCollectionLimit('sponsorTransferTimeout', limits.sponsorTransferTimeout).send(); - await collection.methods.setCollectionLimit('sponsorApproveTimeout', limits.sponsorApproveTimeout).send(); - await collection.methods.setCollectionLimit('ownerCanTransfer', limits.ownerCanTransfer).send(); - await collection.methods.setCollectionLimit('ownerCanDestroy', limits.ownerCanDestroy).send(); - await collection.methods.setCollectionLimit('transfersEnabled', limits.transfersEnabled).send(); - - const data = (await helper.rft.getData(collectionId))!; - expect(data.raw.limits.accountTokenOwnershipLimit).to.be.eq(expectedLimits.accountTokenOwnershipLimit); - expect(data.raw.limits.sponsoredDataSize).to.be.eq(expectedLimits.sponsoredDataSize); - expect(data.raw.limits.sponsoredDataRateLimit.blocks).to.be.eq(expectedLimits.sponsoredDataRateLimit); - expect(data.raw.limits.tokenLimit).to.be.eq(expectedLimits.tokenLimit); - expect(data.raw.limits.sponsorTransferTimeout).to.be.eq(expectedLimits.sponsorTransferTimeout); - expect(data.raw.limits.sponsorApproveTimeout).to.be.eq(expectedLimits.sponsorApproveTimeout); - expect(data.raw.limits.ownerCanTransfer).to.be.eq(expectedLimits.ownerCanTransfer); - expect(data.raw.limits.ownerCanDestroy).to.be.eq(expectedLimits.ownerCanDestroy); - expect(data.raw.limits.transfersEnabled).to.be.eq(expectedLimits.transfersEnabled); - }); - itEth('Collection address exist', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const collectionAddressForNonexistentCollection = '0x17C4E6453CC49AAAAEACA894E6D9683E00112233'; @@ -274,31 +224,5 @@ .setCollectionLimit('account_token_ownership_limit', '1000') .call()).to.be.rejectedWith(EXPECTED_ERROR); } - }); - - itEth('(!negative test!) Set limits', async ({helper}) => { - - const invalidLimits = { - accountTokenOwnershipLimit: BigInt(Number.MAX_SAFE_INTEGER), - transfersEnabled: 3, - }; - - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionAddress} = await helper.eth.createFungibleCollection(owner, 'Limits', DECIMALS, 'absolutely anything', 'ISNI'); - const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'ft', owner); - await expect(collectionEvm.methods - .setCollectionLimit('badLimit', '1') - .call()).to.be.rejectedWith('unknown limit "badLimit"'); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[0], invalidLimits.accountTokenOwnershipLimit) - .call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[1], invalidLimits.transfersEnabled) - .call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`); - }); - - - + }); }); --- a/tests/src/eth/createNFTCollection.test.ts +++ b/tests/src/eth/createNFTCollection.test.ts @@ -120,56 +120,6 @@ expect(await sponsorCollection.methods.description().call()).to.deep.equal(description); }); - itEth('Set limits', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionId, collectionAddress} = await helper.eth.createNFTCollection(owner, 'Limits', 'absolutely anything', 'FLO'); - const limits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: 0, - ownerCanDestroy: 0, - transfersEnabled: 0, - }; - - const expectedLimits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: false, - ownerCanDestroy: false, - transfersEnabled: false, - }; - - const collection = helper.ethNativeContract.collection(collectionAddress, 'nft', owner); - await collection.methods.setCollectionLimit('accountTokenOwnershipLimit', limits.accountTokenOwnershipLimit).send(); - await collection.methods.setCollectionLimit('sponsoredDataSize', limits.sponsoredDataSize).send(); - await collection.methods.setCollectionLimit('sponsoredDataRateLimit', limits.sponsoredDataRateLimit).send(); - await collection.methods.setCollectionLimit('tokenLimit', limits.tokenLimit).send(); - await collection.methods.setCollectionLimit('sponsorTransferTimeout', limits.sponsorTransferTimeout).send(); - await collection.methods.setCollectionLimit('sponsorApproveTimeout', limits.sponsorApproveTimeout).send(); - await collection.methods.setCollectionLimit('ownerCanTransfer', limits.ownerCanTransfer).send(); - await collection.methods.setCollectionLimit('ownerCanDestroy', limits.ownerCanDestroy).send(); - await collection.methods.setCollectionLimit('transfersEnabled', limits.transfersEnabled).send(); - - const data = (await helper.rft.getData(collectionId))!; - expect(data.raw.limits.accountTokenOwnershipLimit).to.be.eq(expectedLimits.accountTokenOwnershipLimit); - expect(data.raw.limits.sponsoredDataSize).to.be.eq(expectedLimits.sponsoredDataSize); - expect(data.raw.limits.sponsoredDataRateLimit.blocks).to.be.eq(expectedLimits.sponsoredDataRateLimit); - expect(data.raw.limits.tokenLimit).to.be.eq(expectedLimits.tokenLimit); - expect(data.raw.limits.sponsorTransferTimeout).to.be.eq(expectedLimits.sponsorTransferTimeout); - expect(data.raw.limits.sponsorApproveTimeout).to.be.eq(expectedLimits.sponsorApproveTimeout); - expect(data.raw.limits.ownerCanTransfer).to.be.eq(expectedLimits.ownerCanTransfer); - expect(data.raw.limits.ownerCanDestroy).to.be.eq(expectedLimits.ownerCanDestroy); - expect(data.raw.limits.transfersEnabled).to.be.eq(expectedLimits.transfersEnabled); - }); - itEth('Collection address exist', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const collectionAddressForNonexistentCollection = '0x17C4E6453CC49AAAAEACA894E6D9683E00112233'; @@ -285,25 +235,6 @@ .setCollectionLimit('account_token_ownership_limit', '1000') .call()).to.be.rejectedWith(EXPECTED_ERROR); } - }); - - itEth('(!negative test!) Set limits', async ({helper}) => { - const invalidLimits = { - accountTokenOwnershipLimit: BigInt(Number.MAX_SAFE_INTEGER), - transfersEnabled: 3, - }; - - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionAddress} = await helper.eth.createNFTCollection(owner, 'Limits', 'absolutely anything', 'OLF'); - const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'nft', owner); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[0], invalidLimits.accountTokenOwnershipLimit) - .call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[1], invalidLimits.transfersEnabled) - .call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`); }); itEth('destroyCollection', async ({helper}) => { --- a/tests/src/eth/createRFTCollection.test.ts +++ b/tests/src/eth/createRFTCollection.test.ts @@ -152,56 +152,6 @@ expect(data.raw.sponsorship.Confirmed).to.be.equal(evmToAddress(sponsor, Number(ss58Format))); }); - itEth('Set limits', async ({helper}) => { - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionId, collectionAddress} = await helper.eth.createRFTCollection(owner, 'Limits', 'absolutely anything', 'INSI'); - const limits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: 0, - ownerCanDestroy: 0, - transfersEnabled: 0, - }; - - const expectedLimits = { - accountTokenOwnershipLimit: 1000, - sponsoredDataSize: 1024, - sponsoredDataRateLimit: 30, - tokenLimit: 1000000, - sponsorTransferTimeout: 6, - sponsorApproveTimeout: 6, - ownerCanTransfer: false, - ownerCanDestroy: false, - transfersEnabled: false, - }; - - const collection = helper.ethNativeContract.collection(collectionAddress, 'rft', owner); - await collection.methods.setCollectionLimit('accountTokenOwnershipLimit', limits.accountTokenOwnershipLimit).send(); - await collection.methods.setCollectionLimit('sponsoredDataSize', limits.sponsoredDataSize).send(); - await collection.methods.setCollectionLimit('sponsoredDataRateLimit', limits.sponsoredDataRateLimit).send(); - await collection.methods.setCollectionLimit('tokenLimit', limits.tokenLimit).send(); - await collection.methods.setCollectionLimit('sponsorTransferTimeout', limits.sponsorTransferTimeout).send(); - await collection.methods.setCollectionLimit('sponsorApproveTimeout', limits.sponsorApproveTimeout).send(); - await collection.methods.setCollectionLimit('ownerCanTransfer', limits.ownerCanTransfer).send(); - await collection.methods.setCollectionLimit('ownerCanDestroy', limits.ownerCanDestroy).send(); - await collection.methods.setCollectionLimit('transfersEnabled', limits.transfersEnabled).send(); - - const data = (await helper.rft.getData(collectionId))!; - expect(data.raw.limits.accountTokenOwnershipLimit).to.be.eq(expectedLimits.accountTokenOwnershipLimit); - expect(data.raw.limits.sponsoredDataSize).to.be.eq(expectedLimits.sponsoredDataSize); - expect(data.raw.limits.sponsoredDataRateLimit.blocks).to.be.eq(expectedLimits.sponsoredDataRateLimit); - expect(data.raw.limits.tokenLimit).to.be.eq(expectedLimits.tokenLimit); - expect(data.raw.limits.sponsorTransferTimeout).to.be.eq(expectedLimits.sponsorTransferTimeout); - expect(data.raw.limits.sponsorApproveTimeout).to.be.eq(expectedLimits.sponsorApproveTimeout); - expect(data.raw.limits.ownerCanTransfer).to.be.eq(expectedLimits.ownerCanTransfer); - expect(data.raw.limits.ownerCanDestroy).to.be.eq(expectedLimits.ownerCanDestroy); - expect(data.raw.limits.transfersEnabled).to.be.eq(expectedLimits.transfersEnabled); - }); - itEth('Collection address exist', async ({helper}) => { const owner = await helper.eth.createAccountWithBalance(donor); const collectionAddressForNonexistentCollection = '0x17C4E6453CC49AAAAEACA894E6D9683E00112233'; @@ -317,25 +267,6 @@ .setCollectionLimit('account_token_ownership_limit', '1000') .call()).to.be.rejectedWith(EXPECTED_ERROR); } - }); - - itEth('(!negative test!) Set limits', async ({helper}) => { - const invalidLimits = { - accountTokenOwnershipLimit: BigInt(Number.MAX_SAFE_INTEGER), - transfersEnabled: 3, - }; - - const owner = await helper.eth.createAccountWithBalance(donor); - const {collectionAddress} = await helper.eth.createRFTCollection(owner, 'Limits', 'absolutely anything', 'ISNI'); - const collectionEvm = helper.ethNativeContract.collection(collectionAddress, 'rft', owner); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[0], invalidLimits.accountTokenOwnershipLimit) - .call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`); - - await expect(collectionEvm.methods - .setCollectionLimit(Object.keys(invalidLimits)[1], invalidLimits.transfersEnabled) - .call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`); }); itEth('destroyCollection', async ({helper}) => { -- gitstuff