difftreelog
Set metadata check fix. Some tests added
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth1520 Error::<T>::TokenVariableDataLimitExceeded1520 Error::<T>::TokenVariableDataLimitExceeded1521 );1521 );152215221523 // Modify permissions check1524 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>::NoPermission1528 );1529 );15291530tests/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');
});
});
});