difftreelog
NFTPAR-142: Off-chain and on-chain data schema. Fixed tests. Added negative set variable metadata test for out of limits data.
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth321 /// 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 CantStoreMetadataInFungibleTokens325 }325 }326}326}3273271194 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);119611981197 // Modify permissions check1199 // Modify permissions check1198 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 };12121214pallets/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);
+ });
+}