git.delta.rocks / unique-network / refs/commits / 9cdbe6a7b905

difftreelog

Set metadata check fix. Some tests added

str-mv2021-09-05parent: #81e625c.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
1520 Error::<T>::TokenVariableDataLimitExceeded1520 Error::<T>::TokenVariableDataLimitExceeded
1521 );1521 );
15221522
1523 // Modify permissions check
1524 ensure!(1523 ensure!(
1525 Self::is_item_owner(sender, collection, item_id)?1524 (Self::is_item_owner(sender, collection, item_id)?
1525 && collection.meta_update_permission == MetaUpdatePermission::ItemOwner)
1526 || Self::is_owner_or_admin_permissions(collection, sender)?,1526 || (Self::is_owner_or_admin_permissions(collection, sender)?
1527 && collection.meta_update_permission == MetaUpdatePermission::Admin),
1527 Error::<T>::NoPermission1528 Error::<T>::NoPermission
1528 );1529 );
15291530
modifiedtests/src/metadataUpdate.test.tsdiffbeforeafterboth
--- a/tests/src/metadataUpdate.test.ts
+++ b/tests/src/metadataUpdate.test.ts
@@ -11,6 +11,8 @@
 import {
   createItemExpectSuccess,
   createCollectionExpectSuccess,
+  enablePublicMintingExpectSuccess,
+  enableWhiteListExpectSuccess,
   setMetadataUpdatePermissionFlagExpectSuccess,
   setVariableMetaDataExpectSuccess,
   setMintPermissionExpectSuccess,
@@ -22,8 +24,8 @@
 
 chai.use(chaiAsPromised);
 
-describe('Metadata update permissions ', () => {
-  it('Set variable metadata with ItemOwner permission flag', async () => {
+describe('Metadata update permissions with ItemOwner flag', () => {
+  it('ItemOwner can set variable metadata with ItemOwner permission flag', async () => {
     await usingApi(async () => {
       const Alice = privateKey('//Alice');
 
@@ -38,7 +40,7 @@
     });
   });
 
-  it('User can\'n set variable metadata with ItemOwner permission flag', async () => {
+  it('Admin can\'n set variable metadata with ItemOwner permission flag', async () => {
     await usingApi(async () => {
       const Alice = privateKey('//Alice');
       const Bob = privateKey('//Bob');
@@ -58,6 +60,25 @@
     });
   });
 
+  it('User can\'n set variable metadata with ItemOwner permission flag', async () => {
+    await usingApi(async () => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+  
+      const data = [1, 2, 254, 255];
+  
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');
+
+      await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);  
+      await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+    });
+  });
+});
+
+describe('Metadata update permissions with Admin flag', () => {
   it('Admin can set variable metadata with Admin permission flag', async () => {
     await usingApi(async () => {
       const Alice = privateKey('//Alice');
@@ -78,17 +99,94 @@
     });
   });
 
-  it('Nobody can set variable metadata with None flag', async () => {
+  it('User can\'n can set variable metadata with Admin permission flag', async () => {
     await usingApi(async () => {
       const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
   
       const data = [1, 2, 254, 255];
   
       // nft
       const nftCollectionId = await createCollectionExpectSuccess();
       const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');
+
+      await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
+      await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
+      await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
+  
+      await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);
+    });
+  });
+
+  it('ItemOwner can\'n can set variable metadata with Admin permission flag', async () => {
+    await usingApi(async () => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+  
+      const data = [1, 2, 254, 255];
+  
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      await enablePublicMintingExpectSuccess(Alice, nftCollectionId);
+      await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
+      await enableWhiteListExpectSuccess(Alice, nftCollectionId);
+      const newNftTokenId = await createItemExpectSuccess(Bob, nftCollectionId, 'NFT');
+      await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');
+  
+      await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+    });
+  });
+});
+
+describe('Metadata update permissions with None flag', () => {
+  it('Nobody can set variable metadata with None flag (Regular)', async () => {
+    await usingApi(async () => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+  
+      const data = [1, 2, 254, 255];
+  
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
+  
+      await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+    });
+  });
+
+  it('Nobody can set variable metadata with None flag (Admin)', async () => {
+    await usingApi(async () => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+  
+      const data = [1, 2, 254, 255];
+  
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
       await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
   
+      await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);
+      await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);
+      await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
+  
+      await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);
+    });
+  });
+
+  it('Nobody can set variable metadata with None flag (ItemOwner)', async () => {
+    await usingApi(async () => {
+      const Alice = privateKey('//Alice');
+  
+      const data = [1, 2, 254, 255];
+  
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
+  
       await setVariableMetaDataExpectFailure(Alice, nftCollectionId, newNftTokenId, data);
     });
   });
@@ -100,8 +198,7 @@
       // nft
       const nftCollectionId = await createCollectionExpectSuccess();
       await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');
-      await setMetadataUpdatePermissionFlagExpectFailure(Alice, nftCollectionId, 'Admin');
-        
+      await setMetadataUpdatePermissionFlagExpectFailure(Alice, nftCollectionId, 'Admin');       
     });
   });
 });