difftreelog
transfer fix
in: master
4 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3085,6 +3085,7 @@
dependencies = [
"frame-support",
"frame-system",
+ "log",
"pallet-transaction-payment",
"parity-scale-codec",
"serde",
pallets/nft/Cargo.tomldiffbeforeafterboth--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -36,6 +36,7 @@
[dependencies]
# third-party dependencies
serde = { version = "1.0.102", features = ["derive"] }
+log = "0.4.8"
[dependencies.sp-std]
default-features = false
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -371,7 +371,7 @@
let item = NftItemType {
collection: collection_id,
owner: owner,
- data: properties,
+ data: properties.clone(),
};
Self::add_nft_item(item)?;
@@ -380,17 +380,18 @@
CollectionMode::ReFungible(_, _) => {
let mut owner_list = Vec::new();
let value = (10 as u128).pow(target_collection.decimal_points);
- owner_list.push(Ownership {owner: owner, fraction: value});
+ owner_list.push(Ownership {owner: owner.clone(), fraction: value});
let item = ReFungibleItemType {
collection: collection_id,
owner: owner_list,
- data: properties
+ data: properties.clone()
};
Self::add_refungible_item(item)?;
},
- _ => ()
+ _ => { ensure!(1 == 0,"just error"); }
+
};
// call event
@@ -595,11 +596,11 @@
Self::add_token_index(item.collection, current_index, owner.clone())?;
<ItemListIndex>::insert(item.collection, current_index);
- <ReFungibleItemList<T>>::insert(item.collection, current_index, item);
+ <ReFungibleItemList<T>>::insert(item.collection, current_index, itemcopy);
// Update balance
- let new_balance = <Balance<T>>::get(itemcopy.collection, owner.clone()).checked_add(value).unwrap();
- <Balance<T>>::insert(itemcopy.collection, owner.clone(), new_balance);
+ let new_balance = <Balance<T>>::get(item.collection, owner.clone()).checked_add(value).unwrap();
+ <Balance<T>>::insert(item.collection, owner.clone(), new_balance);
Ok(())
}
@@ -626,7 +627,7 @@
let item = full_item.owner.iter().filter(|i| i.owner == owner).next().unwrap();
let amount = item.fraction;
- ensure!(amount < value.into(),"Item balance not enouth");
+ ensure!(amount >= value.into(),"Item balance not enouth");
// update balance
let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.clone()).checked_sub(value).unwrap();
@@ -637,9 +638,10 @@
let old_owner = item.owner.clone();
let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner);
+ let val64 = value.into();
// transfer
- if amount == value.into() && !new_owner_has_account
+ if amount == val64 && !new_owner_has_account
{
// change owner
// new owner do not have account
@@ -653,17 +655,17 @@
else
{
let mut new_full_item = full_item.clone();
- new_full_item.owner.iter_mut().find(|i| i.owner == owner).unwrap().fraction -= amount;
+ new_full_item.owner.iter_mut().find(|i| i.owner == owner).unwrap().fraction -= val64;
// separate amount
if new_owner_has_account {
// new owner has account
- new_full_item.owner.iter_mut().find(|i| i.owner == new_owner).unwrap().fraction += amount;
+ new_full_item.owner.iter_mut().find(|i| i.owner == new_owner).unwrap().fraction += val64;
}
else
{
// new owner do not have account
- new_full_item.owner.push(Ownership { owner: new_owner.clone(), fraction: amount});
+ new_full_item.owner.push(Ownership { owner: new_owner.clone(), fraction: val64});
Self::add_token_index(collection_id, item_id, new_owner.clone())?;
}
pallets/nft/src/tests.rsdiffbeforeafterboth1// Tests to be written here1// Tests to be written here2use crate::mock::*;2use crate::mock::*;3use crate::{CollectionMode, Ownership};3use frame_support::{assert_noop, assert_ok};4use frame_support::{assert_noop, assert_ok};455#[test]6#[test]6fn create_collection_test() {7fn create_nft_item() {7 new_test_ext().execute_with(|| {8 new_test_ext().execute_with(|| {8 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();9 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();9 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();10 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();10 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();11 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12 let mode: CollectionMode = CollectionMode::NFT(2000);111312 let size = 1024;13 let origin1 = Origin::signed(1);14 let origin1 = Origin::signed(1);14 assert_ok!(TemplateModule::create_collection(15 assert_ok!(TemplateModule::create_collection(15 origin1.clone(),16 origin1.clone(),16 col_name1.clone(),17 col_name1.clone(),17 col_desc1.clone(),18 col_desc1.clone(),18 token_prefix1.clone(),19 token_prefix1.clone(),19 size20 mode20 ));21 ));21 assert_eq!(TemplateModule::collection(1).owner, 1);22 assert_eq!(TemplateModule::collection(1).owner, 1);22 });23}242325#[test]26fn change_collection_owner() {27 new_test_ext().execute_with(|| {28 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();29 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();30 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();312432 let size = 1024;25 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));33 let origin1 = Origin::signed(1);3435 assert_ok!(TemplateModule::create_collection(36 origin1.clone(),37 col_name1.clone(),38 col_desc1.clone(),39 token_prefix1.clone(),40 size41 ));42 assert_ok!(TemplateModule::change_collection_owner(43 origin1.clone(),44 1,45 246 ));47 assert_eq!(TemplateModule::collection(1).owner, 2);26 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());48 });27 });49}28}502951#[test]30#[test]52fn destroy_collection() {31fn create_refungible_item() {53 new_test_ext().execute_with(|| {32 new_test_ext().execute_with(|| {54 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();33 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();55 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();34 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();56 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();35 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();36 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);573758 let size = 1024;59 let origin1 = Origin::signed(1);38 let origin1 = Origin::signed(1);6061 assert_ok!(TemplateModule::create_collection(39 assert_ok!(TemplateModule::create_collection(62 origin1.clone(),40 origin1.clone(),63 col_name1.clone(),41 col_name1.clone(),64 col_desc1.clone(),42 col_desc1.clone(),65 token_prefix1.clone(),43 token_prefix1.clone(),66 size44 mode67 ));45 ));68 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));46 assert_eq!(TemplateModule::collection(1).owner, 1);474849 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));50 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());51 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });69 });52 });70}53}715472#[test]55#[test]73fn create_item() {56fn transfer_refungible_item() {74 new_test_ext().execute_with(|| {57 new_test_ext().execute_with(|| {75 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();58 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();76 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();59 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();77 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();60 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();61 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);786279 let size = 1024;80 let origin1 = Origin::signed(1);63 let origin1 = Origin::signed(1);81 let origin2 = Origin::signed(2);64 let origin2 = Origin::signed(2);8283 assert_ok!(TemplateModule::create_collection(65 assert_ok!(TemplateModule::create_collection(84 origin1.clone(),66 origin1.clone(),85 col_name1.clone(),67 col_name1.clone(),86 col_desc1.clone(),68 col_desc1.clone(),87 token_prefix1.clone(),69 token_prefix1.clone(),88 size70 mode89 ));71 ));90 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));72 assert_eq!(TemplateModule::collection(1).owner, 1);91 assert_ok!(TemplateModule::create_item(92 origin2.clone(),93 1,94 [1, 1, 1].to_vec()95 ));967397 // check balance (collection with id = 1, user id = 2)74 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));75 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());76 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });77 assert_eq!(TemplateModule::balance_count(1,1), 1000);78 assert_eq!(TemplateModule::address_tokens(1,1), [1]);7980 // change owner scenario81 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));82 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 });98 assert_eq!(TemplateModule::balance_count((1, 2)), 1);83 assert_eq!(TemplateModule::balance_count(1,1), 0);84 assert_eq!(TemplateModule::balance_count(1,2), 1000);85 assert_eq!(TemplateModule::address_tokens(1,1), []);86 assert_eq!(TemplateModule::address_tokens(1,2), [1]);8788 // split item scenario89 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));90 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 });91 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 });92 assert_eq!(TemplateModule::balance_count(1,2), 500);93 assert_eq!(TemplateModule::balance_count(1,3), 500);94 assert_eq!(TemplateModule::address_tokens(1,2), [1]);95 assert_eq!(TemplateModule::address_tokens(1,3), [1]);9697 // split item and new owner has account scenario98 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));99 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 });100 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 });101 assert_eq!(TemplateModule::balance_count(1,2), 300);102 assert_eq!(TemplateModule::balance_count(1,3), 700);103 assert_eq!(TemplateModule::address_tokens(1,2), [1]);104 assert_eq!(TemplateModule::address_tokens(1,3), [1]);99 });105 });100}106}101107108102#[test]109#[test]103fn burn_item() {110fn transfer_nft_item() {104 new_test_ext().execute_with(|| {111 new_test_ext().execute_with(|| {105 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();112 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();106 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();113 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();107 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();114 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();115 let mode: CollectionMode = CollectionMode::NFT(2000);108116109 let size = 1024;110 let origin1 = Origin::signed(1);117 let origin1 = Origin::signed(1);111 let origin2 = Origin::signed(2);112113 assert_ok!(TemplateModule::create_collection(118 assert_ok!(TemplateModule::create_collection(114 origin1.clone(),119 origin1.clone(),115 col_name1.clone(),120 col_name1.clone(),116 col_desc1.clone(),121 col_desc1.clone(),117 token_prefix1.clone(),122 token_prefix1.clone(),118 size123 mode119 ));124 ));120 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));125 assert_eq!(TemplateModule::collection(1).owner, 1);121 assert_ok!(TemplateModule::create_item(122 origin2.clone(),123 1,124 [1, 1, 1].to_vec()125 ));126126127 // check balance (collection with id = 1, user id = 2)128 assert_eq!(TemplateModule::balance_count((1, 2)), 1);129127130 // burn item128 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));131 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));132 assert_noop!(129 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());133 TemplateModule::burn_item(origin1.clone(), 1, 1),130 assert_eq!(TemplateModule::balance_count(1,1), 1);134 "Item does not exists"131 assert_eq!(TemplateModule::address_tokens(1,1), [1]);135 );136132137 assert_eq!(TemplateModule::balance_count((1, 1)), 0);133 // default scenario134 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));135 assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2);136 assert_eq!(TemplateModule::balance_count(1,1), 0);137 assert_eq!(TemplateModule::balance_count(1,2), 1);138 assert_eq!(TemplateModule::address_tokens(1,1), []);139 assert_eq!(TemplateModule::address_tokens(1,2), [1]); 138 });140 });139}141}140142141#[test]142fn add_collection_admin() {143 new_test_ext().execute_with(|| {144 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();145 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();146 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();147143148 let size = 1024;144// #[test]145// fn create_collection_test() {146// new_test_ext().execute_with(|| {149 let origin1 = Origin::signed(1);147// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();150 let origin2 = Origin::signed(2);148// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();151 let origin3 = Origin::signed(3);149// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();152150153 assert_ok!(TemplateModule::create_collection(151// let size = 1024;154 origin1.clone(),155 col_name1.clone(),152// let origin1 = Origin::signed(1);156 col_desc1.clone(),157 token_prefix1.clone(),158 size159 ));160 assert_ok!(TemplateModule::create_collection(153// assert_ok!(TemplateModule::create_collection(161 origin2.clone(),154// origin1.clone(),162 col_name1.clone(),155// col_name1.clone(),163 col_desc1.clone(),156// col_desc1.clone(),164 token_prefix1.clone(),157// token_prefix1.clone(),165 size158// size166 ));159// ));167 assert_ok!(TemplateModule::create_collection(160// assert_eq!(TemplateModule::collection(1).owner, 1);168 origin3.clone(),169 col_name1.clone(),170 col_desc1.clone(),171 token_prefix1.clone(),161// });172 size162// }173 ));174163175 assert_eq!(TemplateModule::collection(1).owner, 1);164// #[test]165// fn change_collection_owner() {166// new_test_ext().execute_with(|| {176 assert_eq!(TemplateModule::collection(2).owner, 2);167// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();177 assert_eq!(TemplateModule::collection(3).owner, 3);168// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();169// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();178170179 // collection admin171// let size = 1024;180 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));181 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));172// let origin1 = Origin::signed(1);182173183 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);174// assert_ok!(TemplateModule::create_collection(175// origin1.clone(),176// col_name1.clone(),177// col_desc1.clone(),178// token_prefix1.clone(),179// size180// ));184 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);181// assert_ok!(TemplateModule::change_collection_owner(182// origin1.clone(),183// 1,184// 2185// ));186// assert_eq!(TemplateModule::collection(1).owner, 2);185 });187// });186}188// }187189188#[test]190// #[test]189fn remove_collection_admin() {191// fn destroy_collection() {190 new_test_ext().execute_with(|| {192// new_test_ext().execute_with(|| {191 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();193// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();192 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();194// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();193 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();195// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();194196195 let size = 1024;197// let size = 1024;196 let origin1 = Origin::signed(1);198// let origin1 = Origin::signed(1);197 let origin2 = Origin::signed(2);198 let origin3 = Origin::signed(3);199199200 assert_ok!(TemplateModule::create_collection(200// assert_ok!(TemplateModule::create_collection(201 origin1.clone(),201// origin1.clone(),202 col_name1.clone(),202// col_name1.clone(),203 col_desc1.clone(),203// col_desc1.clone(),204 token_prefix1.clone(),204// token_prefix1.clone(),205 size205// size206 ));206// ));207 assert_ok!(TemplateModule::create_collection(207// assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));208 origin2.clone(),209 col_name1.clone(),210 col_desc1.clone(),211 token_prefix1.clone(),208// });212 size213 ));214 assert_ok!(TemplateModule::create_collection(209// }215 origin3.clone(),216 col_name1.clone(),217 col_desc1.clone(),218 token_prefix1.clone(),219 size220 ));221210222 assert_eq!(TemplateModule::collection(1).owner, 1);211// #[test]212// fn create_item() {213// new_test_ext().execute_with(|| {223 assert_eq!(TemplateModule::collection(2).owner, 2);214// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();224 assert_eq!(TemplateModule::collection(3).owner, 3);215// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();216// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();225217226 // collection admin218// let size = 1024;227 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));219// let origin1 = Origin::signed(1);228 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));220// let origin2 = Origin::signed(2);229221230 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);222// assert_ok!(TemplateModule::create_collection(223// origin1.clone(),224// col_name1.clone(),225// col_desc1.clone(),226// token_prefix1.clone(),227// size228// ));231 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);229// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));230// assert_ok!(TemplateModule::create_item(231// origin2.clone(),232// 1,233// [1, 1, 1].to_vec()234// ));232235233 // remove admin236// // check balance (collection with id = 1, user id = 2)234 assert_ok!(TemplateModule::remove_collection_admin(235 origin2.clone(),236 1,237 3238 ));239 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);237// assert_eq!(TemplateModule::balance_count((1, 2)), 1);240 });238// });241}239// }242240243#[test]241// #[test]244fn balance_of() {242// fn burn_item() {245 new_test_ext().execute_with(|| {243// new_test_ext().execute_with(|| {246 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();244// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();247 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();245// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();248 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();246// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();249247250 let size = 1024;248// let size = 1024;251 let origin1 = Origin::signed(1);249// let origin1 = Origin::signed(1);252 let origin2 = Origin::signed(2);250// let origin2 = Origin::signed(2);253 let origin3 = Origin::signed(3);254251255 assert_ok!(TemplateModule::create_collection(252// assert_ok!(TemplateModule::create_collection(256 origin1.clone(),253// origin1.clone(),257 col_name1.clone(),254// col_name1.clone(),258 col_desc1.clone(),255// col_desc1.clone(),259 token_prefix1.clone(),256// token_prefix1.clone(),260 size257// size261 ));258// ));262 assert_ok!(TemplateModule::create_collection(259// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));263 origin2.clone(),264 col_name1.clone(),265 col_desc1.clone(),266 token_prefix1.clone(),267 size268 ));269 assert_ok!(TemplateModule::create_collection(260// assert_ok!(TemplateModule::create_item(270 origin3.clone(),261// origin2.clone(),271 col_name1.clone(),262// 1,272 col_desc1.clone(),263// [1, 1, 1].to_vec()273 token_prefix1.clone(),274 size264// ));275 ));276265277 assert_eq!(TemplateModule::collection(1).owner, 1);266// // check balance (collection with id = 1, user id = 2)278 assert_eq!(TemplateModule::collection(2).owner, 2);279 assert_eq!(TemplateModule::collection(3).owner, 3);267// assert_eq!(TemplateModule::balance_count((1, 2)), 1);280268281 // check balance before269// // burn item282 assert_eq!(TemplateModule::balance_count((1, 1)), 0);270// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));271// assert_noop!(272// TemplateModule::burn_item(origin1.clone(), 1, 1),273// "Item does not exists"274// );283275284 // create item276// assert_eq!(TemplateModule::balance_count((1, 1)), 0);285 assert_ok!(TemplateModule::create_item(286 origin1.clone(),287 1,288 [1, 1, 1].to_vec()289 ));277// });278// }290279291 // check balance (collection with id = 1, user id = 2)280// #[test]281// fn add_collection_admin() {282// new_test_ext().execute_with(|| {283// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();292 assert_eq!(TemplateModule::balance_count((1, 1)), 1);284// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();293 assert_eq!(TemplateModule::item_id((1, 1)).owner, 1);285// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();294 });295}296286297#[test]298fn transfer() {287// let size = 1024;299 new_test_ext().execute_with(|| {300 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();288// let origin1 = Origin::signed(1);301 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();289// let origin2 = Origin::signed(2);302 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();290// let origin3 = Origin::signed(3);303291304 let size = 1024;292// assert_ok!(TemplateModule::create_collection(305 let origin1 = Origin::signed(1);293// origin1.clone(),294// col_name1.clone(),306 let origin2 = Origin::signed(2);295// col_desc1.clone(),296// token_prefix1.clone(),297// size298// ));299// assert_ok!(TemplateModule::create_collection(300// origin2.clone(),307 let origin3 = Origin::signed(3);301// col_name1.clone(),302// col_desc1.clone(),303// token_prefix1.clone(),304// size305// ));306// assert_ok!(TemplateModule::create_collection(307// origin3.clone(),308// col_name1.clone(),309// col_desc1.clone(),310// token_prefix1.clone(),311// size312// ));308313309 assert_ok!(TemplateModule::create_collection(314// assert_eq!(TemplateModule::collection(1).owner, 1);310 origin1.clone(),311 col_name1.clone(),312 col_desc1.clone(),313 token_prefix1.clone(),314 size315 ));316 assert_ok!(TemplateModule::create_collection(315// assert_eq!(TemplateModule::collection(2).owner, 2);317 origin2.clone(),318 col_name1.clone(),319 col_desc1.clone(),320 token_prefix1.clone(),321 size322 ));323 assert_ok!(TemplateModule::create_collection(316// assert_eq!(TemplateModule::collection(3).owner, 3);324 origin3.clone(),325 col_name1.clone(),326 col_desc1.clone(),327 token_prefix1.clone(),328 size329 ));330317331 assert_eq!(TemplateModule::collection(1).owner, 1);318// // collection admin332 assert_eq!(TemplateModule::collection(2).owner, 2);319// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));333 assert_eq!(TemplateModule::collection(3).owner, 3);320// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));334321335 // create item322// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);336 assert_ok!(TemplateModule::create_item(337 origin1.clone(),338 1,339 [1, 1, 1].to_vec()323// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);340 ));324// });325// }341326342 // transfer327// #[test]328// fn remove_collection_admin() {329// new_test_ext().execute_with(|| {343 assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));330// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();331// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();344 assert_eq!(TemplateModule::item_id((1, 1)).owner, 2);332// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();345333346 // balance_of check334// let size = 1024;347 assert_eq!(TemplateModule::balance_count((1, 1)), 0);335// let origin1 = Origin::signed(1);348 assert_eq!(TemplateModule::balance_count((1, 2)), 1);336// let origin2 = Origin::signed(2);349 });337// let origin3 = Origin::signed(3);350}351338352#[test]339// assert_ok!(TemplateModule::create_collection(353fn approve() {340// origin1.clone(),341// col_name1.clone(),354 new_test_ext().execute_with(|| {342// col_desc1.clone(),343// token_prefix1.clone(),344// size355 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();345// ));346// assert_ok!(TemplateModule::create_collection(347// origin2.clone(),348// col_name1.clone(),356 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();349// col_desc1.clone(),350// token_prefix1.clone(),351// size352// ));357 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();353// assert_ok!(TemplateModule::create_collection(354// origin3.clone(),355// col_name1.clone(),356// col_desc1.clone(),357// token_prefix1.clone(),358// size359// ));358360359 let size = 1024;361// assert_eq!(TemplateModule::collection(1).owner, 1);360 let origin1 = Origin::signed(1);361 let origin2 = Origin::signed(2);362// assert_eq!(TemplateModule::collection(2).owner, 2);362 let origin3 = Origin::signed(3);363// assert_eq!(TemplateModule::collection(3).owner, 3);363364364 assert_ok!(TemplateModule::create_collection(365// // collection admin365 origin1.clone(),366 col_name1.clone(),366// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));367 col_desc1.clone(),368 token_prefix1.clone(),369 size370 ));371 assert_ok!(TemplateModule::create_collection(372 origin2.clone(),373 col_name1.clone(),374 col_desc1.clone(),375 token_prefix1.clone(),376 size377 ));378 assert_ok!(TemplateModule::create_collection(367// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));379 origin3.clone(),380 col_name1.clone(),381 col_desc1.clone(),382 token_prefix1.clone(),383 size384 ));385368386 assert_eq!(TemplateModule::collection(1).owner, 1);369// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);387 assert_eq!(TemplateModule::collection(2).owner, 2);388 assert_eq!(TemplateModule::collection(3).owner, 3);370// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);389371390 // create item372// // remove admin391 assert_ok!(TemplateModule::create_item(373// assert_ok!(TemplateModule::remove_collection_admin(392 origin1.clone(),374// origin2.clone(),393 1,375// 1,394 [1, 1, 1].to_vec()376// 3377// ));395 ));378// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);379// });380// }396381397 // approve382// #[test]383// fn balance_of() {384// new_test_ext().execute_with(|| {398 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));385// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();399 assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);386// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();400 });387// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();401}402388403#[test]404fn get_approved() {389// let size = 1024;405 new_test_ext().execute_with(|| {406 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();390// let origin1 = Origin::signed(1);407 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();391// let origin2 = Origin::signed(2);408 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();392// let origin3 = Origin::signed(3);409393410 let size = 1024;394// assert_ok!(TemplateModule::create_collection(411 let origin1 = Origin::signed(1);395// origin1.clone(),396// col_name1.clone(),412 let origin2 = Origin::signed(2);397// col_desc1.clone(),398// token_prefix1.clone(),399// size400// ));401// assert_ok!(TemplateModule::create_collection(402// origin2.clone(),413 let origin3 = Origin::signed(3);403// col_name1.clone(),404// col_desc1.clone(),405// token_prefix1.clone(),406// size407// ));408// assert_ok!(TemplateModule::create_collection(409// origin3.clone(),410// col_name1.clone(),411// col_desc1.clone(),412// token_prefix1.clone(),413// size414// ));414415415 assert_ok!(TemplateModule::create_collection(416// assert_eq!(TemplateModule::collection(1).owner, 1);416 origin1.clone(),417 col_name1.clone(),418 col_desc1.clone(),419 token_prefix1.clone(),420 size421 ));422 assert_ok!(TemplateModule::create_collection(417// assert_eq!(TemplateModule::collection(2).owner, 2);423 origin2.clone(),424 col_name1.clone(),425 col_desc1.clone(),426 token_prefix1.clone(),427 size428 ));429 assert_ok!(TemplateModule::create_collection(418// assert_eq!(TemplateModule::collection(3).owner, 3);430 origin3.clone(),431 col_name1.clone(),432 col_desc1.clone(),433 token_prefix1.clone(),434 size435 ));436419437 assert_eq!(TemplateModule::collection(1).owner, 1);420// // check balance before438 assert_eq!(TemplateModule::collection(2).owner, 2);439 assert_eq!(TemplateModule::collection(3).owner, 3);421// assert_eq!(TemplateModule::balance_count((1, 1)), 0);440422441 // create item423// // create item442 assert_ok!(TemplateModule::create_item(424// assert_ok!(TemplateModule::create_item(443 origin1.clone(),425// origin1.clone(),444 1,426// 1,445 [1, 1, 1].to_vec()427// [1, 1, 1].to_vec()446 ));428// ));447429448 // approve430// // check balance (collection with id = 1, user id = 2)449 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));431// assert_eq!(TemplateModule::balance_count((1, 1)), 1);450 assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);432// assert_eq!(TemplateModule::item_id((1, 1)).owner, 1);451 });433// });452}434// }453435454#[test]436// #[test]455fn transfer_from() {437// fn transfer() {456 new_test_ext().execute_with(|| {438// new_test_ext().execute_with(|| {457 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();439// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();458 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();440// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();459 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();441// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();460442461 let size = 1024;443// let size = 1024;462 let origin1 = Origin::signed(1);444// let origin1 = Origin::signed(1);463 let origin2 = Origin::signed(2);445// let origin2 = Origin::signed(2);464 let origin3 = Origin::signed(3);446// let origin3 = Origin::signed(3);465447466 assert_ok!(TemplateModule::create_collection(448// assert_ok!(TemplateModule::create_collection(467 origin1.clone(),449// origin1.clone(),468 col_name1.clone(),450// col_name1.clone(),469 col_desc1.clone(),451// col_desc1.clone(),470 token_prefix1.clone(),452// token_prefix1.clone(),471 size453// size472 ));454// ));473 assert_ok!(TemplateModule::create_collection(455// assert_ok!(TemplateModule::create_collection(474 origin2.clone(),456// origin2.clone(),475 col_name1.clone(),457// col_name1.clone(),476 col_desc1.clone(),458// col_desc1.clone(),477 token_prefix1.clone(),459// token_prefix1.clone(),478 size460// size479 ));461// ));480 assert_ok!(TemplateModule::create_collection(462// assert_ok!(TemplateModule::create_collection(481 origin3.clone(),463// origin3.clone(),482 col_name1.clone(),464// col_name1.clone(),483 col_desc1.clone(),465// col_desc1.clone(),484 token_prefix1.clone(),466// token_prefix1.clone(),485 size467// size486 ));468// ));487469488 assert_eq!(TemplateModule::collection(1).owner, 1);470// assert_eq!(TemplateModule::collection(1).owner, 1);489 assert_eq!(TemplateModule::collection(2).owner, 2);471// assert_eq!(TemplateModule::collection(2).owner, 2);490 assert_eq!(TemplateModule::collection(3).owner, 3);472// assert_eq!(TemplateModule::collection(3).owner, 3);491473492 // create item474// // create item493 assert_ok!(TemplateModule::create_item(475// assert_ok!(TemplateModule::create_item(494 origin1.clone(),476// origin1.clone(),495 1,477// 1,496 [1, 1, 1].to_vec()478// [1, 1, 1].to_vec()497 ));479// ));498480499 // approve481// // transfer500 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));482// assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));501 assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));483// assert_eq!(TemplateModule::item_id((1, 1)).owner, 2);502 });503}504484505#[test]506fn index_list() {485// // balance_of check507 new_test_ext().execute_with(|| {508 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();486// assert_eq!(TemplateModule::balance_count((1, 1)), 0);509 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();487// assert_eq!(TemplateModule::balance_count((1, 2)), 1);510 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();488// });489// }511490512 let size = 1024;491// #[test]492// fn approve() {493// new_test_ext().execute_with(|| {513 let origin1 = Origin::signed(1);494// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();514 let origin2 = Origin::signed(2);495// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();515 let origin3 = Origin::signed(3);496// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();516497517 assert_ok!(TemplateModule::create_collection(498// let size = 1024;518 origin1.clone(),519 col_name1.clone(),499// let origin1 = Origin::signed(1);520 col_desc1.clone(),500// let origin2 = Origin::signed(2);521 token_prefix1.clone(),522 size523 ));524 assert_ok!(TemplateModule::create_collection(525 origin2.clone(),526 col_name1.clone(),501// let origin3 = Origin::signed(3);527 col_desc1.clone(),528 token_prefix1.clone(),529 size530 ));531 assert_ok!(TemplateModule::create_collection(532 origin3.clone(),533 col_name1.clone(),534 col_desc1.clone(),535 token_prefix1.clone(),536 size537 ));538502539 assert_eq!(TemplateModule::collection(1).owner, 1);503// assert_ok!(TemplateModule::create_collection(540 assert_eq!(TemplateModule::collection(2).owner, 2);504// origin1.clone(),541 assert_eq!(TemplateModule::collection(3).owner, 3);505// col_name1.clone(),542 // create items506// col_desc1.clone(),543 assert_ok!(TemplateModule::create_item(507// token_prefix1.clone(),544 origin1.clone(),508// size545 1,509// ));546 [1, 1, 1].to_vec()510// assert_ok!(TemplateModule::create_collection(547 ));511// origin2.clone(),548 assert_ok!(TemplateModule::create_item(512// col_name1.clone(),549 origin1.clone(),513// col_desc1.clone(),550 1,514// token_prefix1.clone(),551 [1, 1, 2].to_vec()515// size552 ));516// ));553 assert_ok!(TemplateModule::create_item(517// assert_ok!(TemplateModule::create_collection(554 origin1.clone(),518// origin3.clone(),555 1,519// col_name1.clone(),556 [1, 2, 3].to_vec()520// col_desc1.clone(),557 ));521// token_prefix1.clone(),558 assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3);522// size559 // burn one523// ));560 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2));524561 assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2);525// assert_eq!(TemplateModule::collection(1).owner, 1);562 // burn another one526// assert_eq!(TemplateModule::collection(2).owner, 2);563 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3));527// assert_eq!(TemplateModule::collection(3).owner, 3);564 assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1);528565 });529// // create item566}530// assert_ok!(TemplateModule::create_item(531// origin1.clone(),532// 1,533// [1, 1, 1].to_vec()534// ));535536// // approve537// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));538// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);539// });540// }541542// #[test]543// fn get_approved() {544// new_test_ext().execute_with(|| {545// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();546// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();547// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();548549// let size = 1024;550// let origin1 = Origin::signed(1);551// let origin2 = Origin::signed(2);552// let origin3 = Origin::signed(3);553554// assert_ok!(TemplateModule::create_collection(555// origin1.clone(),556// col_name1.clone(),557// col_desc1.clone(),558// token_prefix1.clone(),559// size560// ));561// assert_ok!(TemplateModule::create_collection(562// origin2.clone(),563// col_name1.clone(),564// col_desc1.clone(),565// token_prefix1.clone(),566// size567// ));568// assert_ok!(TemplateModule::create_collection(569// origin3.clone(),570// col_name1.clone(),571// col_desc1.clone(),572// token_prefix1.clone(),573// size574// ));575576// assert_eq!(TemplateModule::collection(1).owner, 1);577// assert_eq!(TemplateModule::collection(2).owner, 2);578// assert_eq!(TemplateModule::collection(3).owner, 3);579580// // create item581// assert_ok!(TemplateModule::create_item(582// origin1.clone(),583// 1,584// [1, 1, 1].to_vec()585// ));586587// // approve588// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));589// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);590// });591// }592593// #[test]594// fn transfer_from() {595// new_test_ext().execute_with(|| {596// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();597// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();598// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();599600// let size = 1024;601// let origin1 = Origin::signed(1);602// let origin2 = Origin::signed(2);603// let origin3 = Origin::signed(3);604605// assert_ok!(TemplateModule::create_collection(606// origin1.clone(),607// col_name1.clone(),608// col_desc1.clone(),609// token_prefix1.clone(),610// size611// ));612// assert_ok!(TemplateModule::create_collection(613// origin2.clone(),614// col_name1.clone(),615// col_desc1.clone(),616// token_prefix1.clone(),617// size618// ));619// assert_ok!(TemplateModule::create_collection(620// origin3.clone(),621// col_name1.clone(),622// col_desc1.clone(),623// token_prefix1.clone(),624// size625// ));626627// assert_eq!(TemplateModule::collection(1).owner, 1);628// assert_eq!(TemplateModule::collection(2).owner, 2);629// assert_eq!(TemplateModule::collection(3).owner, 3);630631// // create item632// assert_ok!(TemplateModule::create_item(633// origin1.clone(),634// 1,635// [1, 1, 1].to_vec()636// ));637638// // approve639// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));640// assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));641// });642// }643644// #[test]645// fn index_list() {646// new_test_ext().execute_with(|| {647// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();648// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();649// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();650651// let size = 1024;652// let origin1 = Origin::signed(1);653// let origin2 = Origin::signed(2);654// let origin3 = Origin::signed(3);655656// assert_ok!(TemplateModule::create_collection(657// origin1.clone(),658// col_name1.clone(),659// col_desc1.clone(),660// token_prefix1.clone(),661// size662// ));663// assert_ok!(TemplateModule::create_collection(664// origin2.clone(),665// col_name1.clone(),666// col_desc1.clone(),667// token_prefix1.clone(),668// size669// ));670// assert_ok!(TemplateModule::create_collection(671// origin3.clone(),672// col_name1.clone(),673// col_desc1.clone(),674// token_prefix1.clone(),675// size676// ));677678// assert_eq!(TemplateModule::collection(1).owner, 1);679// assert_eq!(TemplateModule::collection(2).owner, 2);680// assert_eq!(TemplateModule::collection(3).owner, 3);681// // create items682// assert_ok!(TemplateModule::create_item(683// origin1.clone(),684// 1,685// [1, 1, 1].to_vec()686// ));687// assert_ok!(TemplateModule::create_item(688// origin1.clone(),689// 1,690// [1, 1, 2].to_vec()691// ));692// assert_ok!(TemplateModule::create_item(693// origin1.clone(),694// 1,695// [1, 2, 3].to_vec()696// ));697// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3);698// // burn one699// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2));700// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2);701// // burn another one702// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3));703// assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1);704// });705// }567706