git.delta.rocks / unique-network / refs/commits / 9774e7914a1b

difftreelog

NFTPAR-142 Off-chain and on-chain data schema. set_variable_meta_data tests.

sotmorskiy2020-11-30parent: #0039ae3.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
1162 let target_collection = <Collection<T>>::get(collection_id);1162 let target_collection = <Collection<T>>::get(collection_id);
1163 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1163 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
1164 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1164 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
1165 "Only item owner, collection owner and admins can modify item");1165 "Only item owner, collection owner and admins can modify item.");
11661166
1167 Self::item_exists(collection_id, item_id, &target_collection.mode)?;1167 Self::item_exists(collection_id, item_id, &target_collection.mode)?;
11681168
1169 match target_collection.mode1169 match target_collection.mode
1170 {1170 {
1171 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,1171 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,
1172 CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,1172 CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?,
1173 CollectionMode::Fungible(_) => fail!("Can't store metadata in fungible tokens"),1173 CollectionMode::Fungible(_) => fail!("Can't store metadata in fungible tokens."),
1174 _ => fail!("Unexpected collection type.")1174 _ => fail!("Unexpected collection type.")
1175 };1175 };
11761176
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -1766,4 +1766,60 @@
         assert_eq!(TemplateModule::collection(collection_id).const_on_chain_schema, b"".to_vec());
         assert_eq!(TemplateModule::collection(collection_id).variable_on_chain_schema, b"test variable on chain schema".to_vec());
     });
+}
+
+#[test]
+fn set_variable_meta_data_on_nft_token_stores_variable_meta_data() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+
+        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.".to_vec();
+        assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));
+
+        assert_eq!(TemplateModule::nft_item_id(collection_id, 1).variable_data, variable_data);
+    });
+}
+
+#[test]
+fn set_variable_meta_data_on_re_fungible_token_stores_variable_meta_data() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+
+        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.".to_vec();
+        assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));
+
+        assert_eq!(TemplateModule::refungible_item_id(collection_id, 1).variable_data, variable_data);
+    });
+}
+
+
+#[test]
+fn set_variable_meta_data_on_fungible_token_fails() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+
+        let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
+
+        let origin1 = Origin::signed(1);
+
+        let data = default_fungible_data();
+        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.");
+    });
 }
\ No newline at end of file