difftreelog
Balances fix
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -280,6 +280,10 @@
}
<ItemList<T>>::remove((collection_id, item_id));
+ // update balance
+ let new_balance = <Balance<T>>::get((collection_id, item.owner.clone())) - 1;
+ <Balance<T>>::insert((collection_id, item.owner.clone()), new_balance);
+
Ok(())
}
@@ -308,10 +312,19 @@
}
<ItemList<T>>::remove((collection_id, item_id));
+ // update balance
+ let balance_old_owner = <Balance<T>>::get((collection_id, item.owner.clone())) - 1;
+ <Balance<T>>::insert((collection_id, item.owner.clone()), balance_old_owner);
+
+ let balance_new_owner = <Balance<T>>::get((collection_id, new_owner.clone())) + 1;
+ <Balance<T>>::insert((collection_id, new_owner.clone()), balance_new_owner);
+
// change owner
item.owner = new_owner;
<ItemList<T>>::insert((collection_id, item_id), item);
+
+
Ok(())
}
}
pallets/nft/src/tests.rsdiffbeforeafterboth1// Tests to be written here2use crate::{ mock::*};3use frame_support::{assert_ok, assert_noop};45#[test]6fn create_collection_test() {7 new_test_ext().execute_with(|| {8 let size = 1024;9 let origin1 = Origin::signed(1);10 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));11 assert_eq!(TemplateModule::collection(1).owner, 1);12 });13}1415#[test]16fn change_collection_owner() {17 new_test_ext().execute_with(|| {18 let size = 1024;19 let origin1 = Origin::signed(1);2021 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));22 assert_ok!(TemplateModule::change_collection_owner(origin1.clone(), 1, 2));23 assert_eq!(TemplateModule::collection(1).owner, 2);24 });25}2627#[test]28fn destroy_collection() {29 new_test_ext().execute_with(|| {30 let size = 1024;31 let origin1 = Origin::signed(1);3233 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));34 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));35 });36}3738#[test]39fn create_item() {40 new_test_ext().execute_with(|| {41 let size = 1024;42 let origin1 = Origin::signed(1);43 let origin2 = Origin::signed(2);4445 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));46 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));47 assert_ok!(TemplateModule::create_item(origin2.clone(), 1, [1,1,1].to_vec()));4849 // check balance (collection with id = 1, user id = 2)50 assert_eq!(TemplateModule::balance_count((1, 2)), 1);51 });52}5354#[test]55fn burn_item() {56 new_test_ext().execute_with(|| {57 let size = 1024;58 let origin1 = Origin::signed(1);59 let origin2 = Origin::signed(2);6061 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));62 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));63 assert_ok!(TemplateModule::create_item(origin2.clone(), 1, [1,1,1].to_vec()));6465 // check balance (collection with id = 1, user id = 2)66 assert_eq!(TemplateModule::balance_count((1, 2)), 1);6768 // burn item69 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));70 assert_noop!(TemplateModule::burn_item(origin1.clone(), 1, 1), "Item does not exists");71 });72}737475#[test]76fn add_collection_admin() {77 new_test_ext().execute_with(|| {78 let size = 1024;79 let origin1 = Origin::signed(1);80 let origin2 = Origin::signed(2);81 let origin3 = Origin::signed(3);8283 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));84 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));85 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));8687 assert_eq!(TemplateModule::collection(1).owner, 1);88 assert_eq!(TemplateModule::collection(2).owner, 2);89 assert_eq!(TemplateModule::collection(3).owner, 3);9091 // collection admin92 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));93 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));9495 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);96 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);97 });98}99100#[test]101fn remove_collection_admin() {102 new_test_ext().execute_with(|| {103 let size = 1024;104 let origin1 = Origin::signed(1);105 let origin2 = Origin::signed(2);106 let origin3 = Origin::signed(3);107108 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));109 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));110 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));111112 assert_eq!(TemplateModule::collection(1).owner, 1);113 assert_eq!(TemplateModule::collection(2).owner, 2);114 assert_eq!(TemplateModule::collection(3).owner, 3);115116 // collection admin117 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));118 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));119120 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);121 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);122123 // remove admin124 assert_ok!(TemplateModule::remove_collection_admin(origin2.clone(), 1, 3));125 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);126 });127}128129#[test]130fn balance_of() {131 new_test_ext().execute_with(|| {132 let size = 1024;133 let origin1 = Origin::signed(1);134 let origin2 = Origin::signed(2);135 let origin3 = Origin::signed(3);136137 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));138 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));139 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));140141 assert_eq!(TemplateModule::collection(1).owner, 1);142 assert_eq!(TemplateModule::collection(2).owner, 2);143 assert_eq!(TemplateModule::collection(3).owner, 3);144145 // check balance before146 assert_eq!(TemplateModule::balance_count((1, 1)), 0);147148 // create item149 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));150 151 // check balance (collection with id = 1, user id = 2)152 assert_eq!(TemplateModule::balance_count((1, 1)), 1);153 assert_eq!(TemplateModule::item_id((1,1)).owner, 1);154 });155}156157#[test]158fn transfer() {159 new_test_ext().execute_with(|| {160 let size = 1024;161 let origin1 = Origin::signed(1);162 let origin2 = Origin::signed(2);163 let origin3 = Origin::signed(3);164165 assert_ok!(TemplateModule::create_collection(origin1.clone(), size));166 assert_ok!(TemplateModule::create_collection(origin2.clone(), size));167 assert_ok!(TemplateModule::create_collection(origin3.clone(), size));168169 assert_eq!(TemplateModule::collection(1).owner, 1);170 assert_eq!(TemplateModule::collection(2).owner, 2);171 assert_eq!(TemplateModule::collection(3).owner, 3);172173 // create item174 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,1,1].to_vec()));175176 // transfer177 assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));178 assert_eq!(TemplateModule::item_id((1,1)).owner, 2);179 });180}