12use 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 105 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 114 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 123 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 159 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 167 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 176 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 211 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 251 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 293 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 340 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 439 assert_eq!(TemplateModule::balance_count(1, 1), 1);440441 442 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 478 assert_eq!(TemplateModule::balance_count(1, 1), 1000);479480 481 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 519 assert_eq!(TemplateModule::balance_count(1, 1), 1000);520521 522 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 570 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 617 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 624 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 672 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 677 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 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 728 assert_ok!(TemplateModule::create_item(729 origin1.clone(),730 1,731 [1, 1, 1].to_vec(),732 1733 ));734735 736 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 762 assert_ok!(TemplateModule::create_item(763 origin1.clone(),764 1,765 [1, 1, 1].to_vec(),766 1767 ));768769 770 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 775 assert_eq!(TemplateModule::balance_count(1, 1), 0);776 assert_eq!(TemplateModule::balance_count(1, 2), 1);777 });778}