From 95647a05a5ab8129216ffb33e3b0ff52d47c0c23 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 15 Dec 2022 10:34:10 +0000 Subject: [PATCH] test: modifying a property with different sizes --- --- a/tests/src/nesting/collectionProperties.test.ts +++ b/tests/src/nesting/collectionProperties.test.ts @@ -25,7 +25,7 @@ before(async () => { await usingPlaygrounds(async (helper, privateKey) => { const donor = await privateKey({filename: __filename}); - [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor); + [alice, bob] = await helper.arrange.createAccounts([200n, 10n], donor); }); }); @@ -138,7 +138,7 @@ {mode: 'nft' as const, requiredPallets: []}, {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]}, ].map(testCase => - itSub.ifWithPallets(`Allows modifying a collection property multiple times (${testCase.mode})`, testCase.requiredPallets, async({helper}) => { + itSub.ifWithPallets(`Allows modifying a collection property multiple times with the same size (${testCase.mode})`, testCase.requiredPallets, async({helper}) => { const propKey = 'tok-prop'; const collection = await helper[testCase.mode].mintCollection(alice); @@ -191,6 +191,45 @@ consumedSpace = await collection.getPropertiesConsumedSpace(); expect(consumedSpace).to.be.equal(originalSpace); })); + + [ + // TODO enable properties for FT collection in Substrate (release 040) + // {mode: 'ft' as const, requiredPallets: []}, + {mode: 'nft' as const, requiredPallets: []}, + {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]}, + ].map(testCase => + itSub.ifWithPallets(`Modifying a collection property with different size correctly changes the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => { + const propKey = 'tok-prop'; + + const collection = await helper[testCase.mode].mintCollection(alice); + const originalSpace = await collection.getPropertiesConsumedSpace(); + + const initPropDataSize = 4096; + const biggerPropDataSize = 5000; + const smallerPropDataSize = 4000; + + const initPropData = 'a'.repeat(initPropDataSize); + const biggerPropData = 'b'.repeat(biggerPropDataSize); + const smallerPropData = 'b'.repeat(smallerPropDataSize); + + let consumedSpace; + let expectedConsumedSpaceDiff; + + await collection.setProperties(alice, [{key: propKey, value: initPropData}]); + consumedSpace = await collection.getPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = initPropDataSize - originalSpace; + expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff); + + await collection.setProperties(alice, [{key: propKey, value: biggerPropData}]); + consumedSpace = await collection.getPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize; + expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff); + + await collection.setProperties(alice, [{key: propKey, value: smallerPropData}]); + consumedSpace = await collection.getPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize; + expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff); + })); }); describe('Negative Integration Test: Collection Properties', () => { --- a/tests/src/nesting/tokenProperties.test.ts +++ b/tests/src/nesting/tokenProperties.test.ts @@ -434,6 +434,55 @@ const recomputedSpace = await token.getTokenPropertiesConsumedSpace(); expect(recomputedSpace).to.be.equal(originalSpace); })); + + [ + {mode: 'nft' as const, pieces: undefined, requiredPallets: []}, + {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]}, + ].map(testCase => + itSub.ifWithPallets(`Modifying a token property with different size correctly changes the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => { + const propKey = 'tok-prop'; + + const collection = await helper[testCase.mode].mintCollection(alice, { + tokenPropertyPermissions: [ + { + key: propKey, + permission: {mutable: true, tokenOwner: true}, + }, + ], + }); + const token = await ( + testCase.pieces + ? collection.mintToken(alice, testCase.pieces) + : collection.mintToken(alice) + ); + const originalSpace = await token.getTokenPropertiesConsumedSpace(); + + const initPropDataSize = 4096; + const biggerPropDataSize = 5000; + const smallerPropDataSize = 4000; + + const initPropData = 'a'.repeat(initPropDataSize); + const biggerPropData = 'b'.repeat(biggerPropDataSize); + const smallerPropData = 'b'.repeat(smallerPropDataSize); + + let consumedSpace; + let expectedConsumedSpaceDiff; + + await token.setProperties(alice, [{key: propKey, value: initPropData}]); + consumedSpace = await token.getTokenPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = initPropDataSize - originalSpace; + expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff); + + await token.setProperties(alice, [{key: propKey, value: biggerPropData}]); + consumedSpace = await token.getTokenPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize; + expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff); + + await token.setProperties(alice, [{key: propKey, value: smallerPropData}]); + consumedSpace = await token.getTokenPropertiesConsumedSpace(); + expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize; + expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff); + })); }); describe('Negative Integration Test: Token Properties', () => { -- gitstuff