difftreelog
Merge pull request #137 from usetech-llc/feature/NFTPAR-299_storage_option_refactor
in: master
Fix unit tests
3 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -1295,11 +1295,9 @@
Self::check_white_list(&target_collection, &spender)?;
}
- let allowance_exists = <Allowances<T>>::contains_key(collection_id, (item_id, &sender, &spender));
- let mut allowance: u128 = amount;
- if allowance_exists {
- allowance += <Allowances<T>>::get(collection_id, (item_id, &sender, &spender));
- }
+ let allowance: u128 = amount
+ .checked_add(<Allowances<T>>::get(collection_id, (item_id, &sender, &spender)))
+ .ok_or(Error::<T>::NumOverflow)?;
if let Some(limit) = allowance_limit {
ensure!(limit >= allowance, Error::<T>::TokenValueTooLow);
}
@@ -1334,23 +1332,16 @@
let sender = ensure_signed(origin)?;
let target_collection = Self::get_collection(collection_id)?;
-
- let mut appoved_transfer = false;
// Check approval
- let mut approval: u128 = 0;
- if <Allowances<T>>::contains_key(collection_id, (item_id, &from, &sender)) {
- approval = <Allowances<T>>::get(collection_id, (item_id, &from, &sender));
- ensure!(approval >= value, Error::<T>::TokenValueNotEnough);
- appoved_transfer = true;
- }
+ let approval: u128 = <Allowances<T>>::get(collection_id, (item_id, &from, &sender));
// Limits check
Self::is_correct_transfer(&target_collection, &recipient)?;
// Transfer permissions check
ensure!(
- appoved_transfer ||
+ approval >= value ||
(
target_collection.limits.owner_can_transfer &&
Self::is_owner_or_admin_permissions(&target_collection, sender.clone())
pallets/nft/src/mock.rsdiffbeforeafterboth--- a/pallets/nft/src/mock.rs
+++ b/pallets/nft/src/mock.rs
@@ -24,6 +24,7 @@
{
System: frame_system::{Module, Call, Config, Storage, Event<T>},
TemplateModule: pallet_template::{Module, Call, Storage},
+ Balances: pallet_balances::{Module, Call, Storage},
}
);
@@ -134,13 +135,16 @@
}
parameter_types! {
- pub const CollectionCreationPrice: u64 = 1_000_000_000_000;
+ pub const CollectionCreationPrice: u32 = 0;
+ pub TreasuryAccountId: u64 = 1234;
}
impl pallet_template::Config for Test {
type Event = ();
type WeightInfo = ();
type CollectionCreationPrice = CollectionCreationPrice;
+ type Currency = pallet_balances::Module<Test>;
+ type TreasuryAccountId = TreasuryAccountId;
}
// Build genesis storage according to the mock runtime.
pallets/nft/src/tests.rsdiffbeforeafterboth121 121 122 let data = default_nft_data();122 let data = default_nft_data();123 create_test_item(collection_id, &data.clone().into());123 create_test_item(collection_id, &data.clone().into());124 let item = TemplateModule::nft_item_id(collection_id, 1).unwrap();124 assert_eq!(TemplateModule::nft_item_id(collection_id, 1).const_data, data.const_data);125 assert_eq!(item.const_data, data.const_data);125 assert_eq!(TemplateModule::nft_item_id(collection_id, 1).variable_data, data.variable_data);126 assert_eq!(item.variable_data, data.variable_data);126 });127 });127}128}128129146 items_data.clone().into_iter().map(|d| { d.into() }).collect()147 items_data.clone().into_iter().map(|d| { d.into() }).collect()147 ));148 ));148 for (index, data) in items_data.iter().enumerate() {149 for (index, data) in items_data.iter().enumerate() {149 assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as TokenId).const_data.to_vec(), data.const_data);150 let item = TemplateModule::nft_item_id(1, (index + 1) as TokenId).unwrap(); 151 assert_eq!(item.const_data.to_vec(), data.const_data);150 assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as TokenId).variable_data.to_vec(), data.variable_data);152 assert_eq!(item.variable_data.to_vec(), data.variable_data);151 }153 }152 });154 });153}155}160162161 let data = default_re_fungible_data();163 let data = default_re_fungible_data();162 create_test_item(collection_id, &data.clone().into());164 create_test_item(collection_id, &data.clone().into());165 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();163 assert_eq!(166 assert_eq!(164 TemplateModule::refungible_item_id(collection_id, 1).const_data,167 item.const_data,165 data.const_data168 data.const_data166 );169 );167 assert_eq!(170 assert_eq!(168 TemplateModule::refungible_item_id(collection_id, 1).variable_data,171 item.variable_data,169 data.variable_data172 data.variable_data170 );173 );171 assert_eq!(174 assert_eq!(172 TemplateModule::refungible_item_id(collection_id, 1).owner[0],175 item.owner[0],173 Ownership {176 Ownership {174 owner: 1,177 owner: 1,175 fraction: 1023178 fraction: 1023197 ));200 ));198 for (index, data) in items_data.iter().enumerate() {201 for (index, data) in items_data.iter().enumerate() {199202200 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId);203 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId).unwrap();201 assert_eq!(item.const_data.to_vec(), data.const_data);204 assert_eq!(item.const_data.to_vec(), data.const_data);202 assert_eq!(item.variable_data.to_vec(), data.variable_data);205 assert_eq!(item.variable_data.to_vec(), data.variable_data);203 assert_eq!(206 assert_eq!(299302300 let origin1 = Origin::signed(1);303 let origin1 = Origin::signed(1);301 let origin2 = Origin::signed(2);304 let origin2 = Origin::signed(2);305 {306 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();302 assert_eq!(307 assert_eq!(303 TemplateModule::refungible_item_id(collection_id, 1).const_data,308 item.const_data,304 data.const_data309 data.const_data305 );310 );306 assert_eq!(311 assert_eq!(307 TemplateModule::refungible_item_id(collection_id, 1).variable_data,312 item.variable_data,308 data.variable_data313 data.variable_data309 );314 );310 assert_eq!(315 assert_eq!(311 TemplateModule::refungible_item_id(collection_id, 1).owner[0],316 item.owner[0],312 Ownership {317 Ownership {313 owner: 1,318 owner: 1,314 fraction: 1023319 fraction: 1023315 }320 }316 );321 );322 }317 assert_eq!(TemplateModule::balance_count(1, 1), 1023);323 assert_eq!(TemplateModule::balance_count(1, 1), 1023);318 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);324 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);319325320 // change owner scenario326 // change owner scenario321 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1023));327 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1023));322 assert_eq!(328 assert_eq!(323 TemplateModule::refungible_item_id(1, 1).owner[0],329 TemplateModule::refungible_item_id(1, 1).unwrap().owner[0],324 Ownership {330 Ownership {325 owner: 2,331 owner: 2,326 fraction: 1023332 fraction: 1023333339334 // split item scenario340 // split item scenario335 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));341 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));342 {343 let item = TemplateModule::refungible_item_id(1, 1).unwrap();336 assert_eq!(344 assert_eq!(337 TemplateModule::refungible_item_id(1, 1).owner[0],345 item.owner[0],338 Ownership {346 Ownership {339 owner: 2,347 owner: 2,340 fraction: 523348 fraction: 523341 }349 }342 );350 );343 assert_eq!(351 assert_eq!(344 TemplateModule::refungible_item_id(1, 1).owner[1],352 item.owner[1],345 Ownership {353 Ownership {346 owner: 3,354 owner: 3,347 fraction: 500355 fraction: 500348 }356 }349 );357 );358 }350 assert_eq!(TemplateModule::balance_count(1, 2), 523);359 assert_eq!(TemplateModule::balance_count(1, 2), 523);351 assert_eq!(TemplateModule::balance_count(1, 3), 500);360 assert_eq!(TemplateModule::balance_count(1, 3), 500);352 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);361 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);353 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);362 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);354363355 // split item and new owner has account scenario364 // split item and new owner has account scenario356 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));365 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));366 {367 let item = TemplateModule::refungible_item_id(1, 1).unwrap();357 assert_eq!(368 assert_eq!(358 TemplateModule::refungible_item_id(1, 1).owner[0],369 item.owner[0],359 Ownership {370 Ownership {360 owner: 2,371 owner: 2,361 fraction: 323372 fraction: 323362 }373 }363 );374 );364 assert_eq!(375 assert_eq!(365 TemplateModule::refungible_item_id(1, 1).owner[1],376 item.owner[1],366 Ownership {377 Ownership {367 owner: 3,378 owner: 3,368 fraction: 700379 fraction: 700369 }380 }370 );381 );382 }371 assert_eq!(TemplateModule::balance_count(1, 2), 323);383 assert_eq!(TemplateModule::balance_count(1, 2), 323);372 assert_eq!(TemplateModule::balance_count(1, 3), 700);384 assert_eq!(TemplateModule::balance_count(1, 3), 700);373 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);385 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);390 let origin1 = Origin::signed(1);402 let origin1 = Origin::signed(1);391 // default scenario403 // default scenario392 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));404 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));393 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 2);405 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, 2);394 assert_eq!(TemplateModule::balance_count(1, 1), 0);406 assert_eq!(TemplateModule::balance_count(1, 1), 0);395 assert_eq!(TemplateModule::balance_count(1, 2), 1);407 assert_eq!(TemplateModule::balance_count(1, 2), 1);396 // assert_eq!(TemplateModule::address_tokens(1, 1), []);408 // assert_eq!(TemplateModule::address_tokens(1, 1), []);456 let data = default_nft_data();468 let data = default_nft_data();457 create_test_item(collection_id, &data.clone().into());469 create_test_item(collection_id, &data.clone().into());458470459 assert_eq!(TemplateModule::nft_item_id(1, 1).const_data, data.const_data);471 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().const_data, data.const_data);460 assert_eq!(TemplateModule::balance_count(1, 1), 1);472 assert_eq!(TemplateModule::balance_count(1, 1), 1);461 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);473 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);462474605 1,617 1,606 1,618 1,607 4619 4608 ), Error::<Test>::TokenValueNotEnough);620 ), Error::<Test>::NoPermission);609 });621 });610}622}611623685 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 5));697 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 5));686 assert_noop!(698 assert_noop!(687 TemplateModule::burn_item(origin1.clone(), 1, 1, 5),699 TemplateModule::burn_item(origin1.clone(), 1, 1, 5),688 Error::<Test>::TokenNotFound700 Error::<Test>::TokenValueNotEnough689 );701 );690702691 assert_eq!(TemplateModule::balance_count(1, 1), 0);703 assert_eq!(TemplateModule::balance_count(1, 1), 0);807 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);819 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);808 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);820 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);809 assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1023);821 assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1023);810 assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).owner, 1);822 assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).unwrap().owner, 1);811 assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).value, 5);823 assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).value, 5);812 assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).owner[0].owner, 1);824 assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).unwrap().owner[0].owner, 1);813 });825 });814}826}8158271876 let variable_data = b"test set_variable_meta_data method.".to_vec();1888 let variable_data = b"test set_variable_meta_data method.".to_vec();1877 assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));1889 assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));187818901879 assert_eq!(TemplateModule::nft_item_id(collection_id, 1).variable_data, variable_data);1891 assert_eq!(TemplateModule::nft_item_id(collection_id, 1).unwrap().variable_data, variable_data);1880 });1892 });1881}1893}188218941895 let variable_data = b"test set_variable_meta_data method.".to_vec();1907 let variable_data = b"test set_variable_meta_data method.".to_vec();1896 assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));1908 assert_ok!(TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data.clone()));189719091898 assert_eq!(TemplateModule::refungible_item_id(collection_id, 1).variable_data, variable_data);1910 assert_eq!(TemplateModule::refungible_item_id(collection_id, 1).unwrap().variable_data, variable_data);1899 });1911 });1900}1912}19011913