From d855cf844d12e8c16bf518a52448b2d97e14a526 Mon Sep 17 00:00:00 2001 From: sotmorskiy Date: Thu, 03 Dec 2020 06:13:58 +0000 Subject: [PATCH] NFTPAR-142: Off-chain and on-chain data schema. Fixed tests. Added negative set variable metadata test for out of limits data. --- --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -321,7 +321,7 @@ /// Unexpected collection type. UnexpectedCollectionType, /// Can't store metadata in fungible tokens. - CantSotreMetadataInFungibleTokens + CantStoreMetadataInFungibleTokens } } @@ -1193,6 +1193,8 @@ let sender = ensure_signed(origin)?; Self::collection_exists(collection_id)?; + + ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); // Modify permissions check let target_collection = >::get(collection_id); @@ -1206,7 +1208,7 @@ { CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?, CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?, - CollectionMode::Fungible(_) => fail!(Error::::CantSotreMetadataInFungibleTokens), + CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), _ => fail!(Error::::UnexpectedCollectionType) }; --- 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::::TokenConstDataLimitExceeded); }); } @@ -1756,7 +1756,7 @@ collection_id, 1, too_big_const_data - ), "variable_data exceeded data limit."); + ), Error::::TokenVariableDataLimitExceeded); }); } @@ -1787,7 +1787,7 @@ collection_id, 1, too_big_const_data - ), "const_data exceeded data limit."); + ), Error::::TokenConstDataLimitExceeded); }); } @@ -1818,7 +1818,7 @@ collection_id, 1, too_big_const_data - ), "variable_data exceeded data limit."); + ), Error::::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::::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::::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::::TokenVariableDataLimitExceeded); + }); +} -- gitstuff