git.delta.rocks / unique-network / refs/commits / d855cf844d12

difftreelog

NFTPAR-142: Off-chain and on-chain data schema. Fixed tests. Added negative set variable metadata test for out of limits data.

sotmorskiy2020-12-03parent: #7ff8498.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
321 /// Unexpected collection type.321 /// Unexpected collection type.
322 UnexpectedCollectionType,322 UnexpectedCollectionType,
323 /// Can't store metadata in fungible tokens.323 /// Can't store metadata in fungible tokens.
324 CantSotreMetadataInFungibleTokens324 CantStoreMetadataInFungibleTokens
325 }325 }
326}326}
327327
1194 1194
1195 Self::collection_exists(collection_id)?;1195 Self::collection_exists(collection_id)?;
1196
1197 ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);
11961198
1197 // Modify permissions check1199 // Modify permissions check
1198 let target_collection = <Collection<T>>::get(collection_id);1200 let target_collection = <Collection<T>>::get(collection_id);
1206 {1208 {
1207 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,1209 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,
1208 CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,1210 CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,
1209 CollectionMode::Fungible(_) => fail!(Error::<T>::CantSotreMetadataInFungibleTokens),1211 CollectionMode::Fungible(_) => fail!(Error::<T>::CantStoreMetadataInFungibleTokens),
1210 _ => fail!(Error::<T>::UnexpectedCollectionType)1212 _ => fail!(Error::<T>::UnexpectedCollectionType)
1211 };1213 };
12121214
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -1725,7 +1725,7 @@
             collection_id,
             1,
             too_big_const_data
-        ), "const_data exceeded data limit.");
+        ), Error::<Test>::TokenConstDataLimitExceeded);
     });
 }
 
@@ -1756,7 +1756,7 @@
             collection_id,
             1,
             too_big_const_data
-        ), "variable_data exceeded data limit.");
+        ), Error::<Test>::TokenVariableDataLimitExceeded);
     });
 }
 
@@ -1787,7 +1787,7 @@
             collection_id,
             1,
             too_big_const_data
-        ), "const_data exceeded data limit.");
+        ), Error::<Test>::TokenConstDataLimitExceeded);
     });
 }
 
@@ -1818,7 +1818,7 @@
             collection_id,
             1,
             too_big_const_data
-        ), "variable_data exceeded data limit.");
+        ), Error::<Test>::TokenVariableDataLimitExceeded);
     });
 }
 // #endregion
@@ -1905,6 +1905,57 @@
         create_test_item(1, &data.into());
 
         let variable_data = b"test set_variable_meta_data method.".to_vec();
-        assert_noop!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()), "Can't store metadata in fungible tokens.");
+        assert_noop!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()), Error::<Test>::CantStoreMetadataInFungibleTokens);
     });
-}
\ No newline at end of file
+}
+
+#[test]
+fn set_variable_meta_data_on_nft_token_fails_for_big_data() {
+    new_test_ext().execute_with(|| {
+        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
+            collection_numbers_limit: default_collection_numbers_limit(),
+            account_token_ownership_limit: 10,
+            collections_admins_limit: 5,
+            custom_data_limit: 10,
+            nft_sponsor_transfer_timeout: 15,
+            fungible_sponsor_transfer_timeout: 15,
+            refungible_sponsor_transfer_timeout: 15,          
+        }));
+
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
+        let origin1 = Origin::signed(1);
+
+        let data = default_nft_data();
+        create_test_item(1, &data.into());
+
+        let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();
+        assert_noop!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data), Error::<Test>::TokenVariableDataLimitExceeded);
+    });
+}
+
+#[test]
+fn set_variable_meta_data_on_re_fungible_token_fails_for_big_data() {
+    new_test_ext().execute_with(|| {
+        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
+            collection_numbers_limit: default_collection_numbers_limit(),
+            account_token_ownership_limit: 10,
+            collections_admins_limit: 5,
+            custom_data_limit: 10,
+            nft_sponsor_transfer_timeout: 15,
+            fungible_sponsor_transfer_timeout: 15,
+            refungible_sponsor_transfer_timeout: 15,          
+        }));
+
+
+        let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);
+
+        let origin1 = Origin::signed(1);
+
+        let data = default_re_fungible_data();
+        create_test_item(1, &data.into());
+
+        let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();
+        assert_noop!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data), Error::<Test>::TokenVariableDataLimitExceeded);
+    });
+}