12use super::*;3use crate::mock::*;4use crate::{AccessMode, CollectionMode, Ownership, CreateItemData};5use nft_data_structs::{6 CreateNftData, CreateFungibleData, CreateReFungibleData, CollectionId, TokenId,7 MAX_DECIMAL_POINTS,8};9use frame_support::{assert_noop, assert_ok};10use sp_std::convert::TryInto;1112fn default_nft_data() -> CreateNftData {13 CreateNftData {14 const_data: vec![1, 2, 3].try_into().unwrap(),15 variable_data: vec![3, 2, 1].try_into().unwrap(),16 }17}1819fn default_fungible_data() -> CreateFungibleData {20 CreateFungibleData { value: 5 }21}2223fn default_re_fungible_data() -> CreateReFungibleData {24 CreateReFungibleData {25 const_data: vec![1, 2, 3].try_into().unwrap(),26 variable_data: vec![3, 2, 1].try_into().unwrap(),27 pieces: 1023,28 }29}3031fn create_test_collection_for_owner(32 mode: &CollectionMode,33 owner: u64,34 id: CollectionId,35) -> CollectionId {36 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();37 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();38 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();3940 let origin1 = Origin::signed(owner);41 assert_ok!(TemplateModule::create_collection(42 origin1,43 col_name1,44 col_desc1,45 token_prefix1,46 mode.clone()47 ));4849 let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();50 let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();51 let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();52 assert_eq!(TemplateModule::collection_id(id).unwrap().owner, owner);53 assert_eq!(54 TemplateModule::collection_id(id).unwrap().name,55 saved_col_name56 );57 assert_eq!(TemplateModule::collection_id(id).unwrap().mode, *mode);58 assert_eq!(59 TemplateModule::collection_id(id).unwrap().description,60 saved_description61 );62 assert_eq!(63 TemplateModule::collection_id(id).unwrap().token_prefix,64 saved_prefix65 );66 id67}6869fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {70 create_test_collection_for_owner(&mode, 1, id)71}7273fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {74 let origin1 = Origin::signed(1);75 assert_ok!(TemplateModule::create_item(76 origin1,77 collection_id,78 account(1),79 data.clone()80 ));81}8283fn account(sub: u64) -> TestCrossAccountId {84 TestCrossAccountId::from_sub(sub)85}8687888990#[test]91fn set_version_schema() {92 new_test_ext().execute_with(|| {93 let origin1 = Origin::signed(1);94 let collection_id = create_test_collection(&CollectionMode::NFT, 1);9596 assert_ok!(TemplateModule::set_schema_version(97 origin1,98 collection_id,99 SchemaVersion::Unique100 ));101 assert_eq!(102 TemplateModule::collection_id(collection_id)103 .unwrap()104 .schema_version,105 SchemaVersion::Unique106 );107 });108}109110#[test]111fn create_fungible_collection_fails_with_large_decimal_numbers() {112 new_test_ext().execute_with(|| {113 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();114 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();115 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();116117 let origin1 = Origin::signed(1);118 assert_noop!(119 TemplateModule::create_collection(120 origin1,121 col_name1,122 col_desc1,123 token_prefix1,124 CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1)125 ),126 Error::<Test>::CollectionDecimalPointLimitExceeded127 );128 });129}130131#[test]132fn create_nft_item() {133 new_test_ext().execute_with(|| {134 let collection_id = create_test_collection(&CollectionMode::NFT, 1);135136 let data = default_nft_data();137 create_test_item(collection_id, &data.clone().into());138 let item = TemplateModule::nft_item_id(collection_id, 1).unwrap();139 assert_eq!(item.const_data, data.const_data.into_inner());140 assert_eq!(item.variable_data, data.variable_data.into_inner());141 });142}143144145146#[test]147fn create_nft_multiple_items() {148 new_test_ext().execute_with(|| {149 create_test_collection(&CollectionMode::NFT, 1);150151 let origin1 = Origin::signed(1);152153 let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];154155 assert_ok!(TemplateModule::create_multiple_items(156 origin1,157 1,158 account(1),159 items_data160 .clone()161 .into_iter()162 .map(|d| { d.into() })163 .collect()164 ));165 for (index, data) in items_data.into_iter().enumerate() {166 let item = TemplateModule::nft_item_id(1, (index + 1) as TokenId).unwrap();167 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());168 assert_eq!(item.variable_data.to_vec(), data.variable_data.into_inner());169 }170 });171}172173#[test]174fn create_refungible_item() {175 new_test_ext().execute_with(|| {176 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);177178 let data = default_re_fungible_data();179 create_test_item(collection_id, &data.clone().into());180 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();181 assert_eq!(item.const_data, data.const_data.into_inner());182 assert_eq!(item.variable_data, data.variable_data.into_inner());183 assert_eq!(184 item.owner[0],185 Ownership {186 owner: account(1),187 fraction: 1023188 }189 );190 });191}192193#[test]194fn create_multiple_refungible_items() {195 new_test_ext().execute_with(|| {196 create_test_collection(&CollectionMode::ReFungible, 1);197198 let origin1 = Origin::signed(1);199200 let items_data = vec![201 default_re_fungible_data(),202 default_re_fungible_data(),203 default_re_fungible_data(),204 ];205206 assert_ok!(TemplateModule::create_multiple_items(207 origin1,208 1,209 account(1),210 items_data211 .clone()212 .into_iter()213 .map(|d| { d.into() })214 .collect()215 ));216 for (index, data) in items_data.into_iter().enumerate() {217 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId).unwrap();218 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());219 assert_eq!(item.variable_data.to_vec(), data.variable_data.into_inner());220 assert_eq!(221 item.owner[0],222 Ownership {223 owner: account(1),224 fraction: 1023225 }226 );227 }228 });229}230231#[test]232fn create_fungible_item() {233 new_test_ext().execute_with(|| {234 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);235236 let data = default_fungible_data();237 create_test_item(collection_id, &data.into());238239 assert_eq!(TemplateModule::fungible_item_id(collection_id, 1).value, 5);240 });241}242243244245246247248249250251252253254255256257258259260261262263264265266267268269#[test]270fn transfer_fungible_item() {271 new_test_ext().execute_with(|| {272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);273274 let origin1 = Origin::signed(1);275 let origin2 = Origin::signed(2);276277 let data = default_fungible_data();278 create_test_item(collection_id, &data.into());279280 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 5);281 assert_eq!(TemplateModule::balance_count(1, 1), 5);282283 284 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 5));285 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 0);286 assert_eq!(TemplateModule::balance_count(1, 1), 0);287 assert_eq!(TemplateModule::balance_count(1, 2), 5);288289 290 assert_ok!(TemplateModule::transfer(291 origin2.clone(),292 account(3),293 1,294 1,295 3296 ));297 assert_eq!(TemplateModule::balance_count(1, 2), 2);298 assert_eq!(TemplateModule::balance_count(1, 3), 3);299300 301 assert_ok!(TemplateModule::transfer(origin2, account(3), 1, 1, 1));302 assert_eq!(TemplateModule::fungible_item_id(1, 2).value, 1);303 assert_eq!(TemplateModule::fungible_item_id(1, 3).value, 4);304 assert_eq!(TemplateModule::balance_count(1, 2), 1);305 assert_eq!(TemplateModule::balance_count(1, 3), 4);306 });307}308309#[test]310fn transfer_refungible_item() {311 new_test_ext().execute_with(|| {312 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);313314 let data = default_re_fungible_data();315 create_test_item(collection_id, &data.clone().into());316317 let origin1 = Origin::signed(1);318 let origin2 = Origin::signed(2);319 {320 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();321 assert_eq!(item.const_data, data.const_data.into_inner());322 assert_eq!(item.variable_data, data.variable_data.into_inner());323 assert_eq!(324 item.owner[0],325 Ownership {326 owner: account(1),327 fraction: 1023328 }329 );330 }331 assert_eq!(TemplateModule::balance_count(1, 1), 1023);332 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);333334 335 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1023));336 assert_eq!(337 TemplateModule::refungible_item_id(1, 1).unwrap().owner[0],338 Ownership {339 owner: account(2),340 fraction: 1023341 }342 );343 assert_eq!(TemplateModule::balance_count(1, 1), 0);344 assert_eq!(TemplateModule::balance_count(1, 2), 1023);345 346 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);347348 349 assert_ok!(TemplateModule::transfer(350 origin2.clone(),351 account(3),352 1,353 1,354 500355 ));356 {357 let item = TemplateModule::refungible_item_id(1, 1).unwrap();358 assert_eq!(359 item.owner[0],360 Ownership {361 owner: account(2),362 fraction: 523363 }364 );365 assert_eq!(366 item.owner[1],367 Ownership {368 owner: account(3),369 fraction: 500370 }371 );372 }373 assert_eq!(TemplateModule::balance_count(1, 2), 523);374 assert_eq!(TemplateModule::balance_count(1, 3), 500);375 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);376 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);377378 379 assert_ok!(TemplateModule::transfer(origin2, account(3), 1, 1, 200));380 {381 let item = TemplateModule::refungible_item_id(1, 1).unwrap();382 assert_eq!(383 item.owner[0],384 Ownership {385 owner: account(2),386 fraction: 323387 }388 );389 assert_eq!(390 item.owner[1],391 Ownership {392 owner: account(3),393 fraction: 700394 }395 );396 }397 assert_eq!(TemplateModule::balance_count(1, 2), 323);398 assert_eq!(TemplateModule::balance_count(1, 3), 700);399 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);400 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);401 });402}403404#[test]405fn transfer_nft_item() {406 new_test_ext().execute_with(|| {407 let collection_id = create_test_collection(&CollectionMode::NFT, 1);408409 let data = default_nft_data();410 create_test_item(collection_id, &data.into());411 assert_eq!(TemplateModule::balance_count(1, 1), 1);412 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);413414 let origin1 = Origin::signed(1);415 416 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1000));417 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(2));418 assert_eq!(TemplateModule::balance_count(1, 1), 0);419 assert_eq!(TemplateModule::balance_count(1, 2), 1);420 421 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);422 });423}424425#[test]426fn nft_approve_and_transfer_from() {427 new_test_ext().execute_with(|| {428 let collection_id = create_test_collection(&CollectionMode::NFT, 1);429430 let data = default_nft_data();431 create_test_item(collection_id, &data.into());432433 let origin1 = Origin::signed(1);434 let origin2 = Origin::signed(2);435436 assert_eq!(TemplateModule::balance_count(1, 1), 1);437 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);438439 440 assert_noop!(441 TemplateModule::transfer_from(origin2.clone(), account(1), account(2), 1, 1, 1),442 Error::<Test>::NoPermission443 );444445 446 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 5));447 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);448 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);449450 assert_ok!(TemplateModule::transfer_from(451 origin2,452 account(1),453 account(3),454 1,455 1,456 1457 ));458 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 4);459 });460}461462#[test]463fn nft_approve_and_transfer_from_white_list() {464 new_test_ext().execute_with(|| {465 let collection_id = create_test_collection(&CollectionMode::NFT, 1);466467 let origin1 = Origin::signed(1);468 let origin2 = Origin::signed(2);469470 let data = default_nft_data();471 create_test_item(collection_id, &data.clone().into());472473 assert_eq!(474 &TemplateModule::nft_item_id(1, 1).unwrap().const_data,475 &data.const_data.into_inner()476 );477 assert_eq!(TemplateModule::balance_count(1, 1), 1);478 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);479480 assert_ok!(TemplateModule::set_mint_permission(481 origin1.clone(),482 1,483 true484 ));485 assert_ok!(TemplateModule::set_public_access_mode(486 origin1.clone(),487 1,488 AccessMode::WhiteList489 ));490 assert_ok!(TemplateModule::add_to_white_list(491 origin1.clone(),492 1,493 account(1)494 ));495 assert_ok!(TemplateModule::add_to_white_list(496 origin1.clone(),497 1,498 account(2)499 ));500 assert_ok!(TemplateModule::add_to_white_list(501 origin1.clone(),502 1,503 account(3)504 ));505506 507 assert_ok!(TemplateModule::approve(508 origin1.clone(),509 account(2),510 1,511 1,512 5513 ));514 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);515 assert_ok!(TemplateModule::approve(origin1, account(3), 1, 1, 5));516 assert_eq!(TemplateModule::approved(1, (1, 1, 3)), 5);517518 assert_ok!(TemplateModule::transfer_from(519 origin2,520 account(1),521 account(3),522 1,523 1,524 1525 ));526 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 4);527 });528}529530#[test]531fn refungible_approve_and_transfer_from() {532 new_test_ext().execute_with(|| {533 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);534535 let origin1 = Origin::signed(1);536 let origin2 = Origin::signed(2);537538 let data = default_re_fungible_data();539 create_test_item(collection_id, &data.into());540541 assert_eq!(TemplateModule::balance_count(1, 1), 1023);542 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);543544 assert_ok!(TemplateModule::set_mint_permission(545 origin1.clone(),546 1,547 true548 ));549 assert_ok!(TemplateModule::set_public_access_mode(550 origin1.clone(),551 1,552 AccessMode::WhiteList553 ));554 assert_ok!(TemplateModule::add_to_white_list(555 origin1.clone(),556 1,557 account(1)558 ));559 assert_ok!(TemplateModule::add_to_white_list(560 origin1.clone(),561 1,562 account(2)563 ));564 assert_ok!(TemplateModule::add_to_white_list(565 origin1.clone(),566 1,567 account(3)568 ));569570 571 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 1023));572 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1023);573574 assert_ok!(TemplateModule::transfer_from(575 origin2,576 account(1),577 account(3),578 1,579 1,580 100581 ));582 assert_eq!(TemplateModule::balance_count(1, 1), 923);583 assert_eq!(TemplateModule::balance_count(1, 3), 100);584 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);585 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);586587 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 923);588 });589}590591#[test]592fn fungible_approve_and_transfer_from() {593 new_test_ext().execute_with(|| {594 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);595596 let data = default_fungible_data();597 create_test_item(collection_id, &data.into());598599 let origin1 = Origin::signed(1);600 let origin2 = Origin::signed(2);601602 assert_eq!(TemplateModule::balance_count(1, 1), 5);603604 assert_ok!(TemplateModule::set_mint_permission(605 origin1.clone(),606 1,607 true608 ));609 assert_ok!(TemplateModule::set_public_access_mode(610 origin1.clone(),611 1,612 AccessMode::WhiteList613 ));614 assert_ok!(TemplateModule::add_to_white_list(615 origin1.clone(),616 1,617 account(1)618 ));619 assert_ok!(TemplateModule::add_to_white_list(620 origin1.clone(),621 1,622 account(2)623 ));624 assert_ok!(TemplateModule::add_to_white_list(625 origin1.clone(),626 1,627 account(3)628 ));629630 631 assert_ok!(TemplateModule::approve(632 origin1.clone(),633 account(2),634 1,635 1,636 5637 ));638 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);639 assert_ok!(TemplateModule::approve(origin1, account(3), 1, 1, 5));640 assert_eq!(TemplateModule::approved(1, (1, 1, 3)), 5);641 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);642643 assert_ok!(TemplateModule::transfer_from(644 origin2.clone(),645 account(1),646 account(3),647 1,648 1,649 4650 ));651 assert_eq!(TemplateModule::balance_count(1, 1), 1);652 assert_eq!(TemplateModule::balance_count(1, 3), 4);653654 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);655656 assert_noop!(657 TemplateModule::transfer_from(origin2, account(1), account(3), 1, 1, 4),658 Error::<Test>::NoPermission659 );660 });661}662663#[test]664fn change_collection_owner() {665 new_test_ext().execute_with(|| {666 let collection_id = create_test_collection(&CollectionMode::NFT, 1);667668 let origin1 = Origin::signed(1);669 assert_ok!(TemplateModule::change_collection_owner(670 origin1,671 collection_id,672 2673 ));674 assert_eq!(675 TemplateModule::collection_id(collection_id).unwrap().owner,676 2677 );678 });679}680681#[test]682fn destroy_collection() {683 new_test_ext().execute_with(|| {684 let collection_id = create_test_collection(&CollectionMode::NFT, 1);685686 let origin1 = Origin::signed(1);687 assert_ok!(TemplateModule::destroy_collection(origin1, collection_id));688 });689}690691#[test]692fn burn_nft_item() {693 new_test_ext().execute_with(|| {694 let collection_id = create_test_collection(&CollectionMode::NFT, 1);695696 let origin1 = Origin::signed(1);697 assert_ok!(TemplateModule::add_collection_admin(698 origin1.clone(),699 collection_id,700 account(2)701 ));702703 let data = default_nft_data();704 create_test_item(collection_id, &data.into());705706 707 assert_eq!(TemplateModule::balance_count(1, 1), 1);708709 710 assert_ok!(TemplateModule::burn_item(711 origin1.clone(),712 1,713 1,714 account(1),715 5716 ));717 assert_noop!(718 TemplateModule::burn_item(origin1, 1, 1, account(1), 5),719 Error::<Test>::TokenNotFound720 );721722 assert_eq!(TemplateModule::balance_count(1, 1), 0);723 });724}725726#[test]727fn burn_fungible_item() {728 new_test_ext().execute_with(|| {729 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);730731 let origin1 = Origin::signed(1);732 assert_ok!(TemplateModule::add_collection_admin(733 origin1.clone(),734 collection_id,735 account(2)736 ));737738 let data = default_fungible_data();739 create_test_item(collection_id, &data.into());740741 742 assert_eq!(TemplateModule::balance_count(1, 1), 5);743744 745 assert_ok!(TemplateModule::burn_item(746 origin1.clone(),747 1,748 1,749 account(1),750 5751 ));752 assert_noop!(753 TemplateModule::burn_item(origin1, 1, 1, account(1), 5),754 Error::<Test>::TokenValueNotEnough755 );756757 assert_eq!(TemplateModule::balance_count(1, 1), 0);758 });759}760761#[test]762fn burn_refungible_item() {763 new_test_ext().execute_with(|| {764 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);765 let origin1 = Origin::signed(1);766767 assert_ok!(TemplateModule::set_mint_permission(768 origin1.clone(),769 collection_id,770 true771 ));772 assert_ok!(TemplateModule::set_public_access_mode(773 origin1.clone(),774 collection_id,775 AccessMode::WhiteList776 ));777 assert_ok!(TemplateModule::add_to_white_list(778 origin1.clone(),779 1,780 account(1)781 ));782783 assert_ok!(TemplateModule::add_collection_admin(784 origin1.clone(),785 1,786 account(2)787 ));788789 let data = default_re_fungible_data();790 create_test_item(collection_id, &data.into());791792 793 assert_eq!(TemplateModule::balance_count(1, 1), 1023);794795 796 assert_ok!(TemplateModule::burn_item(797 origin1.clone(),798 1,799 1,800 account(1),801 1023802 ));803 assert_noop!(804 TemplateModule::burn_item(origin1, 1, 1, account(1), 1023),805 Error::<Test>::TokenNotFound806 );807808 assert_eq!(TemplateModule::balance_count(1, 1), 0);809 });810}811812#[test]813fn add_collection_admin() {814 new_test_ext().execute_with(|| {815 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);816 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);817 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);818819 let origin1 = Origin::signed(1);820821 822 assert_ok!(TemplateModule::add_collection_admin(823 origin1.clone(),824 collection1_id,825 account(2)826 ));827 assert_ok!(TemplateModule::add_collection_admin(828 origin1,829 collection1_id,830 account(3)831 ));832833 assert!(TemplateModule::admin_list_collection(collection1_id).contains(&account(2)),);834 assert!(TemplateModule::admin_list_collection(collection1_id).contains(&account(3)),);835 });836}837838#[test]839fn remove_collection_admin() {840 new_test_ext().execute_with(|| {841 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);842 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);843 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);844845 let origin1 = Origin::signed(1);846 let origin2 = Origin::signed(2);847848 849 assert_ok!(TemplateModule::add_collection_admin(850 origin1.clone(),851 collection1_id,852 account(2)853 ));854 assert_ok!(TemplateModule::add_collection_admin(855 origin1,856 collection1_id,857 account(3)858 ));859860 assert!(TemplateModule::admin_list_collection(1).contains(&account(2)),);861 assert!(TemplateModule::admin_list_collection(1).contains(&account(3)),);862863 864 assert_ok!(TemplateModule::remove_collection_admin(865 origin2,866 1,867 account(3)868 ));869 assert!(!TemplateModule::admin_list_collection(1).contains(&account(3)),);870 });871}872873#[test]874fn balance_of() {875 new_test_ext().execute_with(|| {876 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);877 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);878 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3);879880 881 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0);882 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 0);883 assert_eq!(884 TemplateModule::balance_count(re_fungible_collection_id, 1),885 0886 );887888 let nft_data = default_nft_data();889 create_test_item(nft_collection_id, &nft_data.into());890891 let fungible_data = default_fungible_data();892 create_test_item(fungible_collection_id, &fungible_data.into());893894 let re_fungible_data = default_re_fungible_data();895 create_test_item(re_fungible_collection_id, &re_fungible_data.into());896897 898 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);899 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);900 assert_eq!(901 TemplateModule::balance_count(re_fungible_collection_id, 1),902 1023903 );904 assert_eq!(905 TemplateModule::nft_item_id(nft_collection_id, 1)906 .unwrap()907 .owner,908 account(1)909 );910 assert_eq!(911 TemplateModule::fungible_item_id(fungible_collection_id, 1).value,912 5913 );914 assert_eq!(915 TemplateModule::refungible_item_id(re_fungible_collection_id, 1)916 .unwrap()917 .owner[0]918 .owner,919 account(1)920 );921 });922}923924#[test]925fn approve() {926 new_test_ext().execute_with(|| {927 let collection_id = create_test_collection(&CollectionMode::NFT, 1);928929 let data = default_nft_data();930 create_test_item(collection_id, &data.into());931932 let origin1 = Origin::signed(1);933934 935 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 1));936 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);937 });938}939940#[test]941fn transfer_from() {942 new_test_ext().execute_with(|| {943 let collection_id = create_test_collection(&CollectionMode::NFT, 1);944 let origin1 = Origin::signed(1);945 let origin2 = Origin::signed(2);946947 let data = default_nft_data();948 create_test_item(collection_id, &data.into());949950 951 assert_ok!(TemplateModule::approve(952 origin1.clone(),953 account(2),954 1,955 1,956 1957 ));958 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);959960 assert_ok!(TemplateModule::set_mint_permission(961 origin1.clone(),962 1,963 true964 ));965 assert_ok!(TemplateModule::set_public_access_mode(966 origin1.clone(),967 1,968 AccessMode::WhiteList969 ));970 assert_ok!(TemplateModule::add_to_white_list(971 origin1.clone(),972 1,973 account(1)974 ));975 assert_ok!(TemplateModule::add_to_white_list(976 origin1.clone(),977 1,978 account(2)979 ));980 assert_ok!(TemplateModule::add_to_white_list(origin1, 1, account(3)));981982 assert_ok!(TemplateModule::transfer_from(983 origin2,984 account(1),985 account(2),986 1,987 1,988 1989 ));990991 992 assert_eq!(TemplateModule::balance_count(1, 1), 0);993 assert_eq!(TemplateModule::balance_count(1, 2), 1);994 });995}996997998999100010011002#[test]1003fn owner_can_add_address_to_white_list() {1004 new_test_ext().execute_with(|| {1005 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10061007 let origin1 = Origin::signed(1);1008 assert_ok!(TemplateModule::add_to_white_list(1009 origin1,1010 collection_id,1011 account(2)1012 ));1013 assert!(TemplateModule::white_list(collection_id, 2));1014 });1015}10161017#[test]1018fn admin_can_add_address_to_white_list() {1019 new_test_ext().execute_with(|| {1020 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1021 let origin1 = Origin::signed(1);1022 let origin2 = Origin::signed(2);10231024 assert_ok!(TemplateModule::add_collection_admin(1025 origin1,1026 collection_id,1027 account(2)1028 ));1029 assert_ok!(TemplateModule::add_to_white_list(1030 origin2,1031 collection_id,1032 account(3)1033 ));1034 assert!(TemplateModule::white_list(collection_id, 3));1035 });1036}10371038#[test]1039fn nonprivileged_user_cannot_add_address_to_white_list() {1040 new_test_ext().execute_with(|| {1041 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10421043 let origin2 = Origin::signed(2);1044 assert_noop!(1045 TemplateModule::add_to_white_list(origin2, collection_id, account(3)),1046 Error::<Test>::NoPermission1047 );1048 });1049}10501051#[test]1052fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {1053 new_test_ext().execute_with(|| {1054 let origin1 = Origin::signed(1);10551056 assert_noop!(1057 TemplateModule::add_to_white_list(origin1, 1, account(2)),1058 Error::<Test>::CollectionNotFound1059 );1060 });1061}10621063#[test]1064fn nobody_can_add_address_to_white_list_of_deleted_collection() {1065 new_test_ext().execute_with(|| {1066 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10671068 let origin1 = Origin::signed(1);1069 assert_ok!(TemplateModule::destroy_collection(1070 origin1.clone(),1071 collection_id1072 ));1073 assert_noop!(1074 TemplateModule::add_to_white_list(origin1, collection_id, account(2)),1075 Error::<Test>::CollectionNotFound1076 );1077 });1078}107910801081#[test]1082fn address_is_already_added_to_white_list() {1083 new_test_ext().execute_with(|| {1084 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1085 let origin1 = Origin::signed(1);10861087 assert_ok!(TemplateModule::add_to_white_list(1088 origin1.clone(),1089 collection_id,1090 account(2)1091 ));1092 assert_ok!(TemplateModule::add_to_white_list(1093 origin1,1094 collection_id,1095 account(2)1096 ));1097 assert!(TemplateModule::white_list(collection_id, 2));1098 });1099}11001101#[test]1102fn owner_can_remove_address_from_white_list() {1103 new_test_ext().execute_with(|| {1104 let collection_id = create_test_collection(&CollectionMode::NFT, 1);11051106 let origin1 = Origin::signed(1);1107 assert_ok!(TemplateModule::add_to_white_list(1108 origin1.clone(),1109 collection_id,1110 account(2)1111 ));1112 assert_ok!(TemplateModule::remove_from_white_list(1113 origin1,1114 collection_id,1115 account(2)1116 ));1117 assert!(!TemplateModule::white_list(collection_id, 2));1118 });1119}11201121#[test]1122fn admin_can_remove_address_from_white_list() {1123 new_test_ext().execute_with(|| {1124 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1125 let origin1 = Origin::signed(1);1126 let origin2 = Origin::signed(2);11271128 assert_ok!(TemplateModule::add_collection_admin(1129 origin1.clone(),1130 collection_id,1131 account(2)1132 ));11331134 assert_ok!(TemplateModule::add_to_white_list(1135 origin1,1136 collection_id,1137 account(3)1138 ));1139 assert_ok!(TemplateModule::remove_from_white_list(1140 origin2,1141 collection_id,1142 account(3)1143 ));1144 assert!(!TemplateModule::white_list(collection_id, 3));1145 });1146}11471148#[test]1149fn nonprivileged_user_cannot_remove_address_from_white_list() {1150 new_test_ext().execute_with(|| {1151 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1152 let origin1 = Origin::signed(1);1153 let origin2 = Origin::signed(2);11541155 assert_ok!(TemplateModule::add_to_white_list(1156 origin1,1157 collection_id,1158 account(2)1159 ));1160 assert_noop!(1161 TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),1162 Error::<Test>::NoPermission1163 );1164 assert!(TemplateModule::white_list(collection_id, 2));1165 });1166}11671168#[test]1169fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {1170 new_test_ext().execute_with(|| {1171 let origin1 = Origin::signed(1);11721173 assert_noop!(1174 TemplateModule::remove_from_white_list(origin1, 1, account(2)),1175 Error::<Test>::CollectionNotFound1176 );1177 });1178}11791180#[test]1181fn nobody_can_remove_address_from_white_list_of_deleted_collection() {1182 new_test_ext().execute_with(|| {1183 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1184 let origin1 = Origin::signed(1);1185 let origin2 = Origin::signed(2);11861187 assert_ok!(TemplateModule::add_to_white_list(1188 origin1.clone(),1189 collection_id,1190 account(2)1191 ));1192 assert_ok!(TemplateModule::destroy_collection(origin1, collection_id));1193 assert_noop!(1194 TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),1195 Error::<Test>::CollectionNotFound1196 );1197 assert!(!TemplateModule::white_list(collection_id, 2));1198 });1199}120012011202#[test]1203fn address_is_already_removed_from_white_list() {1204 new_test_ext().execute_with(|| {1205 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1206 let origin1 = Origin::signed(1);12071208 assert_ok!(TemplateModule::add_to_white_list(1209 origin1.clone(),1210 collection_id,1211 account(2)1212 ));1213 assert_ok!(TemplateModule::remove_from_white_list(1214 origin1.clone(),1215 collection_id,1216 account(2)1217 ));1218 assert_ok!(TemplateModule::remove_from_white_list(1219 origin1,1220 collection_id,1221 account(2)1222 ));1223 assert!(!TemplateModule::white_list(collection_id, 2));1224 });1225}122612271228#[test]1229fn white_list_test_1() {1230 new_test_ext().execute_with(|| {1231 let collection_id = create_test_collection(&CollectionMode::NFT, 1);12321233 let origin1 = Origin::signed(1);12341235 let data = default_nft_data();1236 create_test_item(collection_id, &data.into());12371238 assert_ok!(TemplateModule::set_public_access_mode(1239 origin1.clone(),1240 collection_id,1241 AccessMode::WhiteList1242 ));1243 assert_ok!(TemplateModule::add_to_white_list(1244 origin1.clone(),1245 collection_id,1246 account(2)1247 ));12481249 assert_noop!(1250 TemplateModule::transfer(origin1, account(3), 1, 1, 1),1251 Error::<Test>::AddresNotInWhiteList1252 );1253 });1254}12551256#[test]1257fn white_list_test_2() {1258 new_test_ext().execute_with(|| {1259 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1260 let origin1 = Origin::signed(1);12611262 let data = default_nft_data();1263 create_test_item(collection_id, &data.into());12641265 assert_ok!(TemplateModule::set_public_access_mode(1266 origin1.clone(),1267 collection_id,1268 AccessMode::WhiteList1269 ));1270 assert_ok!(TemplateModule::add_to_white_list(1271 origin1.clone(),1272 1,1273 account(1)1274 ));1275 assert_ok!(TemplateModule::add_to_white_list(1276 origin1.clone(),1277 1,1278 account(2)1279 ));12801281 1282 assert_ok!(TemplateModule::approve(1283 origin1.clone(),1284 account(1),1285 1,1286 1,1287 11288 ));1289 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);12901291 assert_ok!(TemplateModule::remove_from_white_list(1292 origin1.clone(),1293 1,1294 account(1)1295 ));12961297 assert_noop!(1298 TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),1299 Error::<Test>::AddresNotInWhiteList1300 );1301 });1302}130313041305#[test]1306fn white_list_test_3() {1307 new_test_ext().execute_with(|| {1308 let collection_id = create_test_collection(&CollectionMode::NFT, 1);13091310 let origin1 = Origin::signed(1);13111312 let data = default_nft_data();1313 create_test_item(collection_id, &data.into());13141315 assert_ok!(TemplateModule::set_public_access_mode(1316 origin1.clone(),1317 collection_id,1318 AccessMode::WhiteList1319 ));1320 assert_ok!(TemplateModule::add_to_white_list(1321 origin1.clone(),1322 1,1323 account(1)1324 ));13251326 assert_noop!(1327 TemplateModule::transfer(origin1, account(3), 1, 1, 1),1328 Error::<Test>::AddresNotInWhiteList1329 );1330 });1331}13321333#[test]1334fn white_list_test_4() {1335 new_test_ext().execute_with(|| {1336 let collection_id = create_test_collection(&CollectionMode::NFT, 1);13371338 let origin1 = Origin::signed(1);13391340 let data = default_nft_data();1341 create_test_item(collection_id, &data.into());13421343 assert_ok!(TemplateModule::set_public_access_mode(1344 origin1.clone(),1345 collection_id,1346 AccessMode::WhiteList1347 ));1348 assert_ok!(TemplateModule::add_to_white_list(1349 origin1.clone(),1350 collection_id,1351 account(1)1352 ));1353 assert_ok!(TemplateModule::add_to_white_list(1354 origin1.clone(),1355 collection_id,1356 account(2)1357 ));13581359 1360 assert_ok!(TemplateModule::approve(1361 origin1.clone(),1362 account(1),1363 1,1364 1,1365 11366 ));1367 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);13681369 assert_ok!(TemplateModule::remove_from_white_list(1370 origin1.clone(),1371 collection_id,1372 account(2)1373 ));13741375 assert_noop!(1376 TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),1377 Error::<Test>::AddresNotInWhiteList1378 );1379 });1380}138113821383#[test]1384fn white_list_test_5() {1385 new_test_ext().execute_with(|| {1386 let collection_id = create_test_collection(&CollectionMode::NFT, 1);13871388 let origin1 = Origin::signed(1);13891390 let data = default_nft_data();1391 create_test_item(collection_id, &data.into());13921393 assert_ok!(TemplateModule::set_public_access_mode(1394 origin1.clone(),1395 collection_id,1396 AccessMode::WhiteList1397 ));1398 assert_noop!(1399 TemplateModule::burn_item(origin1.clone(), 1, 1, account(1), 5),1400 Error::<Test>::AddresNotInWhiteList1401 );1402 });1403}140414051406#[test]1407fn white_list_test_6() {1408 new_test_ext().execute_with(|| {1409 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14101411 let origin1 = Origin::signed(1);14121413 let data = default_nft_data();1414 create_test_item(collection_id, &data.into());14151416 assert_ok!(TemplateModule::set_public_access_mode(1417 origin1.clone(),1418 collection_id,1419 AccessMode::WhiteList1420 ));14211422 1423 assert_noop!(1424 TemplateModule::approve(origin1, account(1), 1, 1, 5),1425 Error::<Test>::AddresNotInWhiteList1426 );1427 });1428}1429143014311432#[test]1433fn white_list_test_7() {1434 new_test_ext().execute_with(|| {1435 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14361437 let data = default_nft_data();1438 create_test_item(collection_id, &data.into());14391440 let origin1 = Origin::signed(1);14411442 assert_ok!(TemplateModule::set_public_access_mode(1443 origin1.clone(),1444 collection_id,1445 AccessMode::WhiteList1446 ));1447 assert_ok!(TemplateModule::add_to_white_list(1448 origin1.clone(),1449 collection_id,1450 account(1)1451 ));1452 assert_ok!(TemplateModule::add_to_white_list(1453 origin1.clone(),1454 collection_id,1455 account(2)1456 ));14571458 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1));1459 });1460}14611462#[test]1463fn white_list_test_8() {1464 new_test_ext().execute_with(|| {1465 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14661467 let data = default_nft_data();1468 create_test_item(collection_id, &data.into());14691470 let origin1 = Origin::signed(1);14711472 assert_ok!(TemplateModule::set_public_access_mode(1473 origin1.clone(),1474 collection_id,1475 AccessMode::WhiteList1476 ));1477 assert_ok!(TemplateModule::add_to_white_list(1478 origin1.clone(),1479 collection_id,1480 account(1)1481 ));1482 assert_ok!(TemplateModule::add_to_white_list(1483 origin1.clone(),1484 collection_id,1485 account(2)1486 ));14871488 1489 assert_ok!(TemplateModule::approve(1490 origin1.clone(),1491 account(1),1492 1,1493 1,1494 51495 ));1496 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 5);14971498 assert_ok!(TemplateModule::transfer_from(1499 origin1,1500 account(1),1501 account(2),1502 1,1503 1,1504 11505 ));1506 });1507}150815091510#[test]1511fn white_list_test_9() {1512 new_test_ext().execute_with(|| {1513 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1514 let origin1 = Origin::signed(1);15151516 assert_ok!(TemplateModule::set_public_access_mode(1517 origin1.clone(),1518 collection_id,1519 AccessMode::WhiteList1520 ));1521 assert_ok!(TemplateModule::set_mint_permission(1522 origin1,1523 collection_id,1524 false1525 ));15261527 let data = default_nft_data();1528 create_test_item(collection_id, &data.into());1529 });1530}153115321533#[test]1534fn white_list_test_10() {1535 new_test_ext().execute_with(|| {1536 let collection_id = create_test_collection(&CollectionMode::NFT, 1);15371538 let origin1 = Origin::signed(1);1539 let origin2 = Origin::signed(2);15401541 assert_ok!(TemplateModule::set_public_access_mode(1542 origin1.clone(),1543 collection_id,1544 AccessMode::WhiteList1545 ));1546 assert_ok!(TemplateModule::set_mint_permission(1547 origin1.clone(),1548 collection_id,1549 false1550 ));15511552 assert_ok!(TemplateModule::add_collection_admin(1553 origin1,1554 collection_id,1555 account(2)1556 ));15571558 assert_ok!(TemplateModule::create_item(1559 origin2,1560 collection_id,1561 account(2),1562 default_nft_data().into()1563 ));1564 });1565}156615671568#[test]1569fn white_list_test_11() {1570 new_test_ext().execute_with(|| {1571 let collection_id = create_test_collection(&CollectionMode::NFT, 1);15721573 let origin1 = Origin::signed(1);1574 let origin2 = Origin::signed(2);15751576 assert_ok!(TemplateModule::set_public_access_mode(1577 origin1.clone(),1578 collection_id,1579 AccessMode::WhiteList1580 ));1581 assert_ok!(TemplateModule::set_mint_permission(1582 origin1.clone(),1583 collection_id,1584 false1585 ));1586 assert_ok!(TemplateModule::add_to_white_list(1587 origin1,1588 collection_id,1589 account(2)1590 ));15911592 assert_noop!(1593 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1594 Error::<Test>::PublicMintingNotAllowed1595 );1596 });1597}159815991600#[test]1601fn white_list_test_12() {1602 new_test_ext().execute_with(|| {1603 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16041605 let origin1 = Origin::signed(1);1606 let origin2 = Origin::signed(2);16071608 assert_ok!(TemplateModule::set_public_access_mode(1609 origin1.clone(),1610 collection_id,1611 AccessMode::WhiteList1612 ));1613 assert_ok!(TemplateModule::set_mint_permission(1614 origin1,1615 collection_id,1616 false1617 ));16181619 assert_noop!(1620 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1621 Error::<Test>::PublicMintingNotAllowed1622 );1623 });1624}162516261627#[test]1628fn white_list_test_13() {1629 new_test_ext().execute_with(|| {1630 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16311632 let origin1 = Origin::signed(1);16331634 assert_ok!(TemplateModule::set_public_access_mode(1635 origin1.clone(),1636 collection_id,1637 AccessMode::WhiteList1638 ));1639 assert_ok!(TemplateModule::set_mint_permission(1640 origin1,1641 collection_id,1642 true1643 ));16441645 let data = default_nft_data();1646 create_test_item(collection_id, &data.into());1647 });1648}164916501651#[test]1652fn white_list_test_14() {1653 new_test_ext().execute_with(|| {1654 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16551656 let origin1 = Origin::signed(1);1657 let origin2 = Origin::signed(2);16581659 assert_ok!(TemplateModule::set_public_access_mode(1660 origin1.clone(),1661 collection_id,1662 AccessMode::WhiteList1663 ));1664 assert_ok!(TemplateModule::set_mint_permission(1665 origin1.clone(),1666 collection_id,1667 true1668 ));16691670 assert_ok!(TemplateModule::add_collection_admin(1671 origin1,1672 collection_id,1673 account(2)1674 ));16751676 assert_ok!(TemplateModule::create_item(1677 origin2,1678 1,1679 account(2),1680 default_nft_data().into()1681 ));1682 });1683}168416851686#[test]1687fn white_list_test_15() {1688 new_test_ext().execute_with(|| {1689 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16901691 let origin1 = Origin::signed(1);1692 let origin2 = Origin::signed(2);16931694 assert_ok!(TemplateModule::set_public_access_mode(1695 origin1.clone(),1696 collection_id,1697 AccessMode::WhiteList1698 ));1699 assert_ok!(TemplateModule::set_mint_permission(1700 origin1,1701 collection_id,1702 true1703 ));17041705 assert_noop!(1706 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1707 Error::<Test>::AddresNotInWhiteList1708 );1709 });1710}171117121713#[test]1714fn white_list_test_16() {1715 new_test_ext().execute_with(|| {1716 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17171718 let origin1 = Origin::signed(1);1719 let origin2 = Origin::signed(2);17201721 assert_ok!(TemplateModule::set_public_access_mode(1722 origin1.clone(),1723 collection_id,1724 AccessMode::WhiteList1725 ));1726 assert_ok!(TemplateModule::set_mint_permission(1727 origin1.clone(),1728 collection_id,1729 true1730 ));1731 assert_ok!(TemplateModule::add_to_white_list(1732 origin1,1733 collection_id,1734 account(2)1735 ));17361737 assert_ok!(TemplateModule::create_item(1738 origin2,1739 1,1740 account(2),1741 default_nft_data().into()1742 ));1743 });1744}174517461747#[test]1748fn total_number_collections_bound() {1749 new_test_ext().execute_with(|| {1750 create_test_collection(&CollectionMode::NFT, 1);1751 });1752}175317541755#[test]1756fn total_number_collections_bound_neg() {1757 new_test_ext().execute_with(|| {1758 let origin1 = Origin::signed(1);17591760 for i in 0..COLLECTION_NUMBER_LIMIT {1761 create_test_collection(&CollectionMode::NFT, i + 1);1762 }17631764 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1765 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1766 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();17671768 1769 assert_noop!(1770 TemplateModule::create_collection(1771 origin1,1772 col_name1,1773 col_desc1,1774 token_prefix1,1775 CollectionMode::NFT1776 ),1777 Error::<Test>::TotalCollectionsLimitExceeded1778 );1779 });1780}178117821783#[test]1784fn owned_tokens_bound() {1785 new_test_ext().execute_with(|| {1786 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17871788 let data = default_nft_data();1789 create_test_item(collection_id, &data.clone().into());1790 create_test_item(collection_id, &data.into());1791 });1792}179317941795#[test]1796fn owned_tokens_bound_neg() {1797 new_test_ext().execute_with(|| {1798 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17991800 let origin1 = Origin::signed(1);18011802 for _ in 0..ACCOUNT_TOKEN_OWNERSHIP_LIMIT {1803 let data = default_nft_data();1804 create_test_item(collection_id, &data.clone().into());1805 }18061807 let data = default_nft_data();1808 assert_noop!(1809 TemplateModule::create_item(origin1, 1, account(1), data.into()),1810 Error::<Test>::AccountTokenLimitExceeded1811 );1812 });1813}181418151816#[test]1817fn collection_admins_bound() {1818 new_test_ext().execute_with(|| {1819 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18201821 let origin1 = Origin::signed(1);18221823 assert_ok!(TemplateModule::add_collection_admin(1824 origin1.clone(),1825 collection_id,1826 account(2)1827 ));1828 assert_ok!(TemplateModule::add_collection_admin(1829 origin1,1830 collection_id,1831 account(3)1832 ));1833 });1834}183518361837#[test]1838fn collection_admins_bound_neg() {1839 new_test_ext().execute_with(|| {1840 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18411842 let origin1 = Origin::signed(1);18431844 for i in 0..COLLECTION_ADMINS_LIMIT {1845 assert_ok!(TemplateModule::add_collection_admin(1846 origin1.clone(),1847 collection_id,1848 account(2 + i)1849 ));1850 }1851 assert_noop!(1852 TemplateModule::add_collection_admin(1853 origin1,1854 collection_id,1855 account(3 + COLLECTION_ADMINS_LIMIT)1856 ),1857 Error::<Test>::CollectionAdminsLimitExceeded1858 );1859 });1860}186118621863#[test]1864fn set_const_on_chain_schema() {1865 new_test_ext().execute_with(|| {1866 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18671868 let origin1 = Origin::signed(1);1869 assert_ok!(TemplateModule::set_const_on_chain_schema(1870 origin1,1871 collection_id,1872 b"test const on chain schema".to_vec()1873 ));18741875 assert_eq!(1876 TemplateModule::collection_id(collection_id)1877 .unwrap()1878 .const_on_chain_schema,1879 b"test const on chain schema".to_vec()1880 );1881 assert_eq!(1882 TemplateModule::collection_id(collection_id)1883 .unwrap()1884 .variable_on_chain_schema,1885 b"".to_vec()1886 );1887 });1888}18891890#[test]1891fn set_variable_on_chain_schema() {1892 new_test_ext().execute_with(|| {1893 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18941895 let origin1 = Origin::signed(1);1896 assert_ok!(TemplateModule::set_variable_on_chain_schema(1897 origin1,1898 collection_id,1899 b"test variable on chain schema".to_vec()1900 ));19011902 assert_eq!(1903 TemplateModule::collection_id(collection_id)1904 .unwrap()1905 .const_on_chain_schema,1906 b"".to_vec()1907 );1908 assert_eq!(1909 TemplateModule::collection_id(collection_id)1910 .unwrap()1911 .variable_on_chain_schema,1912 b"test variable on chain schema".to_vec()1913 );1914 });1915}19161917#[test]1918fn set_variable_meta_data_on_nft_token_stores_variable_meta_data() {1919 new_test_ext().execute_with(|| {1920 let collection_id = create_test_collection(&CollectionMode::NFT, 1);19211922 let origin1 = Origin::signed(1);19231924 let data = default_nft_data();1925 create_test_item(1, &data.into());19261927 let variable_data = b"test data".to_vec();1928 assert_ok!(TemplateModule::set_variable_meta_data(1929 origin1,1930 collection_id,1931 1,1932 variable_data.clone()1933 ));19341935 assert_eq!(1936 TemplateModule::nft_item_id(collection_id, 1)1937 .unwrap()1938 .variable_data,1939 variable_data1940 );1941 });1942}19431944#[test]1945fn set_variable_meta_data_on_re_fungible_token_stores_variable_meta_data() {1946 new_test_ext().execute_with(|| {1947 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);19481949 let origin1 = Origin::signed(1);19501951 let data = default_re_fungible_data();1952 create_test_item(1, &data.into());19531954 let variable_data = b"test data".to_vec();1955 assert_ok!(TemplateModule::set_variable_meta_data(1956 origin1,1957 collection_id,1958 1,1959 variable_data.clone()1960 ));19611962 assert_eq!(1963 TemplateModule::refungible_item_id(collection_id, 1)1964 .unwrap()1965 .variable_data,1966 variable_data1967 );1968 });1969}19701971#[test]1972fn set_variable_meta_data_on_fungible_token_fails() {1973 new_test_ext().execute_with(|| {1974 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);19751976 let origin1 = Origin::signed(1);19771978 let data = default_fungible_data();1979 create_test_item(1, &data.into());19801981 let variable_data = b"test data".to_vec();1982 assert_noop!(1983 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),1984 Error::<Test>::CantStoreMetadataInFungibleTokens1985 );1986 });1987}19881989#[test]1990fn set_variable_meta_data_on_nft_token_fails_for_big_data() {1991 new_test_ext().execute_with(|| {1992 let collection_id = create_test_collection(&CollectionMode::NFT, 1);19931994 let origin1 = Origin::signed(1);19951996 let data = default_nft_data();1997 create_test_item(1, &data.into());19981999 let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();2000 assert_noop!(2001 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),2002 Error::<Test>::TokenVariableDataLimitExceeded2003 );2004 });2005}20062007#[test]2008fn set_variable_meta_data_on_re_fungible_token_fails_for_big_data() {2009 new_test_ext().execute_with(|| {2010 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);20112012 let origin1 = Origin::signed(1);20132014 let data = default_re_fungible_data();2015 create_test_item(1, &data.into());20162017 let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();2018 assert_noop!(2019 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),2020 Error::<Test>::TokenVariableDataLimitExceeded2021 );2022 });2023}20242025#[test]2026fn set_variable_meta_data_on_nft_with_item_owner_permission_flag() {2027 new_test_ext().execute_with(|| {2028 20292030 let collection_id = create_test_collection(&CollectionMode::NFT, 1);20312032 let origin1 = Origin::signed(1);20332034 let data = default_nft_data();2035 create_test_item(1, &data.into());20362037 assert_ok!(TemplateModule::set_meta_update_permission_flag(2038 origin1.clone(),2039 collection_id,2040 MetaUpdatePermission::ItemOwner,2041 ));20422043 let variable_data = b"ten chars.".to_vec();2044 assert_ok!(TemplateModule::set_variable_meta_data(2045 origin1,2046 collection_id,2047 1,2048 variable_data.clone()2049 ));20502051 assert_eq!(2052 TemplateModule::nft_item_id(collection_id, 1)2053 .unwrap()2054 .variable_data,2055 variable_data2056 );2057 });2058}20592060#[test]2061fn set_variable_meta_data_on_nft_with_item_owner_permission_flag_neg() {2062 new_test_ext().execute_with(|| {2063 let collection_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);20642065 let origin1 = Origin::signed(1);20662067 assert_ok!(TemplateModule::set_mint_permission(2068 origin1.clone(),2069 collection_id,2070 true2071 ));2072 assert_ok!(TemplateModule::add_to_white_list(2073 origin1.clone(),2074 collection_id,2075 account(1)2076 ));20772078 let data = default_nft_data();2079 create_test_item(1, &data.into());20802081 assert_ok!(TemplateModule::set_meta_update_permission_flag(2082 origin1.clone(),2083 collection_id,2084 MetaUpdatePermission::ItemOwner,2085 ));20862087 let variable_data = b"1234567890123".to_vec();2088 assert_noop!(2089 TemplateModule::set_variable_meta_data(2090 origin1,2091 collection_id,2092 1,2093 variable_data.clone()2094 ),2095 Error::<Test>::TokenVariableDataLimitExceeded2096 );2097 })2098}20992100#[test]2101fn collection_transfer_flag_works() {2102 new_test_ext().execute_with(|| {2103 let origin1 = Origin::signed(1);21042105 let collection_id = create_test_collection(&CollectionMode::NFT, 1);2106 assert_ok!(TemplateModule::set_transfers_enabled_flag(origin1, 1, true));21072108 let data = default_nft_data();2109 create_test_item(collection_id, &data.into());2110 assert_eq!(TemplateModule::balance_count(1, 1), 1);2111 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);21122113 let origin1 = Origin::signed(1);21142115 2116 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1000));2117 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(2));2118 assert_eq!(TemplateModule::balance_count(1, 1), 0);2119 assert_eq!(TemplateModule::balance_count(1, 2), 1);21202121 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);2122 });2123}21242125#[test]2126fn set_variable_meta_data_on_nft_with_admin_flag() {2127 new_test_ext().execute_with(|| {2128 21292130 let collection_id = create_test_collection_for_owner(&CollectionMode::NFT, 2, 1);21312132 let origin1 = Origin::signed(1);2133 let origin2 = Origin::signed(2);21342135 assert_ok!(TemplateModule::set_mint_permission(2136 origin2.clone(),2137 collection_id,2138 true2139 ));2140 assert_ok!(TemplateModule::add_to_white_list(2141 origin2.clone(),2142 collection_id,2143 account(1)2144 ));21452146 assert_ok!(TemplateModule::add_collection_admin(2147 origin2.clone(),2148 collection_id,2149 account(1)2150 ));21512152 let data = default_nft_data();2153 create_test_item(1, &data.into());21542155 assert_ok!(TemplateModule::set_meta_update_permission_flag(2156 origin2.clone(),2157 collection_id,2158 MetaUpdatePermission::Admin,2159 ));21602161 let variable_data = b"test.".to_vec();2162 assert_ok!(TemplateModule::set_variable_meta_data(2163 origin1,2164 collection_id,2165 1,2166 variable_data.clone()2167 ));21682169 assert_eq!(2170 TemplateModule::nft_item_id(collection_id, 1)2171 .unwrap()2172 .variable_data,2173 variable_data2174 );2175 });2176}21772178#[test]2179fn set_variable_meta_data_on_nft_with_admin_flag_neg() {2180 new_test_ext().execute_with(|| {2181 21822183 let collection_id = create_test_collection_for_owner(&CollectionMode::NFT, 2, 1);21842185 let origin1 = Origin::signed(1);2186 let origin2 = Origin::signed(2);21872188 assert_ok!(TemplateModule::set_mint_permission(2189 origin2.clone(),2190 collection_id,2191 true2192 ));2193 assert_ok!(TemplateModule::add_to_white_list(2194 origin2.clone(),2195 collection_id,2196 account(1)2197 ));21982199 let data = default_nft_data();2200 create_test_item(1, &data.into());22012202 assert_ok!(TemplateModule::set_meta_update_permission_flag(2203 origin2.clone(),2204 collection_id,2205 MetaUpdatePermission::Admin,2206 ));22072208 let variable_data = b"test.".to_vec();2209 assert_noop!(2210 TemplateModule::set_variable_meta_data(2211 origin1,2212 collection_id,2213 1,2214 variable_data.clone()2215 ),2216 Error::<Test>::NoPermission2217 );2218 });2219}22202221#[test]2222fn set_variable_meta_flag_after_freeze() {2223 new_test_ext().execute_with(|| {2224 22252226 let collection_id = create_test_collection_for_owner(&CollectionMode::NFT, 2, 1);22272228 let origin2 = Origin::signed(2);22292230 assert_ok!(TemplateModule::set_meta_update_permission_flag(2231 origin2.clone(),2232 collection_id,2233 MetaUpdatePermission::None,2234 ));2235 assert_noop!(2236 TemplateModule::set_meta_update_permission_flag(2237 origin2.clone(),2238 collection_id,2239 MetaUpdatePermission::Admin2240 ),2241 Error::<Test>::MetadataFlagFrozen2242 );2243 });2244}22452246#[test]2247fn set_variable_meta_data_on_nft_with_none_flag_neg() {2248 new_test_ext().execute_with(|| {2249 22502251 let collection_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);2252 let origin1 = Origin::signed(1);22532254 let data = default_nft_data();2255 create_test_item(1, &data.into());22562257 assert_ok!(TemplateModule::set_meta_update_permission_flag(2258 origin1.clone(),2259 collection_id,2260 MetaUpdatePermission::None,2261 ));22622263 let variable_data = b"test.".to_vec();2264 assert_noop!(2265 TemplateModule::set_variable_meta_data(2266 origin1.clone(),2267 collection_id,2268 1,2269 variable_data.clone()2270 ),2271 Error::<Test>::MetadataUpdateDenied2272 );2273 });2274}22752276#[test]2277fn collection_transfer_flag_works_neg() {2278 new_test_ext().execute_with(|| {2279 let origin1 = Origin::signed(1);22802281 let collection_id = create_test_collection(&CollectionMode::NFT, 1);2282 assert_ok!(TemplateModule::set_transfers_enabled_flag(2283 origin1, 1, false2284 ));22852286 let data = default_nft_data();2287 create_test_item(collection_id, &data.into());2288 assert_eq!(TemplateModule::balance_count(1, 1), 1);2289 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);22902291 let origin1 = Origin::signed(1);22922293 2294 assert_noop!(2295 TemplateModule::transfer(origin1, account(2), 1, 1, 1000),2296 Error::<Test>::TransferNotAllowed2297 );2298 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(1));2299 assert_eq!(TemplateModule::balance_count(1, 1), 1);2300 assert_eq!(TemplateModule::balance_count(1, 2), 0);23012302 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);2303 });2304}