difftreelog
Set metadata check fix. Some tests added
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -1520,10 +1520,11 @@
Error::<T>::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::<T>::NoPermission
);
tests/src/metadataUpdate.test.tsdiffbeforeafterboth11import {11import {12 createItemExpectSuccess,12 createItemExpectSuccess,13 createCollectionExpectSuccess,13 createCollectionExpectSuccess,14 enablePublicMintingExpectSuccess,15 enableWhiteListExpectSuccess,14 setMetadataUpdatePermissionFlagExpectSuccess,16 setMetadataUpdatePermissionFlagExpectSuccess,15 setVariableMetaDataExpectSuccess,17 setVariableMetaDataExpectSuccess,16 setMintPermissionExpectSuccess,18 setMintPermissionExpectSuccess,222423chai.use(chaiAsPromised);25chai.use(chaiAsPromised);2627describe('Metadata update permissions with ItemOwner flag', () => {28 it('ItemOwner can set variable metadata with ItemOwner permission flag', async () => {29 await usingApi(async () => {30 const Alice = privateKey('//Alice');3132 const data = [1, 2, 254, 255];3334 // nft35 const nftCollectionId = await createCollectionExpectSuccess();36 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');37 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');3839 await setVariableMetaDataExpectSuccess(Alice, nftCollectionId, newNftTokenId, data);40 });41 });4243 it('Admin can\'n set variable metadata with ItemOwner permission flag', async () => {44 await usingApi(async () => {45 const Alice = privateKey('//Alice');46 const Bob = privateKey('//Bob');47 48 const data = [1, 2, 254, 255];49 50 // nft51 const nftCollectionId = await createCollectionExpectSuccess();52 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');53 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');5455 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);56 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);57 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);58 59 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);60 });61 });6263 it('User can\'n set variable metadata with ItemOwner permission flag', async () => {64 await usingApi(async () => {65 const Alice = privateKey('//Alice');66 const Bob = privateKey('//Bob');67 68 const data = [1, 2, 254, 255];69 70 // nft71 const nftCollectionId = await createCollectionExpectSuccess();72 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');73 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');7475 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true); 76 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);77 });78 });79});8081describe('Metadata update permissions with Admin flag', () => {82 it('Admin can set variable metadata with Admin permission flag', async () => {83 await usingApi(async () => {84 const Alice = privateKey('//Alice');85 const Bob = privateKey('//Bob');86 87 const data = [1, 2, 254, 255];88 89 // nft90 const nftCollectionId = await createCollectionExpectSuccess();91 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');92 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');9394 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);95 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);96 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);97 98 await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);99 });100 });101102 it('User can\'n can set variable metadata with Admin permission flag', async () => {103 await usingApi(async () => {104 const Alice = privateKey('//Alice');105 const Bob = privateKey('//Bob');106 107 const data = [1, 2, 254, 255];108 109 // nft110 const nftCollectionId = await createCollectionExpectSuccess();111 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');112 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');113114 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);115 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);116 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);117 118 await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);119 });120 });121122 it('ItemOwner can\'n can set variable metadata with Admin permission flag', async () => {123 await usingApi(async () => {124 const Alice = privateKey('//Alice');125 const Bob = privateKey('//Bob');126 127 const data = [1, 2, 254, 255];128 129 // nft130 const nftCollectionId = await createCollectionExpectSuccess();131 await enablePublicMintingExpectSuccess(Alice, nftCollectionId);132 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);133 await enableWhiteListExpectSuccess(Alice, nftCollectionId);134 const newNftTokenId = await createItemExpectSuccess(Bob, nftCollectionId, 'NFT');135 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');136 137 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);138 });139 });140});2414125describe('Metadata update permissions ', () => {142describe('Metadata update permissions with None flag', () => {26 it('Set variable metadata with ItemOwner permission flag', async () => {27 await usingApi(async () => {28 const Alice = privateKey('//Alice');2930 const data = [1, 2, 254, 255];3132 // nft33 const nftCollectionId = await createCollectionExpectSuccess();34 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');35 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');3637 await setVariableMetaDataExpectSuccess(Alice, nftCollectionId, newNftTokenId, data);38 });39 });4041 it('User can\'n set variable metadata with ItemOwner permission flag', async () => {143 it('Nobody can set variable metadata with None flag (Regular)', async () => {42 await usingApi(async () => {144 await usingApi(async () => {43 const Alice = privateKey('//Alice');145 const Alice = privateKey('//Alice');44 const Bob = privateKey('//Bob');146 const Bob = privateKey('//Bob');48 // nft150 // nft49 const nftCollectionId = await createCollectionExpectSuccess();151 const nftCollectionId = await createCollectionExpectSuccess();50 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');152 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');51 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');153 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');52154 53 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);54 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);55 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);56 57 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);155 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);58 });156 });59 });157 });6015861 it('Admin can set variable metadata with Admin permission flag', async () => {159 it('Nobody can set variable metadata with None flag (Admin)', async () => {62 await usingApi(async () => {160 await usingApi(async () => {63 const Alice = privateKey('//Alice');161 const Alice = privateKey('//Alice');64 const Bob = privateKey('//Bob');162 const Bob = privateKey('//Bob');68 // nft166 // nft69 const nftCollectionId = await createCollectionExpectSuccess();167 const nftCollectionId = await createCollectionExpectSuccess();70 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');168 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');71 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');169 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');72170 73 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);171 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);74 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);172 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);75 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);173 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);76 174 77 await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);175 await setVariableMetaDataExpectFailure(Bob, nftCollectionId, newNftTokenId, data);78 });176 });79 });177 });8017881 it('Nobody can set variable metadata with None flag', async () => {179 it('Nobody can set variable metadata with None flag (ItemOwner)', async () => {82 await usingApi(async () => {180 await usingApi(async () => {83 const Alice = privateKey('//Alice');181 const Alice = privateKey('//Alice');84 182