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

difftreelog

Token properties reconfiguration tests

Max Andreev2022-12-20parent: #17e188a.patch.diff
in: master

1 file changed

modifiedtests/src/eth/tokenProperties.test.tsdiffbeforeafterboth
37 {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);
8080
81 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});
145144
146 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 character
488 ]).call({from: owner})).to.be.rejectedWith('InvalidCharacterInPropertyKey'); 487 ]).call({from: owner})).to.be.rejectedWith('InvalidCharacterInPropertyKey');
489 }));488 }));
490 489
490 [
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 }
519
520 expect(await helper[testCase.mode].getPropertyPermissions(collectionId)).to.be.deep.equal([{
521 key: 'testKey',
522 permission: {mutable: false, collectionAdmin: false, tokenOwner: false},
523 }]);
524 }));
525
526 [
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});
544
545 // 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});
492557
493558