From 9cdbe6a7b905222a464066d3de6194fce92266b0 Mon Sep 17 00:00:00 2001 From: str-mv Date: Sun, 05 Sep 2021 12:49:42 +0000 Subject: [PATCH] Set metadata check fix. Some tests added --- --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1520,10 +1520,11 @@ Error::::TokenVariableDataLimitExceeded ); - // Modify permissions check ensure!( - Self::is_item_owner(sender, collection, item_id)? - || Self::is_owner_or_admin_permissions(collection, sender)?, + (Self::is_item_owner(sender, collection, item_id)? + && collection.meta_update_permission == MetaUpdatePermission::ItemOwner) + || (Self::is_owner_or_admin_permissions(collection, sender)? + && collection.meta_update_permission == MetaUpdatePermission::Admin), Error::::NoPermission ); --- 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'); }); }); }); -- gitstuff