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.tsdiffbeforeafterboth12//3// This file is subject to the terms and conditions defined in4// file 'LICENSE', which is part of this source code package.5//67import chai from 'chai';8import chaiAsPromised from 'chai-as-promised';9import privateKey from './substrate/privateKey';10import usingApi from './substrate/substrate-api';11import {12 createItemExpectSuccess,13 createCollectionExpectSuccess,14 setMetadataUpdatePermissionFlagExpectSuccess,15 setVariableMetaDataExpectSuccess,16 setMintPermissionExpectSuccess,17 addToWhiteListExpectSuccess,18 addCollectionAdminExpectSuccess,19 setVariableMetaDataExpectFailure,20 setMetadataUpdatePermissionFlagExpectFailure,21} from './util/helpers';2223chai.use(chaiAsPromised);2425describe('Metadata update permissions ', () => {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 () => {42 await usingApi(async () => {43 const Alice = privateKey('//Alice');44 const Bob = privateKey('//Bob');45 46 const data = [1, 2, 254, 255];47 48 // nft49 const nftCollectionId = await createCollectionExpectSuccess();50 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');51 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'ItemOwner');5253 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);58 });59 });6061 it('Admin can set variable metadata with Admin permission flag', async () => {62 await usingApi(async () => {63 const Alice = privateKey('//Alice');64 const Bob = privateKey('//Bob');65 66 const data = [1, 2, 254, 255];67 68 // nft69 const nftCollectionId = await createCollectionExpectSuccess();70 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');71 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'Admin');7273 await setMintPermissionExpectSuccess(Alice, nftCollectionId, true);74 await addToWhiteListExpectSuccess(Alice, nftCollectionId, Bob.address);75 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);76 77 await setVariableMetaDataExpectSuccess(Bob, nftCollectionId, newNftTokenId, data);78 });79 });8081 it('Nobody can set variable metadata with None flag', async () => {82 await usingApi(async () => {83 const Alice = privateKey('//Alice');84 85 const data = [1, 2, 254, 255];86 87 // nft88 const nftCollectionId = await createCollectionExpectSuccess();89 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');90 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');91 92 await setVariableMetaDataExpectFailure(Alice, nftCollectionId, newNftTokenId, data);93 });94 });9596 it('Nobody can set variable metadata flag after freeze', async () => {97 await usingApi(async () => {98 const Alice = privateKey('//Alice');99 100 // nft101 const nftCollectionId = await createCollectionExpectSuccess();102 await setMetadataUpdatePermissionFlagExpectSuccess(Alice, nftCollectionId, 'None');103 await setMetadataUpdatePermissionFlagExpectFailure(Alice, nftCollectionId, 'Admin');104 105 });106 });107});