git.delta.rocks / unique-network / refs/commits / 3bcc5aae8f54

difftreelog

Merge pull request #137 from usetech-llc/feature/NFTPAR-299_storage_option_refactor

usetech-llc2021-03-23parents: #7b0bdf5 #3e7f8c4.patch.diff
in: master
Fix unit tests

3 files changed

modifiedpallets/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())
modifiedpallets/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.
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
121 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}
128129
146 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}
160162
161 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_data
166 );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_data
170 );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: 1023
197 ));200 ));
198 for (index, data) in items_data.iter().enumerate() {201 for (index, data) in items_data.iter().enumerate() {
199202
200 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!(
299302
300 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_data
305 );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_data
309 );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: 1023
315 }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]);
319325
320 // change owner scenario326 // change owner scenario
321 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: 1023
333339
334 // split item scenario340 // split item scenario
335 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: 523
341 }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: 500
348 }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]);
354363
355 // split item and new owner has account scenario364 // split item and new owner has account scenario
356 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: 323
362 }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: 700
369 }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 scenario
392 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());
458470
459 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]);
462474
605 1,617 1,
606 1,618 1,
607 4619 4
608 ), Error::<Test>::TokenValueNotEnough);620 ), Error::<Test>::NoPermission);
609 });621 });
610}622}
611623
685 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>::TokenValueNotEnough
689 );701 );
690702
691 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}
815827
1876 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()));
18781890
1879 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}
18821894
1895 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()));
18971909
1898 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