difftreelog
Token properties reconfiguration tests
in: master
1 file changed
tests/src/eth/tokenProperties.test.tsdiffbeforeafterboth37 {mode: 'nft' as const, requiredPallets: []},37 {mode: 'nft' as const, requiredPallets: []},38 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},38 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},39 ].map(testCase =>39 ].map(testCase =>40 itEth.ifWithPallets(`[${testCase.mode}] Set and get token property permissions`, testCase.requiredPallets, async({helper}) => {40 itEth.ifWithPallets(`[${testCase.mode}] Can set all possible token property permissions`, testCase.requiredPallets, async({helper}) => {41 const owner = await helper.eth.createAccountWithBalance(donor);41 const owner = await helper.eth.createAccountWithBalance(donor);42 const caller = await helper.ethCrossAccount.createAccountWithBalance(donor);42 const caller = await helper.ethCrossAccount.createAccountWithBalance(donor);43 for(const [mutable,collectionAdmin, tokenOwner] of cartesian([], [false, true], [false, true], [false, true])) {43 for(const [mutable,collectionAdmin, tokenOwner] of cartesian([], [false, true], [false, true], [false, true])) {72 {mode: 'nft' as const, requiredPallets: []},72 {mode: 'nft' as const, requiredPallets: []},73 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},73 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},74 ].map(testCase =>74 ].map(testCase =>75 itEth.ifWithPallets(`[${testCase.mode}] Set and get multiple token property permissions as owner`, testCase.requiredPallets, async({helper}) => {75 itEth.ifWithPallets(`[${testCase.mode}] Can set multiple token property permissions as owner`, testCase.requiredPallets, async({helper}) => {76 const owner = await helper.eth.createAccountWithBalance(donor);76 const owner = await helper.eth.createAccountWithBalance(donor);77 77 78 const {collectionId, collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');78 const {collectionId, collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');79 const collection = await helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);79 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);808081 await collection.methods.setTokenPropertyPermissions([81 await collection.methods.setTokenPropertyPermissions([82 ['testKey_0', [82 ['testKey_0', [135 {mode: 'nft' as const, requiredPallets: []},134 {mode: 'nft' as const, requiredPallets: []},136 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},135 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},137 ].map(testCase =>136 ].map(testCase =>138 itEth.ifWithPallets(`[${testCase.mode}] Set and get multiple token property permissions as admin`, testCase.requiredPallets, async({helper}) => {137 itEth.ifWithPallets(`[${testCase.mode}] Can set multiple token property permissions as admin`, testCase.requiredPallets, async({helper}) => {139 const owner = await helper.eth.createAccountWithBalance(donor);138 const owner = await helper.eth.createAccountWithBalance(donor);140 const caller = await helper.ethCrossAccount.createAccountWithBalance(donor);139 const caller = await helper.ethCrossAccount.createAccountWithBalance(donor);141 140 142 const {collectionId, collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');141 const {collectionId, collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');143 const collection = await helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);142 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);144 await collection.methods.addCollectionAdminCross(caller).send({from: owner});143 await collection.methods.addCollectionAdminCross(caller).send({from: owner});145144146 await collection.methods.setTokenPropertyPermissions([145 await collection.methods.setTokenPropertyPermissions([452 {mode: 'nft' as const, requiredPallets: []},451 {mode: 'nft' as const, requiredPallets: []},453 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},452 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},454 ].map(testCase =>453 ].map(testCase =>455 itEth.ifWithPallets(`[${testCase.mode}] Cant set token property permissions as non owner or admin`, testCase.requiredPallets, async({helper}) => {454 itEth.ifWithPallets(`[${testCase.mode}] Cannot set token property permissions as non owner or admin`, testCase.requiredPallets, async({helper}) => {456 const owner = await helper.eth.createAccountWithBalance(donor);455 const owner = await helper.eth.createAccountWithBalance(donor);457 const caller = await helper.eth.createAccountWithBalance(donor);456 const caller = await helper.eth.createAccountWithBalance(donor);458 457 459 const {collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');458 const {collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');460 const collection = await helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);459 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);461 460 462 await expect(collection.methods.setTokenPropertyPermissions([461 await expect(collection.methods.setTokenPropertyPermissions([463 ['testKey_0', [462 ['testKey_0', [472 {mode: 'nft' as const, requiredPallets: []},471 {mode: 'nft' as const, requiredPallets: []},473 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},472 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},474 ].map(testCase =>473 ].map(testCase =>475 itEth.ifWithPallets(`[${testCase.mode}] Cant set token property permissions with invalid character`, testCase.requiredPallets, async({helper}) => {474 itEth.ifWithPallets(`[${testCase.mode}] Cannot set token property permissions with invalid character`, testCase.requiredPallets, async({helper}) => {476 const owner = await helper.eth.createAccountWithBalance(donor);475 const owner = await helper.eth.createAccountWithBalance(donor);477 476 478 const {collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');477 const {collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');479 const collection = await helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);478 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);480 479 481 await expect(collection.methods.setTokenPropertyPermissions([480 await expect(collection.methods.setTokenPropertyPermissions([482 // "Space" is invalid character481 // "Space" is invalid character488 ]).call({from: owner})).to.be.rejectedWith('InvalidCharacterInPropertyKey'); 487 ]).call({from: owner})).to.be.rejectedWith('InvalidCharacterInPropertyKey'); 489 }));488 }));490 489490 [491 {mode: 'nft' as const, requiredPallets: []},492 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},493 ].map(testCase =>494 itEth.ifWithPallets(`[${testCase.mode}] Can reconfigure token property permissions to stricter ones`, testCase.requiredPallets, async({helper}) => {495 const owner = await helper.eth.createAccountWithBalance(donor);496 497 const {collectionAddress, collectionId} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');498 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);499 500 // 1. Owner sets strict property-permissions:501 await collection.methods.setTokenPropertyPermissions([502 ['testKey', [503 [EthTokenPermissions.Mutable, true], 504 [EthTokenPermissions.TokenOwner, true], 505 [EthTokenPermissions.CollectionAdmin, true]],506 ],507 ]).send({from: owner});508 509 // 2. Owner can set stricter property-permissions:510 for(const values of [[true, true, false], [true, false, false], [false, false, false]]) {511 await collection.methods.setTokenPropertyPermissions([512 ['testKey', [513 [EthTokenPermissions.Mutable, values[0]], 514 [EthTokenPermissions.TokenOwner, values[1]], 515 [EthTokenPermissions.CollectionAdmin, values[2]]],516 ],517 ]).send({from: owner});518 }519520 expect(await helper[testCase.mode].getPropertyPermissions(collectionId)).to.be.deep.equal([{521 key: 'testKey',522 permission: {mutable: false, collectionAdmin: false, tokenOwner: false},523 }]);524 }));525526 [527 {mode: 'nft' as const, requiredPallets: []},528 {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},529 ].map(testCase =>530 itEth.ifWithPallets(`[${testCase.mode}] Cannot reconfigure token property permissions to less strict ones`, testCase.requiredPallets, async({helper}) => {531 const owner = await helper.eth.createAccountWithBalance(donor);532 533 const {collectionAddress} = await helper.eth.createCollection(testCase.mode, owner, 'A', 'B', 'C');534 const collection = helper.ethNativeContract.collection(collectionAddress, testCase.mode, owner);535 536 // 1. Owner sets strict property-permissions:537 await collection.methods.setTokenPropertyPermissions([538 ['testKey', [539 [EthTokenPermissions.Mutable, false], 540 [EthTokenPermissions.TokenOwner, false], 541 [EthTokenPermissions.CollectionAdmin, false]],542 ],543 ]).send({from: owner});544545 // 2. Owner cannot set less strict property-permissions:546 for(const values of [[true, false, false], [false, true, false], [false, false, true]]) {547 await expect(collection.methods.setTokenPropertyPermissions([548 ['testKey', [549 [EthTokenPermissions.Mutable, values[0]], 550 [EthTokenPermissions.TokenOwner, values[1]], 551 [EthTokenPermissions.CollectionAdmin, values[2]]],552 ],553 ]).call({from: owner})).to.be.rejectedWith('NoPermission');554 }555 }));491});556});492557493558