From 50f8d1b0c87ecd0ab47a8fcd86eb7156a2bbf3b7 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 30 Jun 2022 21:13:54 +0000 Subject: [PATCH] test: manage properties of a nested token --- --- a/tests/src/nesting/properties.test.ts +++ b/tests/src/nesting/properties.test.ts @@ -3,11 +3,13 @@ import { addCollectionAdminExpectSuccess, createCollectionExpectSuccess, + setCollectionPermissionsExpectSuccess, createItemExpectSuccess, getCreateCollectionResult, transferExpectSuccess, } from '../util/helpers'; import {IKeyringPair} from '@polkadot/types/types'; +import { tokenIdToAddress } from '../eth/util/helpers'; let alice: IKeyringPair; let bob: IKeyringPair; @@ -522,6 +524,7 @@ describe('Integration Test: Token Properties', () => { let collection: number; let token: number; + let nestedToken: number; let permissions: {permission: any, signers: IKeyringPair[]}[]; before(async () => { @@ -544,7 +547,11 @@ beforeEach(async () => { await usingApi(async () => { collection = await createCollectionExpectSuccess(); + await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true}}); + token = await createItemExpectSuccess(alice, collection, 'NFT'); + nestedToken = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, token)}); + await addCollectionAdminExpectSuccess(alice, collection, bob.address); await transferExpectSuccess(collection, token, alice, charlie); }); @@ -681,6 +688,124 @@ expect((await api.query.nonfungible.tokenProperties(collection, token)).toJSON().consumedSpace).to.be.equal(0); }); }); + + it('Assigns properties to a nested token according to permissions', async () => { + await usingApi(async api => { + const propertyKeys: string[] = []; + let i = 0; + for (const permission of permissions) { + for (const signer of permission.signers) { + const key = i + '_' + signer.address; + propertyKeys.push(key); + + await expect(executeTransaction( + api, + alice, + api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), + ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected; + + await expect(executeTransaction( + api, + signer, + api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), + ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected; + } + + i++; + } + + const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toHuman() as any[]; + const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toHuman().properties as any[]; + for (let i = 0; i < properties.length; i++) { + expect(properties[i].value).to.be.equal('Serotonin increase'); + expect(tokensData[i].value).to.be.equal('Serotonin increase'); + } + }); + }); + + it('Changes properties of a nested token according to permissions', async () => { + await usingApi(async api => { + const propertyKeys: string[] = []; + let i = 0; + for (const permission of permissions) { + if (!permission.permission.mutable) continue; + + for (const signer of permission.signers) { + const key = i + '_' + signer.address; + propertyKeys.push(key); + + await expect(executeTransaction( + api, + alice, + api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), + ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected; + + await expect(executeTransaction( + api, + signer, + api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), + ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected; + + await expect(executeTransaction( + api, + signer, + api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin stable'}]), + ), `on changing property ${i} by ${signer.address}`).to.not.be.rejected; + } + + i++; + } + + const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toHuman() as any[]; + const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toHuman().properties as any[]; + for (let i = 0; i < properties.length; i++) { + expect(properties[i].value).to.be.equal('Serotonin stable'); + expect(tokensData[i].value).to.be.equal('Serotonin stable'); + } + }); + }); + + it('Deletes properties of a nested token according to permissions', async () => { + await usingApi(async api => { + const propertyKeys: string[] = []; + let i = 0; + + for (const permission of permissions) { + if (!permission.permission.mutable) continue; + + for (const signer of permission.signers) { + const key = i + '_' + signer.address; + propertyKeys.push(key); + + await expect(executeTransaction( + api, + alice, + api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), + ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected; + + await expect(executeTransaction( + api, + signer, + api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), + ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected; + + await expect(executeTransaction( + api, + signer, + api.tx.unique.deleteTokenProperties(collection, nestedToken, [key]), + ), `on deleting property ${i} by ${signer.address}`).to.not.be.rejected; + } + + i++; + } + + const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toJSON() as any[]; + expect(properties).to.be.empty; + const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toJSON().properties as any[]; + expect(tokensData).to.be.empty; + expect((await api.query.nonfungible.tokenProperties(collection, nestedToken)).toJSON().consumedSpace).to.be.equal(0); + }); + }); }); describe('Negative Integration Test: Token Properties', () => { @@ -848,4 +973,4 @@ expect(propertiesMap.consumedSpace).to.be.equal(originalSpace); }); }); -}); \ No newline at end of file +}); -- gitstuff