difftreelog
Unit tests added
in: master
3 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -129,6 +129,18 @@
pub amount: u64
}
+#[derive(Encode, Decode, Default, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Debug))]
+pub struct VestingItem<AccountId, Moment>
+{
+ pub sender: AccountId,
+ pub recipient: AccountId,
+ pub collection_id: u64,
+ pub item_id: u64,
+ pub amount: u64,
+ pub vesting_date: Moment
+}
+
pub trait Trait: system::Trait {
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
@@ -156,6 +168,10 @@
pub FungibleItemList get(fn fungible_item_id): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => FungibleItemType<T::AccountId>;
pub ReFungibleItemList get(fn refungible_item_id): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => ReFungibleItemType<T::AccountId>;
+ // Active vesting list
+ // pub VestingList get(fn vesting): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => VestingItem<T::AccountId, T::Moment>;
+
+ /// Index list
pub AddressTokens get(fn address_tokens): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) T::AccountId => Vec<u64>;
// Sponsorship
@@ -636,6 +652,7 @@
fn burn_refungible_item(collection_id: u64, item_id: u64, owner: T::AccountId) -> DispatchResult {
+ ensure!(<ReFungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let collection = <ReFungibleItemList<T>>::get(collection_id, item_id);
let item = collection.owner.iter().filter(|&i| i.owner == owner).next().unwrap();
Self::remove_token_index(collection_id, item_id, owner.clone())?;
@@ -655,6 +672,7 @@
fn burn_nft_item(collection_id: u64, item_id: u64) -> DispatchResult {
+ ensure!(<NftItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let item = <NftItemList<T>>::get(collection_id, item_id);
Self::remove_token_index(collection_id, item_id, item.owner.clone())?;
@@ -671,6 +689,7 @@
fn burn_fungible_item(collection_id: u64, item_id: u64) -> DispatchResult {
+ ensure!(<FungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let item = <FungibleItemList<T>>::get(collection_id, item_id);
Self::remove_token_index(collection_id, item_id, item.owner.clone())?;
pallets/nft/src/tests.rsdiffbeforeafterboth1// Tests to be written here2use crate::mock::*;3use crate::{CollectionMode, Ownership, ApprovePermissions};4use frame_support::{assert_noop, assert_ok};56#[test]7fn create_nft_item() {8 new_test_ext().execute_with(|| {9 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();10 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();11 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12 let mode: CollectionMode = CollectionMode::NFT(2000);1314 let origin1 = Origin::signed(1);15 assert_ok!(TemplateModule::create_collection(16 origin1.clone(),17 col_name1.clone(),18 col_desc1.clone(),19 token_prefix1.clone(),20 mode21 ));22 assert_eq!(TemplateModule::collection(1).owner, 1);232425 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));26 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());27 });28}2930#[test]31fn create_refungible_item() {32 new_test_ext().execute_with(|| {33 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();34 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();35 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();36 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);3738 let origin1 = Origin::signed(1);39 assert_ok!(TemplateModule::create_collection(40 origin1.clone(),41 col_name1.clone(),42 col_desc1.clone(),43 token_prefix1.clone(),44 mode45 ));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 });52 });53}5455#[test]56fn create_fungible_item() {57 new_test_ext().execute_with(|| {58 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();59 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();60 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();61 let mode: CollectionMode = CollectionMode::Fungible(3);6263 let origin1 = Origin::signed(1);64 assert_ok!(TemplateModule::create_collection(65 origin1.clone(),66 col_name1.clone(),67 col_desc1.clone(),68 token_prefix1.clone(),69 mode70 ));71 assert_eq!(TemplateModule::collection(1).owner, 1);7273 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));74 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);75 assert_eq!(TemplateModule::balance_count(1,1), 1000);76 assert_eq!(TemplateModule::address_tokens(1,1), [1]);77 });78}7980#[test]81fn transfer_fungible_item() {82 new_test_ext().execute_with(|| {83 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();84 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();85 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();86 let mode: CollectionMode = CollectionMode::Fungible(3);8788 let origin1 = Origin::signed(1);89 let origin2 = Origin::signed(2);90 assert_ok!(TemplateModule::create_collection(91 origin1.clone(),92 col_name1.clone(),93 col_desc1.clone(),94 token_prefix1.clone(),95 mode96 ));97 assert_eq!(TemplateModule::collection(1).owner, 1);9899 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));100 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);101 assert_eq!(TemplateModule::balance_count(1,1), 1000);102 assert_eq!(TemplateModule::address_tokens(1,1), [1]);103104 // change owner scenario105 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));106 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);107 assert_eq!(TemplateModule::fungible_item_id(1,1).value, 1000);108 assert_eq!(TemplateModule::balance_count(1,1), 0);109 assert_eq!(TemplateModule::balance_count(1,2), 1000);110 assert_eq!(TemplateModule::address_tokens(1,1), []);111 assert_eq!(TemplateModule::address_tokens(1,2), [1]);112113 // split item scenario114 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));115 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);116 assert_eq!(TemplateModule::fungible_item_id(1,2).owner, 3);117 assert_eq!(TemplateModule::balance_count(1,2), 500);118 assert_eq!(TemplateModule::balance_count(1,3), 500);119 assert_eq!(TemplateModule::address_tokens(1,2), [1]);120 assert_eq!(TemplateModule::address_tokens(1,3), [2]);121122 // split item and new owner has account scenario123 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));124 assert_eq!(TemplateModule::fungible_item_id(1,1).value, 300);125 assert_eq!(TemplateModule::fungible_item_id(1,2).value, 700);126 assert_eq!(TemplateModule::balance_count(1,2), 300);127 assert_eq!(TemplateModule::balance_count(1,3), 700);128 assert_eq!(TemplateModule::address_tokens(1,2), [1]);129 assert_eq!(TemplateModule::address_tokens(1,3), [2]);130 });131}132133#[test]134fn transfer_refungible_item() {135 new_test_ext().execute_with(|| {136 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();137 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();138 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();139 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);140141 let origin1 = Origin::signed(1);142 let origin2 = Origin::signed(2);143 assert_ok!(TemplateModule::create_collection(144 origin1.clone(),145 col_name1.clone(),146 col_desc1.clone(),147 token_prefix1.clone(),148 mode149 ));150 assert_eq!(TemplateModule::collection(1).owner, 1);151152 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));153 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());154 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });155 assert_eq!(TemplateModule::balance_count(1,1), 1000);156 assert_eq!(TemplateModule::address_tokens(1,1), [1]);157158 // change owner scenario159 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));160 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 });161 assert_eq!(TemplateModule::balance_count(1,1), 0);162 assert_eq!(TemplateModule::balance_count(1,2), 1000);163 assert_eq!(TemplateModule::address_tokens(1,1), []);164 assert_eq!(TemplateModule::address_tokens(1,2), [1]);165166 // split item scenario167 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));168 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 });169 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 });170 assert_eq!(TemplateModule::balance_count(1,2), 500);171 assert_eq!(TemplateModule::balance_count(1,3), 500);172 assert_eq!(TemplateModule::address_tokens(1,2), [1]);173 assert_eq!(TemplateModule::address_tokens(1,3), [1]);174175 // split item and new owner has account scenario176 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));177 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 });178 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 });179 assert_eq!(TemplateModule::balance_count(1,2), 300);180 assert_eq!(TemplateModule::balance_count(1,3), 700);181 assert_eq!(TemplateModule::address_tokens(1,2), [1]);182 assert_eq!(TemplateModule::address_tokens(1,3), [1]);183 });184}185186187#[test]188fn transfer_nft_item() {189 new_test_ext().execute_with(|| {190 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();191 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();192 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();193 let mode: CollectionMode = CollectionMode::NFT(2000);194195 let origin1 = Origin::signed(1);196 assert_ok!(TemplateModule::create_collection(197 origin1.clone(),198 col_name1.clone(),199 col_desc1.clone(),200 token_prefix1.clone(),201 mode202 ));203 assert_eq!(TemplateModule::collection(1).owner, 1);204205206 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));207 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());208 assert_eq!(TemplateModule::balance_count(1,1), 1);209 assert_eq!(TemplateModule::address_tokens(1,1), [1]);210211 // default scenario212 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));213 assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2);214 assert_eq!(TemplateModule::balance_count(1,1), 0);215 assert_eq!(TemplateModule::balance_count(1,2), 1);216 assert_eq!(TemplateModule::address_tokens(1,1), []);217 assert_eq!(TemplateModule::address_tokens(1,2), [1]); 218 });219}220221#[test]222fn nft_approve_and_transfer_from() {223 new_test_ext().execute_with(|| {224 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();225 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();226 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();227 let mode: CollectionMode = CollectionMode::NFT(2000);228229 let origin1 = Origin::signed(1);230 let origin2 = Origin::signed(2);231 assert_ok!(TemplateModule::create_collection(232 origin1.clone(),233 col_name1.clone(),234 col_desc1.clone(),235 token_prefix1.clone(),236 mode237 ));238 assert_eq!(TemplateModule::collection(1).owner, 1);239240241 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));242 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());243 assert_eq!(TemplateModule::balance_count(1,1), 1);244 assert_eq!(TemplateModule::address_tokens(1,1), [1]);245246 assert_noop!(247 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),248 "You do not have permissions to modify this collection"249 );250251 // do approve252 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));253 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);254 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));255 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);256 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});257258 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1));259 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);260 });261}262263#[test]264fn refungible_approve_and_transfer_from() {265 new_test_ext().execute_with(|| {266 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();267 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();268 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();269 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);270271 let origin1 = Origin::signed(1);272 let origin2 = Origin::signed(2);273 assert_ok!(TemplateModule::create_collection(274 origin1.clone(),275 col_name1.clone(),276 col_desc1.clone(),277 token_prefix1.clone(),278 mode279 ));280 assert_eq!(TemplateModule::collection(1).owner, 1);281282 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));283 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());284 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });285 assert_eq!(TemplateModule::balance_count(1,1), 1000);286 assert_eq!(TemplateModule::address_tokens(1,1), [1]);287288 assert_noop!(289 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),290 "You do not have permissions to modify this collection"291 );292293 // do approve294 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));295 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);296 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));297 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);298 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});299300 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));301 assert_eq!(TemplateModule::balance_count(1,1), 900);302 assert_eq!(TemplateModule::balance_count(1,3), 100);303 assert_eq!(TemplateModule::address_tokens(1,1), [1]);304 assert_eq!(TemplateModule::address_tokens(1,3), [1]);305306 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);307 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});308 });309}310311#[test]312fn fungible_approve_and_transfer_from() {313 new_test_ext().execute_with(|| {314 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();315 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();316 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();317 let mode: CollectionMode = CollectionMode::Fungible(3);318319 let origin1 = Origin::signed(1);320 let origin2 = Origin::signed(2);321 assert_ok!(TemplateModule::create_collection(322 origin1.clone(),323 col_name1.clone(),324 col_desc1.clone(),325 token_prefix1.clone(),326 mode327 ));328 assert_eq!(TemplateModule::collection(1).owner, 1);329330 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));331 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);332 assert_eq!(TemplateModule::balance_count(1,1), 1000);333 assert_eq!(TemplateModule::address_tokens(1,1), [1]);334335 assert_noop!(336 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),337 "You do not have permissions to modify this collection"338 );339340 // do approve341 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));342 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);343 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));344 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);345 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});346347 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));348 assert_eq!(TemplateModule::balance_count(1,1), 900);349 assert_eq!(TemplateModule::balance_count(1,3), 100);350 assert_eq!(TemplateModule::address_tokens(1,1), [1]);351 assert_eq!(TemplateModule::address_tokens(1,3), [2]);352353 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);354 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});355356 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));357 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 900));358 assert_eq!(TemplateModule::balance_count(1,1), 0);359 assert_eq!(TemplateModule::balance_count(1,3), 1000);360 assert_eq!(TemplateModule::address_tokens(1,1), []);361 assert_eq!(TemplateModule::address_tokens(1,3), [2]);362363 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);364 });365}366367368369370371372373374375376377378379380381382// #[test]383// fn create_collection_test() {384// new_test_ext().execute_with(|| {385// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();386// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();387// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();388389// let size = 1024;390// let origin1 = Origin::signed(1);391// assert_ok!(TemplateModule::create_collection(392// origin1.clone(),393// col_name1.clone(),394// col_desc1.clone(),395// token_prefix1.clone(),396// size397// ));398// assert_eq!(TemplateModule::collection(1).owner, 1);399// });400// }401402// #[test]403// fn change_collection_owner() {404// new_test_ext().execute_with(|| {405// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();406// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();407// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();408409// let size = 1024;410// let origin1 = Origin::signed(1);411412// assert_ok!(TemplateModule::create_collection(413// origin1.clone(),414// col_name1.clone(),415// col_desc1.clone(),416// token_prefix1.clone(),417// size418// ));419// assert_ok!(TemplateModule::change_collection_owner(420// origin1.clone(),421// 1,422// 2423// ));424// assert_eq!(TemplateModule::collection(1).owner, 2);425// });426// }427428// #[test]429// fn destroy_collection() {430// new_test_ext().execute_with(|| {431// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();432// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();433// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();434435// let size = 1024;436// let origin1 = Origin::signed(1);437438// assert_ok!(TemplateModule::create_collection(439// origin1.clone(),440// col_name1.clone(),441// col_desc1.clone(),442// token_prefix1.clone(),443// size444// ));445// assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));446// });447// }448449// #[test]450// fn create_item() {451// new_test_ext().execute_with(|| {452// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();453// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();454// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();455456// let size = 1024;457// let origin1 = Origin::signed(1);458// let origin2 = Origin::signed(2);459460// assert_ok!(TemplateModule::create_collection(461// origin1.clone(),462// col_name1.clone(),463// col_desc1.clone(),464// token_prefix1.clone(),465// size466// ));467// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));468// assert_ok!(TemplateModule::create_item(469// origin2.clone(),470// 1,471// [1, 1, 1].to_vec()472// ));473474// // check balance (collection with id = 1, user id = 2)475// assert_eq!(TemplateModule::balance_count((1, 2)), 1);476// });477// }478479// #[test]480// fn burn_item() {481// new_test_ext().execute_with(|| {482// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();483// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();484// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();485486// let size = 1024;487// let origin1 = Origin::signed(1);488// let origin2 = Origin::signed(2);489490// assert_ok!(TemplateModule::create_collection(491// origin1.clone(),492// col_name1.clone(),493// col_desc1.clone(),494// token_prefix1.clone(),495// size496// ));497// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));498// assert_ok!(TemplateModule::create_item(499// origin2.clone(),500// 1,501// [1, 1, 1].to_vec()502// ));503504// // check balance (collection with id = 1, user id = 2)505// assert_eq!(TemplateModule::balance_count((1, 2)), 1);506507// // burn item508// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));509// assert_noop!(510// TemplateModule::burn_item(origin1.clone(), 1, 1),511// "Item does not exists"512// );513514// assert_eq!(TemplateModule::balance_count((1, 1)), 0);515// });516// }517518// #[test]519// fn add_collection_admin() {520// new_test_ext().execute_with(|| {521// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();522// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();523// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();524525// let size = 1024;526// let origin1 = Origin::signed(1);527// let origin2 = Origin::signed(2);528// let origin3 = Origin::signed(3);529530// assert_ok!(TemplateModule::create_collection(531// origin1.clone(),532// col_name1.clone(),533// col_desc1.clone(),534// token_prefix1.clone(),535// size536// ));537// assert_ok!(TemplateModule::create_collection(538// origin2.clone(),539// col_name1.clone(),540// col_desc1.clone(),541// token_prefix1.clone(),542// size543// ));544// assert_ok!(TemplateModule::create_collection(545// origin3.clone(),546// col_name1.clone(),547// col_desc1.clone(),548// token_prefix1.clone(),549// size550// ));551552// assert_eq!(TemplateModule::collection(1).owner, 1);553// assert_eq!(TemplateModule::collection(2).owner, 2);554// assert_eq!(TemplateModule::collection(3).owner, 3);555556// // collection admin557// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));558// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));559560// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);561// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);562// });563// }564565// #[test]566// fn remove_collection_admin() {567// new_test_ext().execute_with(|| {568// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();569// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();570// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();571572// let size = 1024;573// let origin1 = Origin::signed(1);574// let origin2 = Origin::signed(2);575// let origin3 = Origin::signed(3);576577// assert_ok!(TemplateModule::create_collection(578// origin1.clone(),579// col_name1.clone(),580// col_desc1.clone(),581// token_prefix1.clone(),582// size583// ));584// assert_ok!(TemplateModule::create_collection(585// origin2.clone(),586// col_name1.clone(),587// col_desc1.clone(),588// token_prefix1.clone(),589// size590// ));591// assert_ok!(TemplateModule::create_collection(592// origin3.clone(),593// col_name1.clone(),594// col_desc1.clone(),595// token_prefix1.clone(),596// size597// ));598599// assert_eq!(TemplateModule::collection(1).owner, 1);600// assert_eq!(TemplateModule::collection(2).owner, 2);601// assert_eq!(TemplateModule::collection(3).owner, 3);602603// // collection admin604// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));605// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));606607// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);608// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);609610// // remove admin611// assert_ok!(TemplateModule::remove_collection_admin(612// origin2.clone(),613// 1,614// 3615// ));616// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);617// });618// }619620// #[test]621// fn balance_of() {622// new_test_ext().execute_with(|| {623// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();624// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();625// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();626627// let size = 1024;628// let origin1 = Origin::signed(1);629// let origin2 = Origin::signed(2);630// let origin3 = Origin::signed(3);631632// assert_ok!(TemplateModule::create_collection(633// origin1.clone(),634// col_name1.clone(),635// col_desc1.clone(),636// token_prefix1.clone(),637// size638// ));639// assert_ok!(TemplateModule::create_collection(640// origin2.clone(),641// col_name1.clone(),642// col_desc1.clone(),643// token_prefix1.clone(),644// size645// ));646// assert_ok!(TemplateModule::create_collection(647// origin3.clone(),648// col_name1.clone(),649// col_desc1.clone(),650// token_prefix1.clone(),651// size652// ));653654// assert_eq!(TemplateModule::collection(1).owner, 1);655// assert_eq!(TemplateModule::collection(2).owner, 2);656// assert_eq!(TemplateModule::collection(3).owner, 3);657658// // check balance before659// assert_eq!(TemplateModule::balance_count((1, 1)), 0);660661// // create item662// assert_ok!(TemplateModule::create_item(663// origin1.clone(),664// 1,665// [1, 1, 1].to_vec()666// ));667668// // check balance (collection with id = 1, user id = 2)669// assert_eq!(TemplateModule::balance_count((1, 1)), 1);670// assert_eq!(TemplateModule::item_id((1, 1)).owner, 1);671// });672// }673674// #[test]675// fn transfer() {676// new_test_ext().execute_with(|| {677// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();678// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();679// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();680681// let size = 1024;682// let origin1 = Origin::signed(1);683// let origin2 = Origin::signed(2);684// let origin3 = Origin::signed(3);685686// assert_ok!(TemplateModule::create_collection(687// origin1.clone(),688// col_name1.clone(),689// col_desc1.clone(),690// token_prefix1.clone(),691// size692// ));693// assert_ok!(TemplateModule::create_collection(694// origin2.clone(),695// col_name1.clone(),696// col_desc1.clone(),697// token_prefix1.clone(),698// size699// ));700// assert_ok!(TemplateModule::create_collection(701// origin3.clone(),702// col_name1.clone(),703// col_desc1.clone(),704// token_prefix1.clone(),705// size706// ));707708// assert_eq!(TemplateModule::collection(1).owner, 1);709// assert_eq!(TemplateModule::collection(2).owner, 2);710// assert_eq!(TemplateModule::collection(3).owner, 3);711712// // create item713// assert_ok!(TemplateModule::create_item(714// origin1.clone(),715// 1,716// [1, 1, 1].to_vec()717// ));718719// // transfer720// assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));721// assert_eq!(TemplateModule::item_id((1, 1)).owner, 2);722723// // balance_of check724// assert_eq!(TemplateModule::balance_count((1, 1)), 0);725// assert_eq!(TemplateModule::balance_count((1, 2)), 1);726// });727// }728729// #[test]730// fn approve() {731// new_test_ext().execute_with(|| {732// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();733// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();734// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();735736// let size = 1024;737// let origin1 = Origin::signed(1);738// let origin2 = Origin::signed(2);739// let origin3 = Origin::signed(3);740741// assert_ok!(TemplateModule::create_collection(742// origin1.clone(),743// col_name1.clone(),744// col_desc1.clone(),745// token_prefix1.clone(),746// size747// ));748// assert_ok!(TemplateModule::create_collection(749// origin2.clone(),750// col_name1.clone(),751// col_desc1.clone(),752// token_prefix1.clone(),753// size754// ));755// assert_ok!(TemplateModule::create_collection(756// origin3.clone(),757// col_name1.clone(),758// col_desc1.clone(),759// token_prefix1.clone(),760// size761// ));762763// assert_eq!(TemplateModule::collection(1).owner, 1);764// assert_eq!(TemplateModule::collection(2).owner, 2);765// assert_eq!(TemplateModule::collection(3).owner, 3);766767// // create item768// assert_ok!(TemplateModule::create_item(769// origin1.clone(),770// 1,771// [1, 1, 1].to_vec()772// ));773774// // approve775// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));776// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);777// });778// }779780// #[test]781// fn get_approved() {782// new_test_ext().execute_with(|| {783// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();784// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();785// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();786787// let size = 1024;788// let origin1 = Origin::signed(1);789// let origin2 = Origin::signed(2);790// let origin3 = Origin::signed(3);791792// assert_ok!(TemplateModule::create_collection(793// origin1.clone(),794// col_name1.clone(),795// col_desc1.clone(),796// token_prefix1.clone(),797// size798// ));799// assert_ok!(TemplateModule::create_collection(800// origin2.clone(),801// col_name1.clone(),802// col_desc1.clone(),803// token_prefix1.clone(),804// size805// ));806// assert_ok!(TemplateModule::create_collection(807// origin3.clone(),808// col_name1.clone(),809// col_desc1.clone(),810// token_prefix1.clone(),811// size812// ));813814// assert_eq!(TemplateModule::collection(1).owner, 1);815// assert_eq!(TemplateModule::collection(2).owner, 2);816// assert_eq!(TemplateModule::collection(3).owner, 3);817818// // create item819// assert_ok!(TemplateModule::create_item(820// origin1.clone(),821// 1,822// [1, 1, 1].to_vec()823// ));824825// // approve826// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));827// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);828// });829// }830831// #[test]832// fn transfer_from() {833// new_test_ext().execute_with(|| {834// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();835// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();836// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();837838// let size = 1024;839// let origin1 = Origin::signed(1);840// let origin2 = Origin::signed(2);841// let origin3 = Origin::signed(3);842843// assert_ok!(TemplateModule::create_collection(844// origin1.clone(),845// col_name1.clone(),846// col_desc1.clone(),847// token_prefix1.clone(),848// size849// ));850// assert_ok!(TemplateModule::create_collection(851// origin2.clone(),852// col_name1.clone(),853// col_desc1.clone(),854// token_prefix1.clone(),855// size856// ));857// assert_ok!(TemplateModule::create_collection(858// origin3.clone(),859// col_name1.clone(),860// col_desc1.clone(),861// token_prefix1.clone(),862// size863// ));864865// assert_eq!(TemplateModule::collection(1).owner, 1);866// assert_eq!(TemplateModule::collection(2).owner, 2);867// assert_eq!(TemplateModule::collection(3).owner, 3);868869// // create item870// assert_ok!(TemplateModule::create_item(871// origin1.clone(),872// 1,873// [1, 1, 1].to_vec()874// ));875876// // approve877// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));878// assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));879// });880// }881882// #[test]883// fn index_list() {884// new_test_ext().execute_with(|| {885// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();886// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();887// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();888889// let size = 1024;890// let origin1 = Origin::signed(1);891// let origin2 = Origin::signed(2);892// let origin3 = Origin::signed(3);893894// assert_ok!(TemplateModule::create_collection(895// origin1.clone(),896// col_name1.clone(),897// col_desc1.clone(),898// token_prefix1.clone(),899// size900// ));901// assert_ok!(TemplateModule::create_collection(902// origin2.clone(),903// col_name1.clone(),904// col_desc1.clone(),905// token_prefix1.clone(),906// size907// ));908// assert_ok!(TemplateModule::create_collection(909// origin3.clone(),910// col_name1.clone(),911// col_desc1.clone(),912// token_prefix1.clone(),913// size914// ));915916// assert_eq!(TemplateModule::collection(1).owner, 1);917// assert_eq!(TemplateModule::collection(2).owner, 2);918// assert_eq!(TemplateModule::collection(3).owner, 3);919// // create items920// assert_ok!(TemplateModule::create_item(921// origin1.clone(),922// 1,923// [1, 1, 1].to_vec()924// ));925// assert_ok!(TemplateModule::create_item(926// origin1.clone(),927// 1,928// [1, 1, 2].to_vec()929// ));930// assert_ok!(TemplateModule::create_item(931// origin1.clone(),932// 1,933// [1, 2, 3].to_vec()934// ));935// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3);936// // burn one937// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2));938// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2);939// // burn another one940// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3));941// assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1);942// });943// }1// Tests to be written here2use crate::mock::*;3use crate::{CollectionMode, Ownership, ApprovePermissions};4use frame_support::{assert_noop, assert_ok};56#[test]7fn create_nft_item() {8 new_test_ext().execute_with(|| {9 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();10 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();11 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12 let mode: CollectionMode = CollectionMode::NFT(2000);1314 let origin1 = Origin::signed(1);15 assert_ok!(TemplateModule::create_collection(16 origin1.clone(),17 col_name1.clone(),18 col_desc1.clone(),19 token_prefix1.clone(),20 mode21 ));22 assert_eq!(TemplateModule::collection(1).owner, 1);232425 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));26 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());27 });28}2930#[test]31fn create_refungible_item() {32 new_test_ext().execute_with(|| {33 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();34 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();35 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();36 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);3738 let origin1 = Origin::signed(1);39 assert_ok!(TemplateModule::create_collection(40 origin1.clone(),41 col_name1.clone(),42 col_desc1.clone(),43 token_prefix1.clone(),44 mode45 ));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 });52 });53}5455#[test]56fn create_fungible_item() {57 new_test_ext().execute_with(|| {58 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();59 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();60 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();61 let mode: CollectionMode = CollectionMode::Fungible(3);6263 let origin1 = Origin::signed(1);64 assert_ok!(TemplateModule::create_collection(65 origin1.clone(),66 col_name1.clone(),67 col_desc1.clone(),68 token_prefix1.clone(),69 mode70 ));71 assert_eq!(TemplateModule::collection(1).owner, 1);7273 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));74 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);75 assert_eq!(TemplateModule::balance_count(1,1), 1000);76 assert_eq!(TemplateModule::address_tokens(1,1), [1]);77 });78}7980#[test]81fn transfer_fungible_item() {82 new_test_ext().execute_with(|| {83 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();84 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();85 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();86 let mode: CollectionMode = CollectionMode::Fungible(3);8788 let origin1 = Origin::signed(1);89 let origin2 = Origin::signed(2);90 assert_ok!(TemplateModule::create_collection(91 origin1.clone(),92 col_name1.clone(),93 col_desc1.clone(),94 token_prefix1.clone(),95 mode96 ));97 assert_eq!(TemplateModule::collection(1).owner, 1);9899 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));100 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);101 assert_eq!(TemplateModule::balance_count(1,1), 1000);102 assert_eq!(TemplateModule::address_tokens(1,1), [1]);103104 // change owner scenario105 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));106 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);107 assert_eq!(TemplateModule::fungible_item_id(1,1).value, 1000);108 assert_eq!(TemplateModule::balance_count(1,1), 0);109 assert_eq!(TemplateModule::balance_count(1,2), 1000);110 assert_eq!(TemplateModule::address_tokens(1,1), []);111 assert_eq!(TemplateModule::address_tokens(1,2), [1]);112113 // split item scenario114 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));115 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);116 assert_eq!(TemplateModule::fungible_item_id(1,2).owner, 3);117 assert_eq!(TemplateModule::balance_count(1,2), 500);118 assert_eq!(TemplateModule::balance_count(1,3), 500);119 assert_eq!(TemplateModule::address_tokens(1,2), [1]);120 assert_eq!(TemplateModule::address_tokens(1,3), [2]);121122 // split item and new owner has account scenario123 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));124 assert_eq!(TemplateModule::fungible_item_id(1,1).value, 300);125 assert_eq!(TemplateModule::fungible_item_id(1,2).value, 700);126 assert_eq!(TemplateModule::balance_count(1,2), 300);127 assert_eq!(TemplateModule::balance_count(1,3), 700);128 assert_eq!(TemplateModule::address_tokens(1,2), [1]);129 assert_eq!(TemplateModule::address_tokens(1,3), [2]);130 });131}132133#[test]134fn transfer_refungible_item() {135 new_test_ext().execute_with(|| {136 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();137 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();138 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();139 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);140141 let origin1 = Origin::signed(1);142 let origin2 = Origin::signed(2);143 assert_ok!(TemplateModule::create_collection(144 origin1.clone(),145 col_name1.clone(),146 col_desc1.clone(),147 token_prefix1.clone(),148 mode149 ));150 assert_eq!(TemplateModule::collection(1).owner, 1);151152 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));153 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());154 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });155 assert_eq!(TemplateModule::balance_count(1,1), 1000);156 assert_eq!(TemplateModule::address_tokens(1,1), [1]);157158 // change owner scenario159 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));160 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 });161 assert_eq!(TemplateModule::balance_count(1,1), 0);162 assert_eq!(TemplateModule::balance_count(1,2), 1000);163 assert_eq!(TemplateModule::address_tokens(1,1), []);164 assert_eq!(TemplateModule::address_tokens(1,2), [1]);165166 // split item scenario167 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));168 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 });169 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 });170 assert_eq!(TemplateModule::balance_count(1,2), 500);171 assert_eq!(TemplateModule::balance_count(1,3), 500);172 assert_eq!(TemplateModule::address_tokens(1,2), [1]);173 assert_eq!(TemplateModule::address_tokens(1,3), [1]);174175 // split item and new owner has account scenario176 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));177 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 });178 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 });179 assert_eq!(TemplateModule::balance_count(1,2), 300);180 assert_eq!(TemplateModule::balance_count(1,3), 700);181 assert_eq!(TemplateModule::address_tokens(1,2), [1]);182 assert_eq!(TemplateModule::address_tokens(1,3), [1]);183 });184}185186#[test]187fn transfer_nft_item() {188 new_test_ext().execute_with(|| {189 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();190 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();191 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();192 let mode: CollectionMode = CollectionMode::NFT(2000);193194 let origin1 = Origin::signed(1);195 assert_ok!(TemplateModule::create_collection(196 origin1.clone(),197 col_name1.clone(),198 col_desc1.clone(),199 token_prefix1.clone(),200 mode201 ));202 assert_eq!(TemplateModule::collection(1).owner, 1);203204205 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));206 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());207 assert_eq!(TemplateModule::balance_count(1,1), 1);208 assert_eq!(TemplateModule::address_tokens(1,1), [1]);209210 // default scenario211 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));212 assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2);213 assert_eq!(TemplateModule::balance_count(1,1), 0);214 assert_eq!(TemplateModule::balance_count(1,2), 1);215 assert_eq!(TemplateModule::address_tokens(1,1), []);216 assert_eq!(TemplateModule::address_tokens(1,2), [1]); 217 });218}219220#[test]221fn nft_approve_and_transfer_from() {222 new_test_ext().execute_with(|| {223 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();224 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();225 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();226 let mode: CollectionMode = CollectionMode::NFT(2000);227228 let origin1 = Origin::signed(1);229 let origin2 = Origin::signed(2);230 assert_ok!(TemplateModule::create_collection(231 origin1.clone(),232 col_name1.clone(),233 col_desc1.clone(),234 token_prefix1.clone(),235 mode236 ));237 assert_eq!(TemplateModule::collection(1).owner, 1);238239240 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));241 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());242 assert_eq!(TemplateModule::balance_count(1,1), 1);243 assert_eq!(TemplateModule::address_tokens(1,1), [1]);244245 assert_noop!(246 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),247 "You do not have permissions to modify this collection"248 );249250 // do approve251 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));252 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);253 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));254 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);255 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});256257 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1));258 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);259 });260}261262#[test]263fn refungible_approve_and_transfer_from() {264 new_test_ext().execute_with(|| {265 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();266 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();267 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();268 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);269270 let origin1 = Origin::signed(1);271 let origin2 = Origin::signed(2);272 assert_ok!(TemplateModule::create_collection(273 origin1.clone(),274 col_name1.clone(),275 col_desc1.clone(),276 token_prefix1.clone(),277 mode278 ));279 assert_eq!(TemplateModule::collection(1).owner, 1);280281 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));282 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());283 assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });284 assert_eq!(TemplateModule::balance_count(1,1), 1000);285 assert_eq!(TemplateModule::address_tokens(1,1), [1]);286287 assert_noop!(288 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),289 "You do not have permissions to modify this collection"290 );291292 // do approve293 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));294 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);295 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));296 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);297 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});298299 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));300 assert_eq!(TemplateModule::balance_count(1,1), 900);301 assert_eq!(TemplateModule::balance_count(1,3), 100);302 assert_eq!(TemplateModule::address_tokens(1,1), [1]);303 assert_eq!(TemplateModule::address_tokens(1,3), [1]);304305 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);306 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});307 });308}309310#[test]311fn fungible_approve_and_transfer_from() {312 new_test_ext().execute_with(|| {313 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();314 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();315 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();316 let mode: CollectionMode = CollectionMode::Fungible(3);317318 let origin1 = Origin::signed(1);319 let origin2 = Origin::signed(2);320 assert_ok!(TemplateModule::create_collection(321 origin1.clone(),322 col_name1.clone(),323 col_desc1.clone(),324 token_prefix1.clone(),325 mode326 ));327 assert_eq!(TemplateModule::collection(1).owner, 1);328329 assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));330 assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);331 assert_eq!(TemplateModule::balance_count(1,1), 1000);332 assert_eq!(TemplateModule::address_tokens(1,1), [1]);333334 assert_noop!(335 TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),336 "You do not have permissions to modify this collection"337 );338339 // do approve340 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));341 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);342 assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));343 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);344 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});345346 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));347 assert_eq!(TemplateModule::balance_count(1,1), 900);348 assert_eq!(TemplateModule::balance_count(1,3), 100);349 assert_eq!(TemplateModule::address_tokens(1,1), [1]);350 assert_eq!(TemplateModule::address_tokens(1,3), [2]);351352 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);353 assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});354355 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));356 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 900));357 assert_eq!(TemplateModule::balance_count(1,1), 0);358 assert_eq!(TemplateModule::balance_count(1,3), 1000);359 assert_eq!(TemplateModule::address_tokens(1,1), []);360 assert_eq!(TemplateModule::address_tokens(1,3), [2]);361362 assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);363 });364}365366#[test]367fn change_collection_owner() {368 new_test_ext().execute_with(|| {369 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();370 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();371 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();372 let mode: CollectionMode = CollectionMode::NFT(2000);373374 let origin1 = Origin::signed(1);375 assert_ok!(TemplateModule::create_collection(376 origin1.clone(),377 col_name1.clone(),378 col_desc1.clone(),379 token_prefix1.clone(),380 mode381 ));382 assert_ok!(TemplateModule::change_collection_owner(383 origin1.clone(),384 1,385 2386 ));387 assert_eq!(TemplateModule::collection(1).owner, 2);388 });389}390391#[test]392fn destroy_collection() {393 new_test_ext().execute_with(|| {394 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();395 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();396 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();397 let mode: CollectionMode = CollectionMode::NFT(2000);398399 let origin1 = Origin::signed(1);400 assert_ok!(TemplateModule::create_collection(401 origin1.clone(),402 col_name1.clone(),403 col_desc1.clone(),404 token_prefix1.clone(),405 mode406 ));407 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));408 });409}410411#[test]412fn burn_nft_item() {413 new_test_ext().execute_with(|| {414 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();415 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();416 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();417 let mode: CollectionMode = CollectionMode::NFT(2000);418419 let origin1 = Origin::signed(1);420 let origin2 = Origin::signed(2);421 assert_ok!(TemplateModule::create_collection(422 origin1.clone(),423 col_name1.clone(),424 col_desc1.clone(),425 token_prefix1.clone(),426 mode427 ));428 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));429 assert_ok!(TemplateModule::create_item(430 origin2.clone(),431 1,432 [1, 2, 3].to_vec(),433 1434 ));435436 assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());437438 // check balance (collection with id = 1, user id = 1)439 assert_eq!(TemplateModule::balance_count(1, 1), 1);440441 // burn item442 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));443 assert_noop!(444 TemplateModule::burn_item(origin1.clone(), 1, 1),445 "Item does not exists"446 );447448 assert_eq!(TemplateModule::balance_count(1, 1), 0);449 });450}451452#[test]453fn burn_fungible_item() {454 new_test_ext().execute_with(|| {455 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();456 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();457 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();458 let mode: CollectionMode = CollectionMode::Fungible(3);459460 let origin1 = Origin::signed(1);461 let origin2 = Origin::signed(2);462 assert_ok!(TemplateModule::create_collection(463 origin1.clone(),464 col_name1.clone(),465 col_desc1.clone(),466 token_prefix1.clone(),467 mode468 ));469 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));470 assert_ok!(TemplateModule::create_item(471 origin2.clone(),472 1,473 [].to_vec(),474 1475 ));476477 // check balance (collection with id = 1, user id = 1)478 assert_eq!(TemplateModule::balance_count(1, 1), 1000);479480 // burn item481 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));482 assert_noop!(483 TemplateModule::burn_item(origin1.clone(), 1, 1),484 "Item does not exists"485 );486487 assert_eq!(TemplateModule::balance_count(1, 1), 0);488 });489}490491#[test]492fn burn_refungible_item() {493 new_test_ext().execute_with(|| {494 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();495 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();496 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();497 let mode: CollectionMode = CollectionMode::ReFungible(200, 3);498499 let origin1 = Origin::signed(1);500 let origin2 = Origin::signed(2);501 assert_ok!(TemplateModule::create_collection(502 origin1.clone(),503 col_name1.clone(),504 col_desc1.clone(),505 token_prefix1.clone(),506 mode507 ));508 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));509 assert_ok!(TemplateModule::create_item(510 origin2.clone(),511 1,512 [1,2,3].to_vec(),513 1514 ));515516 assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());517518 // check balance (collection with id = 1, user id = 2)519 assert_eq!(TemplateModule::balance_count(1, 1), 1000);520521 // burn item522 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));523 assert_noop!(524 TemplateModule::burn_item(origin1.clone(), 1, 1),525 "Item does not exists"526 );527528 assert_eq!(TemplateModule::balance_count(1, 1), 0);529 });530}531532#[test]533fn add_collection_admin() {534 new_test_ext().execute_with(|| {535 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();536 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();537 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();538 let mode: CollectionMode = CollectionMode::NFT(2000);539540 let origin1 = Origin::signed(1);541 let origin2 = Origin::signed(2);542 let origin3 = Origin::signed(3);543 assert_ok!(TemplateModule::create_collection(544 origin1.clone(),545 col_name1.clone(),546 col_desc1.clone(),547 token_prefix1.clone(),548 mode.clone()549 ));550 assert_ok!(TemplateModule::create_collection(551 origin2.clone(),552 col_name1.clone(),553 col_desc1.clone(),554 token_prefix1.clone(),555 mode.clone()556 ));557 assert_ok!(TemplateModule::create_collection(558 origin3.clone(),559 col_name1.clone(),560 col_desc1.clone(),561 token_prefix1.clone(),562 mode.clone()563 ));564565 assert_eq!(TemplateModule::collection(1).owner, 1);566 assert_eq!(TemplateModule::collection(2).owner, 2);567 assert_eq!(TemplateModule::collection(3).owner, 3);568569 // collection admin570 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));571 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));572573 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);574 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);575 });576}577578#[test]579fn remove_collection_admin() {580 new_test_ext().execute_with(|| {581 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();582 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();583 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();584 let mode: CollectionMode = CollectionMode::NFT(2000);585586 let origin1 = Origin::signed(1);587 let origin2 = Origin::signed(2);588 let origin3 = Origin::signed(3);589590 assert_ok!(TemplateModule::create_collection(591 origin1.clone(),592 col_name1.clone(),593 col_desc1.clone(),594 token_prefix1.clone(),595 mode.clone()596 ));597 assert_ok!(TemplateModule::create_collection(598 origin2.clone(),599 col_name1.clone(),600 col_desc1.clone(),601 token_prefix1.clone(),602 mode.clone()603 ));604 assert_ok!(TemplateModule::create_collection(605 origin3.clone(),606 col_name1.clone(),607 col_desc1.clone(),608 token_prefix1.clone(),609 mode.clone()610 ));611612 assert_eq!(TemplateModule::collection(1).owner, 1);613 assert_eq!(TemplateModule::collection(2).owner, 2);614 assert_eq!(TemplateModule::collection(3).owner, 3);615616 // collection admin617 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));618 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));619620 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);621 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);622623 // remove admin624 assert_ok!(TemplateModule::remove_collection_admin(625 origin2.clone(),626 1,627 3628 ));629 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);630 });631}632633#[test]634fn balance_of() {635 new_test_ext().execute_with(|| {636 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();637 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();638 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();639 let nft_mode: CollectionMode = CollectionMode::NFT(2000);640 let furg_mode: CollectionMode = CollectionMode::Fungible(3);641 let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);642643 let origin1 = Origin::signed(1);644645 assert_ok!(TemplateModule::create_collection(646 origin1.clone(),647 col_name1.clone(),648 col_desc1.clone(),649 token_prefix1.clone(),650 nft_mode.clone()651 ));652 assert_ok!(TemplateModule::create_collection(653 origin1.clone(),654 col_name1.clone(),655 col_desc1.clone(),656 token_prefix1.clone(),657 furg_mode.clone()658 ));659 assert_ok!(TemplateModule::create_collection(660 origin1.clone(),661 col_name1.clone(),662 col_desc1.clone(),663 token_prefix1.clone(),664 refung_mode.clone()665 ));666667 assert_eq!(TemplateModule::collection(1).owner, 1);668 assert_eq!(TemplateModule::collection(2).owner, 1);669 assert_eq!(TemplateModule::collection(3).owner, 1);670671 // check balance before672 assert_eq!(TemplateModule::balance_count(1, 1), 0);673 assert_eq!(TemplateModule::balance_count(2, 1), 0);674 assert_eq!(TemplateModule::balance_count(3, 1), 0);675676 // create item677 assert_ok!(TemplateModule::create_item(678 origin1.clone(),679 1,680 [1, 1, 1].to_vec(),681 1682 ));683684 assert_ok!(TemplateModule::create_item(685 origin1.clone(),686 2,687 [].to_vec(),688 1689 ));690691 assert_ok!(TemplateModule::create_item(692 origin1.clone(),693 3,694 [1, 1, 1].to_vec(),695 1696 ));697698 // check balance (collection with id = 1, user id = 1)699 assert_eq!(TemplateModule::balance_count(1, 1), 1);700 assert_eq!(TemplateModule::balance_count(2, 1), 1000);701 assert_eq!(TemplateModule::balance_count(3, 1), 1000);702 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);703 assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);704 assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);705 });706}707708#[test]709fn approve() {710 new_test_ext().execute_with(|| {711 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();712 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();713 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();714 let nft_mode: CollectionMode = CollectionMode::NFT(2000);715 let origin1 = Origin::signed(1);716717 assert_ok!(TemplateModule::create_collection(718 origin1.clone(),719 col_name1.clone(),720 col_desc1.clone(),721 token_prefix1.clone(),722 nft_mode.clone()723 ));724725 assert_eq!(TemplateModule::collection(1).owner, 1);726727 // create item728 assert_ok!(TemplateModule::create_item(729 origin1.clone(),730 1,731 [1, 1, 1].to_vec(),732 1733 ));734735 // approve736 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));737 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);738 });739}740741#[test]742fn transfer_from() {743 new_test_ext().execute_with(|| {744 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();745 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();746 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();747 let mode: CollectionMode = CollectionMode::NFT(2000);748 let origin1 = Origin::signed(1);749 let origin2 = Origin::signed(2);750751 assert_ok!(TemplateModule::create_collection(752 origin1.clone(),753 col_name1.clone(),754 col_desc1.clone(),755 token_prefix1.clone(),756 mode757 ));758759 assert_eq!(TemplateModule::collection(1).owner, 1);760761 // create item762 assert_ok!(TemplateModule::create_item(763 origin1.clone(),764 1,765 [1, 1, 1].to_vec(),766 1767 ));768769 // approve770 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));771 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);772 assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 2, 1, 1, 1));773774 // after transfer775 assert_eq!(TemplateModule::balance_count(1, 1), 0);776 assert_eq!(TemplateModule::balance_count(1, 2), 1);777 });778}runtime/src/lib.rsdiffbeforeafterboth--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -190,7 +190,6 @@
/// Version of the runtime.
type Version = Version;
/// Converts a module to the index of the module in `construct_runtime!`.
- ///
/// This type is being generated by `construct_runtime!`.
type ModuleToIndex = ModuleToIndex;
/// What to do if a new account is created.