--- a/Cargo.lock +++ b/Cargo.lock @@ -3085,6 +3085,7 @@ dependencies = [ "frame-support", "frame-system", + "log", "pallet-transaction-payment", "parity-scale-codec", "serde", --- 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 --- 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())?; ::insert(item.collection, current_index); - >::insert(item.collection, current_index, item); + >::insert(item.collection, current_index, itemcopy); // Update balance - let new_balance = >::get(itemcopy.collection, owner.clone()).checked_add(value).unwrap(); - >::insert(itemcopy.collection, owner.clone(), new_balance); + let new_balance = >::get(item.collection, owner.clone()).checked_add(value).unwrap(); + >::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 = >::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())?; } --- a/pallets/nft/src/tests.rs +++ b/pallets/nft/src/tests.rs @@ -1,566 +1,705 @@ // Tests to be written here use crate::mock::*; +use crate::{CollectionMode, Ownership}; use frame_support::{assert_noop, assert_ok}; #[test] -fn create_collection_test() { +fn create_nft_item() { new_test_ext().execute_with(|| { let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); - let size = 1024; let origin1 = Origin::signed(1); assert_ok!(TemplateModule::create_collection( origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), - size + mode )); assert_eq!(TemplateModule::collection(1).owner, 1); + + + assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1)); + assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec()); }); } #[test] -fn change_collection_owner() { +fn create_refungible_item() { new_test_ext().execute_with(|| { let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(2000, 3); - let size = 1024; let origin1 = Origin::signed(1); - assert_ok!(TemplateModule::create_collection( origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), - size + mode )); - assert_ok!(TemplateModule::change_collection_owner( - origin1.clone(), - 1, - 2 - )); - assert_eq!(TemplateModule::collection(1).owner, 2); + assert_eq!(TemplateModule::collection(1).owner, 1); + + + assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1)); + assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec()); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 }); }); } #[test] -fn destroy_collection() { +fn transfer_refungible_item() { new_test_ext().execute_with(|| { let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(2000, 3); - let size = 1024; let origin1 = Origin::signed(1); - + let origin2 = Origin::signed(2); assert_ok!(TemplateModule::create_collection( origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), - size + mode )); - assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1)); - }); -} + assert_eq!(TemplateModule::collection(1).owner, 1); -#[test] -fn create_item() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1)); + assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec()); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 }); + assert_eq!(TemplateModule::balance_count(1,1), 1000); + assert_eq!(TemplateModule::address_tokens(1,1), [1]); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); + // change owner scenario + assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000)); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 }); + assert_eq!(TemplateModule::balance_count(1,1), 0); + assert_eq!(TemplateModule::balance_count(1,2), 1000); + assert_eq!(TemplateModule::address_tokens(1,1), []); + assert_eq!(TemplateModule::address_tokens(1,2), [1]); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); - assert_ok!(TemplateModule::create_item( - origin2.clone(), - 1, - [1, 1, 1].to_vec() - )); + // split item scenario + assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500)); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 }); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 }); + assert_eq!(TemplateModule::balance_count(1,2), 500); + assert_eq!(TemplateModule::balance_count(1,3), 500); + assert_eq!(TemplateModule::address_tokens(1,2), [1]); + assert_eq!(TemplateModule::address_tokens(1,3), [1]); - // check balance (collection with id = 1, user id = 2) - assert_eq!(TemplateModule::balance_count((1, 2)), 1); + // split item and new owner has account scenario + assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200)); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 }); + assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 }); + assert_eq!(TemplateModule::balance_count(1,2), 300); + assert_eq!(TemplateModule::balance_count(1,3), 700); + assert_eq!(TemplateModule::address_tokens(1,2), [1]); + assert_eq!(TemplateModule::address_tokens(1,3), [1]); }); } + #[test] -fn burn_item() { +fn transfer_nft_item() { new_test_ext().execute_with(|| { let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + let mode: CollectionMode = CollectionMode::NFT(2000); - let size = 1024; let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - assert_ok!(TemplateModule::create_collection( origin1.clone(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), - size + mode )); - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); - assert_ok!(TemplateModule::create_item( - origin2.clone(), - 1, - [1, 1, 1].to_vec() - )); + assert_eq!(TemplateModule::collection(1).owner, 1); - // check balance (collection with id = 1, user id = 2) - assert_eq!(TemplateModule::balance_count((1, 2)), 1); - // burn item - assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1)); - assert_noop!( - TemplateModule::burn_item(origin1.clone(), 1, 1), - "Item does not exists" - ); + assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1)); + assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec()); + assert_eq!(TemplateModule::balance_count(1,1), 1); + assert_eq!(TemplateModule::address_tokens(1,1), [1]); - assert_eq!(TemplateModule::balance_count((1, 1)), 0); + // default scenario + assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000)); + assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2); + assert_eq!(TemplateModule::balance_count(1,1), 0); + assert_eq!(TemplateModule::balance_count(1,2), 1); + assert_eq!(TemplateModule::address_tokens(1,1), []); + assert_eq!(TemplateModule::address_tokens(1,2), [1]); }); } -#[test] -fn add_collection_admin() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// #[test] +// fn create_collection_test() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// let size = 1024; +// let origin1 = Origin::signed(1); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_eq!(TemplateModule::collection(1).owner, 1); +// }); +// } - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// #[test] +// fn change_collection_owner() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - // collection admin - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3)); +// let size = 1024; +// let origin1 = Origin::signed(1); - assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true); - assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true); - }); -} +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::change_collection_owner( +// origin1.clone(), +// 1, +// 2 +// )); +// assert_eq!(TemplateModule::collection(1).owner, 2); +// }); +// } -#[test] -fn remove_collection_admin() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// #[test] +// fn destroy_collection() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// let size = 1024; +// let origin1 = Origin::signed(1); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1)); +// }); +// } - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// #[test] +// fn create_item() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - // collection admin - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); - assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3)); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); - assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true); - assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); +// assert_ok!(TemplateModule::create_item( +// origin2.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); - // remove admin - assert_ok!(TemplateModule::remove_collection_admin( - origin2.clone(), - 1, - 3 - )); - assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false); - }); -} +// // check balance (collection with id = 1, user id = 2) +// assert_eq!(TemplateModule::balance_count((1, 2)), 1); +// }); +// } -#[test] -fn balance_of() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// #[test] +// fn burn_item() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); +// assert_ok!(TemplateModule::create_item( +// origin2.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// // check balance (collection with id = 1, user id = 2) +// assert_eq!(TemplateModule::balance_count((1, 2)), 1); - // check balance before - assert_eq!(TemplateModule::balance_count((1, 1)), 0); +// // burn item +// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1)); +// assert_noop!( +// TemplateModule::burn_item(origin1.clone(), 1, 1), +// "Item does not exists" +// ); - // create item - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); +// assert_eq!(TemplateModule::balance_count((1, 1)), 0); +// }); +// } - // check balance (collection with id = 1, user id = 2) - assert_eq!(TemplateModule::balance_count((1, 1)), 1); - assert_eq!(TemplateModule::item_id((1, 1)).owner, 1); - }); -} +// #[test] +// fn add_collection_admin() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); -#[test] -fn transfer() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// // collection admin +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3)); - // create item - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); +// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true); +// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true); +// }); +// } - // transfer - assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2)); - assert_eq!(TemplateModule::item_id((1, 1)).owner, 2); +// #[test] +// fn remove_collection_admin() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - // balance_of check - assert_eq!(TemplateModule::balance_count((1, 1)), 0); - assert_eq!(TemplateModule::balance_count((1, 2)), 1); - }); -} +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); -#[test] -fn approve() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// // collection admin +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2)); +// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3)); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true); +// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true); - // create item - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); +// // remove admin +// assert_ok!(TemplateModule::remove_collection_admin( +// origin2.clone(), +// 1, +// 3 +// )); +// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false); +// }); +// } - // approve - assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); - assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true); - }); -} +// #[test] +// fn balance_of() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); -#[test] -fn get_approved() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// // check balance before +// assert_eq!(TemplateModule::balance_count((1, 1)), 0); - // create item - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); +// // create item +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); - // approve - assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); - assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true); - }); -} +// // check balance (collection with id = 1, user id = 2) +// assert_eq!(TemplateModule::balance_count((1, 1)), 1); +// assert_eq!(TemplateModule::item_id((1, 1)).owner, 1); +// }); +// } -#[test] -fn transfer_from() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// #[test] +// fn transfer() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); - // create item - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); +// // create item +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); - // approve - assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); - assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2)); - }); -} +// // transfer +// assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2)); +// assert_eq!(TemplateModule::item_id((1, 1)).owner, 2); -#[test] -fn index_list() { - new_test_ext().execute_with(|| { - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); +// // balance_of check +// assert_eq!(TemplateModule::balance_count((1, 1)), 0); +// assert_eq!(TemplateModule::balance_count((1, 2)), 1); +// }); +// } - let size = 1024; - let origin1 = Origin::signed(1); - let origin2 = Origin::signed(2); - let origin3 = Origin::signed(3); +// #[test] +// fn approve() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - assert_ok!(TemplateModule::create_collection( - origin1.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin2.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); - assert_ok!(TemplateModule::create_collection( - origin3.clone(), - col_name1.clone(), - col_desc1.clone(), - token_prefix1.clone(), - size - )); +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); + +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); + +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); + +// // create item +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); + +// // approve +// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); +// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true); +// }); +// } + +// #[test] +// fn get_approved() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); + +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); - assert_eq!(TemplateModule::collection(1).owner, 1); - assert_eq!(TemplateModule::collection(2).owner, 2); - assert_eq!(TemplateModule::collection(3).owner, 3); - // create items - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 1].to_vec() - )); - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 1, 2].to_vec() - )); - assert_ok!(TemplateModule::create_item( - origin1.clone(), - 1, - [1, 2, 3].to_vec() - )); - assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3); - // burn one - assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2)); - assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2); - // burn another one - assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3)); - assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1); - }); -} +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); + +// // create item +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); + +// // approve +// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); +// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true); +// }); +// } + +// #[test] +// fn transfer_from() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); + +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); + +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); + +// // create item +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); + +// // approve +// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1)); +// assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2)); +// }); +// } + +// #[test] +// fn index_list() { +// new_test_ext().execute_with(|| { +// let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); +// let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); +// let token_prefix1: Vec = b"token_prefix1\0".to_vec(); + +// let size = 1024; +// let origin1 = Origin::signed(1); +// let origin2 = Origin::signed(2); +// let origin3 = Origin::signed(3); + +// assert_ok!(TemplateModule::create_collection( +// origin1.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin2.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); +// assert_ok!(TemplateModule::create_collection( +// origin3.clone(), +// col_name1.clone(), +// col_desc1.clone(), +// token_prefix1.clone(), +// size +// )); + +// assert_eq!(TemplateModule::collection(1).owner, 1); +// assert_eq!(TemplateModule::collection(2).owner, 2); +// assert_eq!(TemplateModule::collection(3).owner, 3); +// // create items +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 1].to_vec() +// )); +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 1, 2].to_vec() +// )); +// assert_ok!(TemplateModule::create_item( +// origin1.clone(), +// 1, +// [1, 2, 3].to_vec() +// )); +// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3); +// // burn one +// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2)); +// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2); +// // burn another one +// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3)); +// assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1); +// }); +// }