12use super::*;3use crate::mock::*;4use crate::{AccessMode, CollectionMode, Ownership, ChainLimits, CreateItemData};5use nft_data_structs::{6 CreateNftData, CreateFungibleData, CreateReFungibleData, CollectionId, TokenId,7 MAX_DECIMAL_POINTS,8};9use frame_support::{assert_noop, assert_ok};10use frame_system::{RawOrigin};1112fn default_collection_numbers_limit() -> u32 {13 1014}1516fn default_limits() {17 assert_ok!(TemplateModule::set_chain_limits(18 RawOrigin::Root.into(),19 ChainLimits {20 collection_numbers_limit: default_collection_numbers_limit(),21 account_token_ownership_limit: 10,22 collections_admins_limit: 5,23 custom_data_limit: 2048,24 nft_sponsor_transfer_timeout: 15,25 fungible_sponsor_transfer_timeout: 15,26 refungible_sponsor_transfer_timeout: 15,27 const_on_chain_schema_limit: 1024,28 offchain_schema_limit: 1024,29 variable_on_chain_schema_limit: 1024,30 }31 ));32}3334fn default_nft_data() -> CreateNftData {35 CreateNftData {36 const_data: vec![1, 2, 3],37 variable_data: vec![3, 2, 1],38 }39}4041fn default_fungible_data() -> CreateFungibleData {42 CreateFungibleData { value: 5 }43}4445fn default_re_fungible_data() -> CreateReFungibleData {46 CreateReFungibleData {47 const_data: vec![1, 2, 3],48 variable_data: vec![3, 2, 1],49 pieces: 1023,50 }51}5253fn create_test_collection_for_owner(54 mode: &CollectionMode,55 owner: u64,56 id: CollectionId,57) -> CollectionId {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();6162 let origin1 = Origin::signed(owner);63 assert_ok!(TemplateModule::create_collection(64 origin1,65 col_name1,66 col_desc1,67 token_prefix1,68 mode.clone()69 ));7071 let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();72 let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();73 let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();74 assert_eq!(TemplateModule::collection_id(id).unwrap().owner, owner);75 assert_eq!(76 TemplateModule::collection_id(id).unwrap().name,77 saved_col_name78 );79 assert_eq!(TemplateModule::collection_id(id).unwrap().mode, *mode);80 assert_eq!(81 TemplateModule::collection_id(id).unwrap().description,82 saved_description83 );84 assert_eq!(85 TemplateModule::collection_id(id).unwrap().token_prefix,86 saved_prefix87 );88 id89}9091fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {92 create_test_collection_for_owner(&mode, 1, id)93}9495fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {96 let origin1 = Origin::signed(1);97 assert_ok!(TemplateModule::create_item(98 origin1,99 collection_id,100 account(1),101 data.clone()102 ));103}104105fn account(sub: u64) -> TestCrossAccountId {106 TestCrossAccountId::from_sub(sub)107}108109110111112#[test]113fn set_version_schema() {114 new_test_ext().execute_with(|| {115 default_limits();116 let origin1 = Origin::signed(1);117 let collection_id = create_test_collection(&CollectionMode::NFT, 1);118119 assert_ok!(TemplateModule::set_schema_version(120 origin1,121 collection_id,122 SchemaVersion::Unique123 ));124 assert_eq!(125 TemplateModule::collection_id(collection_id)126 .unwrap()127 .schema_version,128 SchemaVersion::Unique129 );130 });131}132133#[test]134fn create_fungible_collection_fails_with_large_decimal_numbers() {135 new_test_ext().execute_with(|| {136 default_limits();137138 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();139 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();140 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();141142 let origin1 = Origin::signed(1);143 assert_noop!(144 TemplateModule::create_collection(145 origin1,146 col_name1,147 col_desc1,148 token_prefix1,149 CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1)150 ),151 Error::<Test>::CollectionDecimalPointLimitExceeded152 );153 });154}155156#[test]157fn create_nft_item() {158 new_test_ext().execute_with(|| {159 default_limits();160 let collection_id = create_test_collection(&CollectionMode::NFT, 1);161162 let data = default_nft_data();163 create_test_item(collection_id, &data.clone().into());164 let item = TemplateModule::nft_item_id(collection_id, 1).unwrap();165 assert_eq!(item.const_data, data.const_data);166 assert_eq!(item.variable_data, data.variable_data);167 });168}169170171172#[test]173fn create_nft_multiple_items() {174 new_test_ext().execute_with(|| {175 default_limits();176177 create_test_collection(&CollectionMode::NFT, 1);178179 let origin1 = Origin::signed(1);180181 let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];182183 assert_ok!(TemplateModule::create_multiple_items(184 origin1,185 1,186 account(1),187 items_data188 .clone()189 .into_iter()190 .map(|d| { d.into() })191 .collect()192 ));193 for (index, data) in items_data.iter().enumerate() {194 let item = TemplateModule::nft_item_id(1, (index + 1) as TokenId).unwrap();195 assert_eq!(item.const_data.to_vec(), data.const_data);196 assert_eq!(item.variable_data.to_vec(), data.variable_data);197 }198 });199}200201#[test]202fn create_refungible_item() {203 new_test_ext().execute_with(|| {204 default_limits();205 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);206207 let data = default_re_fungible_data();208 create_test_item(collection_id, &data.clone().into());209 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();210 assert_eq!(item.const_data, data.const_data);211 assert_eq!(item.variable_data, data.variable_data);212 assert_eq!(213 item.owner[0],214 Ownership {215 owner: account(1),216 fraction: 1023217 }218 );219 });220}221222#[test]223fn create_multiple_refungible_items() {224 new_test_ext().execute_with(|| {225 default_limits();226227 create_test_collection(&CollectionMode::ReFungible, 1);228229 let origin1 = Origin::signed(1);230231 let items_data = vec![232 default_re_fungible_data(),233 default_re_fungible_data(),234 default_re_fungible_data(),235 ];236237 assert_ok!(TemplateModule::create_multiple_items(238 origin1,239 1,240 account(1),241 items_data242 .clone()243 .into_iter()244 .map(|d| { d.into() })245 .collect()246 ));247 for (index, data) in items_data.iter().enumerate() {248 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId).unwrap();249 assert_eq!(item.const_data.to_vec(), data.const_data);250 assert_eq!(item.variable_data.to_vec(), data.variable_data);251 assert_eq!(252 item.owner[0],253 Ownership {254 owner: account(1),255 fraction: 1023256 }257 );258 }259 });260}261262#[test]263fn create_fungible_item() {264 new_test_ext().execute_with(|| {265 default_limits();266267 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);268269 let data = default_fungible_data();270 create_test_item(collection_id, &data.into());271272 assert_eq!(TemplateModule::fungible_item_id(collection_id, 1).value, 5);273 });274}275276277278279280281282283284285286287288289290291292293294295296297298299300301302#[test]303fn transfer_fungible_item() {304 new_test_ext().execute_with(|| {305 default_limits();306307 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);308309 let origin1 = Origin::signed(1);310 let origin2 = Origin::signed(2);311312 let data = default_fungible_data();313 create_test_item(collection_id, &data.into());314315 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 5);316 assert_eq!(TemplateModule::balance_count(1, 1), 5);317318 319 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 5));320 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 0);321 assert_eq!(TemplateModule::balance_count(1, 1), 0);322 assert_eq!(TemplateModule::balance_count(1, 2), 5);323324 325 assert_ok!(TemplateModule::transfer(326 origin2.clone(),327 account(3),328 1,329 1,330 3331 ));332 assert_eq!(TemplateModule::balance_count(1, 2), 2);333 assert_eq!(TemplateModule::balance_count(1, 3), 3);334335 336 assert_ok!(TemplateModule::transfer(origin2, account(3), 1, 1, 1));337 assert_eq!(TemplateModule::fungible_item_id(1, 2).value, 1);338 assert_eq!(TemplateModule::fungible_item_id(1, 3).value, 4);339 assert_eq!(TemplateModule::balance_count(1, 2), 1);340 assert_eq!(TemplateModule::balance_count(1, 3), 4);341 });342}343344#[test]345fn transfer_refungible_item() {346 new_test_ext().execute_with(|| {347 default_limits();348349 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);350351 let data = default_re_fungible_data();352 create_test_item(collection_id, &data.clone().into());353354 let origin1 = Origin::signed(1);355 let origin2 = Origin::signed(2);356 {357 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();358 assert_eq!(item.const_data, data.const_data);359 assert_eq!(item.variable_data, data.variable_data);360 assert_eq!(361 item.owner[0],362 Ownership {363 owner: account(1),364 fraction: 1023365 }366 );367 }368 assert_eq!(TemplateModule::balance_count(1, 1), 1023);369 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);370371 372 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1023));373 assert_eq!(374 TemplateModule::refungible_item_id(1, 1).unwrap().owner[0],375 Ownership {376 owner: account(2),377 fraction: 1023378 }379 );380 assert_eq!(TemplateModule::balance_count(1, 1), 0);381 assert_eq!(TemplateModule::balance_count(1, 2), 1023);382 383 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);384385 386 assert_ok!(TemplateModule::transfer(387 origin2.clone(),388 account(3),389 1,390 1,391 500392 ));393 {394 let item = TemplateModule::refungible_item_id(1, 1).unwrap();395 assert_eq!(396 item.owner[0],397 Ownership {398 owner: account(2),399 fraction: 523400 }401 );402 assert_eq!(403 item.owner[1],404 Ownership {405 owner: account(3),406 fraction: 500407 }408 );409 }410 assert_eq!(TemplateModule::balance_count(1, 2), 523);411 assert_eq!(TemplateModule::balance_count(1, 3), 500);412 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);413 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);414415 416 assert_ok!(TemplateModule::transfer(origin2, account(3), 1, 1, 200));417 {418 let item = TemplateModule::refungible_item_id(1, 1).unwrap();419 assert_eq!(420 item.owner[0],421 Ownership {422 owner: account(2),423 fraction: 323424 }425 );426 assert_eq!(427 item.owner[1],428 Ownership {429 owner: account(3),430 fraction: 700431 }432 );433 }434 assert_eq!(TemplateModule::balance_count(1, 2), 323);435 assert_eq!(TemplateModule::balance_count(1, 3), 700);436 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);437 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);438 });439}440441#[test]442fn transfer_nft_item() {443 new_test_ext().execute_with(|| {444 default_limits();445446 let collection_id = create_test_collection(&CollectionMode::NFT, 1);447448 let data = default_nft_data();449 create_test_item(collection_id, &data.into());450 assert_eq!(TemplateModule::balance_count(1, 1), 1);451 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);452453 let origin1 = Origin::signed(1);454 455 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1000));456 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(2));457 assert_eq!(TemplateModule::balance_count(1, 1), 0);458 assert_eq!(TemplateModule::balance_count(1, 2), 1);459 460 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);461 });462}463464#[test]465fn nft_approve_and_transfer_from() {466 new_test_ext().execute_with(|| {467 default_limits();468469 let collection_id = create_test_collection(&CollectionMode::NFT, 1);470471 let data = default_nft_data();472 create_test_item(collection_id, &data.into());473474 let origin1 = Origin::signed(1);475 let origin2 = Origin::signed(2);476477 assert_eq!(TemplateModule::balance_count(1, 1), 1);478 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);479480 481 assert_noop!(482 TemplateModule::transfer_from(origin2.clone(), account(1), account(2), 1, 1, 1),483 Error::<Test>::NoPermission484 );485486 487 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 5));488 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);489 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);490491 assert_ok!(TemplateModule::transfer_from(492 origin2,493 account(1),494 account(3),495 1,496 1,497 1498 ));499 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 4);500 });501}502503#[test]504fn nft_approve_and_transfer_from_white_list() {505 new_test_ext().execute_with(|| {506 default_limits();507508 let collection_id = create_test_collection(&CollectionMode::NFT, 1);509510 let origin1 = Origin::signed(1);511 let origin2 = Origin::signed(2);512513 let data = default_nft_data();514 create_test_item(collection_id, &data.clone().into());515516 assert_eq!(517 TemplateModule::nft_item_id(1, 1).unwrap().const_data,518 data.const_data519 );520 assert_eq!(TemplateModule::balance_count(1, 1), 1);521 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);522523 assert_ok!(TemplateModule::set_mint_permission(524 origin1.clone(),525 1,526 true527 ));528 assert_ok!(TemplateModule::set_public_access_mode(529 origin1.clone(),530 1,531 AccessMode::WhiteList532 ));533 assert_ok!(TemplateModule::add_to_white_list(534 origin1.clone(),535 1,536 account(1)537 ));538 assert_ok!(TemplateModule::add_to_white_list(539 origin1.clone(),540 1,541 account(2)542 ));543 assert_ok!(TemplateModule::add_to_white_list(544 origin1.clone(),545 1,546 account(3)547 ));548549 550 assert_ok!(TemplateModule::approve(551 origin1.clone(),552 account(2),553 1,554 1,555 5556 ));557 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);558 assert_ok!(TemplateModule::approve(origin1, account(3), 1, 1, 5));559 assert_eq!(TemplateModule::approved(1, (1, 1, 3)), 5);560561 assert_ok!(TemplateModule::transfer_from(562 origin2,563 account(1),564 account(3),565 1,566 1,567 1568 ));569 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 4);570 });571}572573#[test]574fn refungible_approve_and_transfer_from() {575 new_test_ext().execute_with(|| {576 default_limits();577578 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);579580 let origin1 = Origin::signed(1);581 let origin2 = Origin::signed(2);582583 let data = default_re_fungible_data();584 create_test_item(collection_id, &data.into());585586 assert_eq!(TemplateModule::balance_count(1, 1), 1023);587 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);588589 assert_ok!(TemplateModule::set_mint_permission(590 origin1.clone(),591 1,592 true593 ));594 assert_ok!(TemplateModule::set_public_access_mode(595 origin1.clone(),596 1,597 AccessMode::WhiteList598 ));599 assert_ok!(TemplateModule::add_to_white_list(600 origin1.clone(),601 1,602 account(1)603 ));604 assert_ok!(TemplateModule::add_to_white_list(605 origin1.clone(),606 1,607 account(2)608 ));609 assert_ok!(TemplateModule::add_to_white_list(610 origin1.clone(),611 1,612 account(3)613 ));614615 616 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 1023));617 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1023);618619 assert_ok!(TemplateModule::transfer_from(620 origin2,621 account(1),622 account(3),623 1,624 1,625 100626 ));627 assert_eq!(TemplateModule::balance_count(1, 1), 923);628 assert_eq!(TemplateModule::balance_count(1, 3), 100);629 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);630 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);631632 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 923);633 });634}635636#[test]637fn fungible_approve_and_transfer_from() {638 new_test_ext().execute_with(|| {639 default_limits();640641 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);642643 let data = default_fungible_data();644 create_test_item(collection_id, &data.into());645646 let origin1 = Origin::signed(1);647 let origin2 = Origin::signed(2);648649 assert_eq!(TemplateModule::balance_count(1, 1), 5);650651 assert_ok!(TemplateModule::set_mint_permission(652 origin1.clone(),653 1,654 true655 ));656 assert_ok!(TemplateModule::set_public_access_mode(657 origin1.clone(),658 1,659 AccessMode::WhiteList660 ));661 assert_ok!(TemplateModule::add_to_white_list(662 origin1.clone(),663 1,664 account(1)665 ));666 assert_ok!(TemplateModule::add_to_white_list(667 origin1.clone(),668 1,669 account(2)670 ));671 assert_ok!(TemplateModule::add_to_white_list(672 origin1.clone(),673 1,674 account(3)675 ));676677 678 assert_ok!(TemplateModule::approve(679 origin1.clone(),680 account(2),681 1,682 1,683 5684 ));685 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);686 assert_ok!(TemplateModule::approve(origin1, account(3), 1, 1, 5));687 assert_eq!(TemplateModule::approved(1, (1, 1, 3)), 5);688 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 5);689690 assert_ok!(TemplateModule::transfer_from(691 origin2.clone(),692 account(1),693 account(3),694 1,695 1,696 4697 ));698 assert_eq!(TemplateModule::balance_count(1, 1), 1);699 assert_eq!(TemplateModule::balance_count(1, 3), 4);700701 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);702703 assert_noop!(704 TemplateModule::transfer_from(origin2, account(1), account(3), 1, 1, 4),705 Error::<Test>::NoPermission706 );707 });708}709710#[test]711fn change_collection_owner() {712 new_test_ext().execute_with(|| {713 default_limits();714715 let collection_id = create_test_collection(&CollectionMode::NFT, 1);716717 let origin1 = Origin::signed(1);718 assert_ok!(TemplateModule::change_collection_owner(719 origin1,720 collection_id,721 2722 ));723 assert_eq!(724 TemplateModule::collection_id(collection_id).unwrap().owner,725 2726 );727 });728}729730#[test]731fn destroy_collection() {732 new_test_ext().execute_with(|| {733 default_limits();734735 let collection_id = create_test_collection(&CollectionMode::NFT, 1);736737 let origin1 = Origin::signed(1);738 assert_ok!(TemplateModule::destroy_collection(origin1, collection_id));739 });740}741742#[test]743fn burn_nft_item() {744 new_test_ext().execute_with(|| {745 default_limits();746747 let collection_id = create_test_collection(&CollectionMode::NFT, 1);748749 let origin1 = Origin::signed(1);750 assert_ok!(TemplateModule::add_collection_admin(751 origin1.clone(),752 collection_id,753 account(2)754 ));755756 let data = default_nft_data();757 create_test_item(collection_id, &data.into());758759 760 assert_eq!(TemplateModule::balance_count(1, 1), 1);761762 763 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 5));764 assert_noop!(765 TemplateModule::burn_item(origin1, 1, 1, 5),766 Error::<Test>::TokenNotFound767 );768769 assert_eq!(TemplateModule::balance_count(1, 1), 0);770 });771}772773#[test]774fn burn_fungible_item() {775 new_test_ext().execute_with(|| {776 default_limits();777778 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);779780 let origin1 = Origin::signed(1);781 assert_ok!(TemplateModule::add_collection_admin(782 origin1.clone(),783 collection_id,784 account(2)785 ));786787 let data = default_fungible_data();788 create_test_item(collection_id, &data.into());789790 791 assert_eq!(TemplateModule::balance_count(1, 1), 5);792793 794 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 5));795 assert_noop!(796 TemplateModule::burn_item(origin1, 1, 1, 5),797 Error::<Test>::TokenValueNotEnough798 );799800 assert_eq!(TemplateModule::balance_count(1, 1), 0);801 });802}803804#[test]805fn burn_refungible_item() {806 new_test_ext().execute_with(|| {807 default_limits();808809 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);810 let origin1 = Origin::signed(1);811812 assert_ok!(TemplateModule::set_mint_permission(813 origin1.clone(),814 collection_id,815 true816 ));817 assert_ok!(TemplateModule::set_public_access_mode(818 origin1.clone(),819 collection_id,820 AccessMode::WhiteList821 ));822 assert_ok!(TemplateModule::add_to_white_list(823 origin1.clone(),824 1,825 account(1)826 ));827828 assert_ok!(TemplateModule::add_collection_admin(829 origin1.clone(),830 1,831 account(2)832 ));833834 let data = default_re_fungible_data();835 create_test_item(collection_id, &data.into());836837 838 assert_eq!(TemplateModule::balance_count(1, 1), 1023);839840 841 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 1023));842 assert_noop!(843 TemplateModule::burn_item(origin1, 1, 1, 1023),844 Error::<Test>::TokenNotFound845 );846847 assert_eq!(TemplateModule::balance_count(1, 1), 0);848 });849}850851#[test]852fn add_collection_admin() {853 new_test_ext().execute_with(|| {854 default_limits();855856 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);857 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);858 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);859860 let origin1 = Origin::signed(1);861862 863 assert_ok!(TemplateModule::add_collection_admin(864 origin1.clone(),865 collection1_id,866 account(2)867 ));868 assert_ok!(TemplateModule::add_collection_admin(869 origin1,870 collection1_id,871 account(3)872 ));873874 assert!(TemplateModule::admin_list_collection(collection1_id).contains(&account(2)),);875 assert!(TemplateModule::admin_list_collection(collection1_id).contains(&account(3)),);876 });877}878879#[test]880fn remove_collection_admin() {881 new_test_ext().execute_with(|| {882 default_limits();883884 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);885 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);886 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);887888 let origin1 = Origin::signed(1);889 let origin2 = Origin::signed(2);890891 892 assert_ok!(TemplateModule::add_collection_admin(893 origin1.clone(),894 collection1_id,895 account(2)896 ));897 assert_ok!(TemplateModule::add_collection_admin(898 origin1,899 collection1_id,900 account(3)901 ));902903 assert!(TemplateModule::admin_list_collection(1).contains(&account(2)),);904 assert!(TemplateModule::admin_list_collection(1).contains(&account(3)),);905906 907 assert_ok!(TemplateModule::remove_collection_admin(908 origin2,909 1,910 account(3)911 ));912 assert!(!TemplateModule::admin_list_collection(1).contains(&account(3)),);913 });914}915916#[test]917fn balance_of() {918 new_test_ext().execute_with(|| {919 default_limits();920921 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);922 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);923 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3);924925 926 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0);927 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 0);928 assert_eq!(929 TemplateModule::balance_count(re_fungible_collection_id, 1),930 0931 );932933 let nft_data = default_nft_data();934 create_test_item(nft_collection_id, &nft_data.into());935936 let fungible_data = default_fungible_data();937 create_test_item(fungible_collection_id, &fungible_data.into());938939 let re_fungible_data = default_re_fungible_data();940 create_test_item(re_fungible_collection_id, &re_fungible_data.into());941942 943 assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);944 assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5);945 assert_eq!(946 TemplateModule::balance_count(re_fungible_collection_id, 1),947 1023948 );949 assert_eq!(950 TemplateModule::nft_item_id(nft_collection_id, 1)951 .unwrap()952 .owner,953 account(1)954 );955 assert_eq!(956 TemplateModule::fungible_item_id(fungible_collection_id, 1).value,957 5958 );959 assert_eq!(960 TemplateModule::refungible_item_id(re_fungible_collection_id, 1)961 .unwrap()962 .owner[0]963 .owner,964 account(1)965 );966 });967}968969#[test]970fn approve() {971 new_test_ext().execute_with(|| {972 default_limits();973974 let collection_id = create_test_collection(&CollectionMode::NFT, 1);975976 let data = default_nft_data();977 create_test_item(collection_id, &data.into());978979 let origin1 = Origin::signed(1);980981 982 assert_ok!(TemplateModule::approve(origin1, account(2), 1, 1, 1));983 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);984 });985}986987#[test]988fn transfer_from() {989 new_test_ext().execute_with(|| {990 default_limits();991992 let collection_id = create_test_collection(&CollectionMode::NFT, 1);993 let origin1 = Origin::signed(1);994 let origin2 = Origin::signed(2);995996 let data = default_nft_data();997 create_test_item(collection_id, &data.into());998999 1000 assert_ok!(TemplateModule::approve(1001 origin1.clone(),1002 account(2),1003 1,1004 1,1005 11006 ));1007 assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1);10081009 assert_ok!(TemplateModule::set_mint_permission(1010 origin1.clone(),1011 1,1012 true1013 ));1014 assert_ok!(TemplateModule::set_public_access_mode(1015 origin1.clone(),1016 1,1017 AccessMode::WhiteList1018 ));1019 assert_ok!(TemplateModule::add_to_white_list(1020 origin1.clone(),1021 1,1022 account(1)1023 ));1024 assert_ok!(TemplateModule::add_to_white_list(1025 origin1.clone(),1026 1,1027 account(2)1028 ));1029 assert_ok!(TemplateModule::add_to_white_list(origin1, 1, account(3)));10301031 assert_ok!(TemplateModule::transfer_from(1032 origin2,1033 account(1),1034 account(2),1035 1,1036 1,1037 11038 ));10391040 1041 assert_eq!(TemplateModule::balance_count(1, 1), 0);1042 assert_eq!(TemplateModule::balance_count(1, 2), 1);1043 });1044}1045104610471048104910501051#[test]1052fn owner_can_add_address_to_white_list() {1053 new_test_ext().execute_with(|| {1054 default_limits();10551056 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10571058 let origin1 = Origin::signed(1);1059 assert_ok!(TemplateModule::add_to_white_list(1060 origin1,1061 collection_id,1062 account(2)1063 ));1064 assert!(TemplateModule::white_list(collection_id, 2));1065 });1066}10671068#[test]1069fn admin_can_add_address_to_white_list() {1070 new_test_ext().execute_with(|| {1071 default_limits();10721073 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1074 let origin1 = Origin::signed(1);1075 let origin2 = Origin::signed(2);10761077 assert_ok!(TemplateModule::add_collection_admin(1078 origin1,1079 collection_id,1080 account(2)1081 ));1082 assert_ok!(TemplateModule::add_to_white_list(1083 origin2,1084 collection_id,1085 account(3)1086 ));1087 assert!(TemplateModule::white_list(collection_id, 3));1088 });1089}10901091#[test]1092fn nonprivileged_user_cannot_add_address_to_white_list() {1093 new_test_ext().execute_with(|| {1094 default_limits();10951096 let collection_id = create_test_collection(&CollectionMode::NFT, 1);10971098 let origin2 = Origin::signed(2);1099 assert_noop!(1100 TemplateModule::add_to_white_list(origin2, collection_id, account(3)),1101 Error::<Test>::NoPermission1102 );1103 });1104}11051106#[test]1107fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {1108 new_test_ext().execute_with(|| {1109 default_limits();11101111 let origin1 = Origin::signed(1);11121113 assert_noop!(1114 TemplateModule::add_to_white_list(origin1, 1, account(2)),1115 Error::<Test>::CollectionNotFound1116 );1117 });1118}11191120#[test]1121fn nobody_can_add_address_to_white_list_of_deleted_collection() {1122 new_test_ext().execute_with(|| {1123 default_limits();11241125 let collection_id = create_test_collection(&CollectionMode::NFT, 1);11261127 let origin1 = Origin::signed(1);1128 assert_ok!(TemplateModule::destroy_collection(1129 origin1.clone(),1130 collection_id1131 ));1132 assert_noop!(1133 TemplateModule::add_to_white_list(origin1, collection_id, account(2)),1134 Error::<Test>::CollectionNotFound1135 );1136 });1137}113811391140#[test]1141fn address_is_already_added_to_white_list() {1142 new_test_ext().execute_with(|| {1143 default_limits();11441145 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1146 let origin1 = Origin::signed(1);11471148 assert_ok!(TemplateModule::add_to_white_list(1149 origin1.clone(),1150 collection_id,1151 account(2)1152 ));1153 assert_ok!(TemplateModule::add_to_white_list(1154 origin1,1155 collection_id,1156 account(2)1157 ));1158 assert!(TemplateModule::white_list(collection_id, 2));1159 });1160}11611162#[test]1163fn owner_can_remove_address_from_white_list() {1164 new_test_ext().execute_with(|| {1165 default_limits();11661167 let collection_id = create_test_collection(&CollectionMode::NFT, 1);11681169 let origin1 = Origin::signed(1);1170 assert_ok!(TemplateModule::add_to_white_list(1171 origin1.clone(),1172 collection_id,1173 account(2)1174 ));1175 assert_ok!(TemplateModule::remove_from_white_list(1176 origin1,1177 collection_id,1178 account(2)1179 ));1180 assert!(!TemplateModule::white_list(collection_id, 2));1181 });1182}11831184#[test]1185fn admin_can_remove_address_from_white_list() {1186 new_test_ext().execute_with(|| {1187 default_limits();11881189 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1190 let origin1 = Origin::signed(1);1191 let origin2 = Origin::signed(2);11921193 assert_ok!(TemplateModule::add_collection_admin(1194 origin1.clone(),1195 collection_id,1196 account(2)1197 ));11981199 assert_ok!(TemplateModule::add_to_white_list(1200 origin1,1201 collection_id,1202 account(3)1203 ));1204 assert_ok!(TemplateModule::remove_from_white_list(1205 origin2,1206 collection_id,1207 account(3)1208 ));1209 assert!(!TemplateModule::white_list(collection_id, 3));1210 });1211}12121213#[test]1214fn nonprivileged_user_cannot_remove_address_from_white_list() {1215 new_test_ext().execute_with(|| {1216 default_limits();12171218 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1219 let origin1 = Origin::signed(1);1220 let origin2 = Origin::signed(2);12211222 assert_ok!(TemplateModule::add_to_white_list(1223 origin1,1224 collection_id,1225 account(2)1226 ));1227 assert_noop!(1228 TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),1229 Error::<Test>::NoPermission1230 );1231 assert!(TemplateModule::white_list(collection_id, 2));1232 });1233}12341235#[test]1236fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {1237 new_test_ext().execute_with(|| {1238 default_limits();1239 let origin1 = Origin::signed(1);12401241 assert_noop!(1242 TemplateModule::remove_from_white_list(origin1, 1, account(2)),1243 Error::<Test>::CollectionNotFound1244 );1245 });1246}12471248#[test]1249fn nobody_can_remove_address_from_white_list_of_deleted_collection() {1250 new_test_ext().execute_with(|| {1251 default_limits();12521253 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1254 let origin1 = Origin::signed(1);1255 let origin2 = Origin::signed(2);12561257 assert_ok!(TemplateModule::add_to_white_list(1258 origin1.clone(),1259 collection_id,1260 account(2)1261 ));1262 assert_ok!(TemplateModule::destroy_collection(origin1, collection_id));1263 assert_noop!(1264 TemplateModule::remove_from_white_list(origin2, collection_id, account(2)),1265 Error::<Test>::CollectionNotFound1266 );1267 assert!(!TemplateModule::white_list(collection_id, 2));1268 });1269}127012711272#[test]1273fn address_is_already_removed_from_white_list() {1274 new_test_ext().execute_with(|| {1275 default_limits();12761277 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1278 let origin1 = Origin::signed(1);12791280 assert_ok!(TemplateModule::add_to_white_list(1281 origin1.clone(),1282 collection_id,1283 account(2)1284 ));1285 assert_ok!(TemplateModule::remove_from_white_list(1286 origin1.clone(),1287 collection_id,1288 account(2)1289 ));1290 assert_ok!(TemplateModule::remove_from_white_list(1291 origin1,1292 collection_id,1293 account(2)1294 ));1295 assert!(!TemplateModule::white_list(collection_id, 2));1296 });1297}129812991300#[test]1301fn white_list_test_1() {1302 new_test_ext().execute_with(|| {1303 default_limits();13041305 let collection_id = create_test_collection(&CollectionMode::NFT, 1);13061307 let origin1 = Origin::signed(1);13081309 let data = default_nft_data();1310 create_test_item(collection_id, &data.into());13111312 assert_ok!(TemplateModule::set_public_access_mode(1313 origin1.clone(),1314 collection_id,1315 AccessMode::WhiteList1316 ));1317 assert_ok!(TemplateModule::add_to_white_list(1318 origin1.clone(),1319 collection_id,1320 account(2)1321 ));13221323 assert_noop!(1324 TemplateModule::transfer(origin1, account(3), 1, 1, 1),1325 Error::<Test>::AddresNotInWhiteList1326 );1327 });1328}13291330#[test]1331fn white_list_test_2() {1332 new_test_ext().execute_with(|| {1333 default_limits();13341335 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1336 let origin1 = Origin::signed(1);13371338 let data = default_nft_data();1339 create_test_item(collection_id, &data.into());13401341 assert_ok!(TemplateModule::set_public_access_mode(1342 origin1.clone(),1343 collection_id,1344 AccessMode::WhiteList1345 ));1346 assert_ok!(TemplateModule::add_to_white_list(1347 origin1.clone(),1348 1,1349 account(1)1350 ));1351 assert_ok!(TemplateModule::add_to_white_list(1352 origin1.clone(),1353 1,1354 account(2)1355 ));13561357 1358 assert_ok!(TemplateModule::approve(1359 origin1.clone(),1360 account(1),1361 1,1362 1,1363 11364 ));1365 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);13661367 assert_ok!(TemplateModule::remove_from_white_list(1368 origin1.clone(),1369 1,1370 account(1)1371 ));13721373 assert_noop!(1374 TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),1375 Error::<Test>::AddresNotInWhiteList1376 );1377 });1378}137913801381#[test]1382fn white_list_test_3() {1383 new_test_ext().execute_with(|| {1384 default_limits();13851386 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_ok!(TemplateModule::add_to_white_list(1399 origin1.clone(),1400 1,1401 account(1)1402 ));14031404 assert_noop!(1405 TemplateModule::transfer(origin1, account(3), 1, 1, 1),1406 Error::<Test>::AddresNotInWhiteList1407 );1408 });1409}14101411#[test]1412fn white_list_test_4() {1413 new_test_ext().execute_with(|| {1414 default_limits();14151416 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14171418 let origin1 = Origin::signed(1);14191420 let data = default_nft_data();1421 create_test_item(collection_id, &data.into());14221423 assert_ok!(TemplateModule::set_public_access_mode(1424 origin1.clone(),1425 collection_id,1426 AccessMode::WhiteList1427 ));1428 assert_ok!(TemplateModule::add_to_white_list(1429 origin1.clone(),1430 collection_id,1431 account(1)1432 ));1433 assert_ok!(TemplateModule::add_to_white_list(1434 origin1.clone(),1435 collection_id,1436 account(2)1437 ));14381439 1440 assert_ok!(TemplateModule::approve(1441 origin1.clone(),1442 account(1),1443 1,1444 1,1445 11446 ));1447 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 1);14481449 assert_ok!(TemplateModule::remove_from_white_list(1450 origin1.clone(),1451 collection_id,1452 account(2)1453 ));14541455 assert_noop!(1456 TemplateModule::transfer_from(origin1, account(1), account(3), 1, 1, 1),1457 Error::<Test>::AddresNotInWhiteList1458 );1459 });1460}146114621463#[test]1464fn white_list_test_5() {1465 new_test_ext().execute_with(|| {1466 default_limits();14671468 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14691470 let origin1 = Origin::signed(1);14711472 let data = default_nft_data();1473 create_test_item(collection_id, &data.into());14741475 assert_ok!(TemplateModule::set_public_access_mode(1476 origin1.clone(),1477 collection_id,1478 AccessMode::WhiteList1479 ));1480 assert_noop!(1481 TemplateModule::burn_item(origin1, 1, 1, 5),1482 Error::<Test>::AddresNotInWhiteList1483 );1484 });1485}148614871488#[test]1489fn white_list_test_6() {1490 new_test_ext().execute_with(|| {1491 default_limits();14921493 let collection_id = create_test_collection(&CollectionMode::NFT, 1);14941495 let origin1 = Origin::signed(1);14961497 let data = default_nft_data();1498 create_test_item(collection_id, &data.into());14991500 assert_ok!(TemplateModule::set_public_access_mode(1501 origin1.clone(),1502 collection_id,1503 AccessMode::WhiteList1504 ));15051506 1507 assert_noop!(1508 TemplateModule::approve(origin1, account(1), 1, 1, 5),1509 Error::<Test>::AddresNotInWhiteList1510 );1511 });1512}1513151415151516#[test]1517fn white_list_test_7() {1518 new_test_ext().execute_with(|| {1519 default_limits();15201521 let collection_id = create_test_collection(&CollectionMode::NFT, 1);15221523 let data = default_nft_data();1524 create_test_item(collection_id, &data.into());15251526 let origin1 = Origin::signed(1);15271528 assert_ok!(TemplateModule::set_public_access_mode(1529 origin1.clone(),1530 collection_id,1531 AccessMode::WhiteList1532 ));1533 assert_ok!(TemplateModule::add_to_white_list(1534 origin1.clone(),1535 collection_id,1536 account(1)1537 ));1538 assert_ok!(TemplateModule::add_to_white_list(1539 origin1.clone(),1540 collection_id,1541 account(2)1542 ));15431544 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1));1545 });1546}15471548#[test]1549fn white_list_test_8() {1550 new_test_ext().execute_with(|| {1551 default_limits();15521553 let collection_id = create_test_collection(&CollectionMode::NFT, 1);15541555 let data = default_nft_data();1556 create_test_item(collection_id, &data.into());15571558 let origin1 = Origin::signed(1);15591560 assert_ok!(TemplateModule::set_public_access_mode(1561 origin1.clone(),1562 collection_id,1563 AccessMode::WhiteList1564 ));1565 assert_ok!(TemplateModule::add_to_white_list(1566 origin1.clone(),1567 collection_id,1568 account(1)1569 ));1570 assert_ok!(TemplateModule::add_to_white_list(1571 origin1.clone(),1572 collection_id,1573 account(2)1574 ));15751576 1577 assert_ok!(TemplateModule::approve(1578 origin1.clone(),1579 account(1),1580 1,1581 1,1582 51583 ));1584 assert_eq!(TemplateModule::approved(1, (1, 1, 1)), 5);15851586 assert_ok!(TemplateModule::transfer_from(1587 origin1,1588 account(1),1589 account(2),1590 1,1591 1,1592 11593 ));1594 });1595}159615971598#[test]1599fn white_list_test_9() {1600 new_test_ext().execute_with(|| {1601 default_limits();16021603 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1604 let origin1 = Origin::signed(1);16051606 assert_ok!(TemplateModule::set_public_access_mode(1607 origin1.clone(),1608 collection_id,1609 AccessMode::WhiteList1610 ));1611 assert_ok!(TemplateModule::set_mint_permission(1612 origin1,1613 collection_id,1614 false1615 ));16161617 let data = default_nft_data();1618 create_test_item(collection_id, &data.into());1619 });1620}162116221623#[test]1624fn white_list_test_10() {1625 new_test_ext().execute_with(|| {1626 default_limits();16271628 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16291630 let origin1 = Origin::signed(1);1631 let origin2 = Origin::signed(2);16321633 assert_ok!(TemplateModule::set_public_access_mode(1634 origin1.clone(),1635 collection_id,1636 AccessMode::WhiteList1637 ));1638 assert_ok!(TemplateModule::set_mint_permission(1639 origin1.clone(),1640 collection_id,1641 false1642 ));16431644 assert_ok!(TemplateModule::add_collection_admin(1645 origin1,1646 collection_id,1647 account(2)1648 ));16491650 assert_ok!(TemplateModule::create_item(1651 origin2,1652 collection_id,1653 account(2),1654 default_nft_data().into()1655 ));1656 });1657}165816591660#[test]1661fn white_list_test_11() {1662 new_test_ext().execute_with(|| {1663 default_limits();16641665 let collection_id = create_test_collection(&CollectionMode::NFT, 1);16661667 let origin1 = Origin::signed(1);1668 let origin2 = Origin::signed(2);16691670 assert_ok!(TemplateModule::set_public_access_mode(1671 origin1.clone(),1672 collection_id,1673 AccessMode::WhiteList1674 ));1675 assert_ok!(TemplateModule::set_mint_permission(1676 origin1.clone(),1677 collection_id,1678 false1679 ));1680 assert_ok!(TemplateModule::add_to_white_list(1681 origin1,1682 collection_id,1683 account(2)1684 ));16851686 assert_noop!(1687 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1688 Error::<Test>::PublicMintingNotAllowed1689 );1690 });1691}169216931694#[test]1695fn white_list_test_12() {1696 new_test_ext().execute_with(|| {1697 default_limits();16981699 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17001701 let origin1 = Origin::signed(1);1702 let origin2 = Origin::signed(2);17031704 assert_ok!(TemplateModule::set_public_access_mode(1705 origin1.clone(),1706 collection_id,1707 AccessMode::WhiteList1708 ));1709 assert_ok!(TemplateModule::set_mint_permission(1710 origin1,1711 collection_id,1712 false1713 ));17141715 assert_noop!(1716 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1717 Error::<Test>::PublicMintingNotAllowed1718 );1719 });1720}172117221723#[test]1724fn white_list_test_13() {1725 new_test_ext().execute_with(|| {1726 default_limits();17271728 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17291730 let origin1 = Origin::signed(1);17311732 assert_ok!(TemplateModule::set_public_access_mode(1733 origin1.clone(),1734 collection_id,1735 AccessMode::WhiteList1736 ));1737 assert_ok!(TemplateModule::set_mint_permission(1738 origin1,1739 collection_id,1740 true1741 ));17421743 let data = default_nft_data();1744 create_test_item(collection_id, &data.into());1745 });1746}174717481749#[test]1750fn white_list_test_14() {1751 new_test_ext().execute_with(|| {1752 default_limits();17531754 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17551756 let origin1 = Origin::signed(1);1757 let origin2 = Origin::signed(2);17581759 assert_ok!(TemplateModule::set_public_access_mode(1760 origin1.clone(),1761 collection_id,1762 AccessMode::WhiteList1763 ));1764 assert_ok!(TemplateModule::set_mint_permission(1765 origin1.clone(),1766 collection_id,1767 true1768 ));17691770 assert_ok!(TemplateModule::add_collection_admin(1771 origin1,1772 collection_id,1773 account(2)1774 ));17751776 assert_ok!(TemplateModule::create_item(1777 origin2,1778 1,1779 account(2),1780 default_nft_data().into()1781 ));1782 });1783}178417851786#[test]1787fn white_list_test_15() {1788 new_test_ext().execute_with(|| {1789 default_limits();17901791 let collection_id = create_test_collection(&CollectionMode::NFT, 1);17921793 let origin1 = Origin::signed(1);1794 let origin2 = Origin::signed(2);17951796 assert_ok!(TemplateModule::set_public_access_mode(1797 origin1.clone(),1798 collection_id,1799 AccessMode::WhiteList1800 ));1801 assert_ok!(TemplateModule::set_mint_permission(1802 origin1,1803 collection_id,1804 true1805 ));18061807 assert_noop!(1808 TemplateModule::create_item(origin2, 1, account(2), default_nft_data().into()),1809 Error::<Test>::AddresNotInWhiteList1810 );1811 });1812}181318141815#[test]1816fn white_list_test_16() {1817 new_test_ext().execute_with(|| {1818 default_limits();18191820 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18211822 let origin1 = Origin::signed(1);1823 let origin2 = Origin::signed(2);18241825 assert_ok!(TemplateModule::set_public_access_mode(1826 origin1.clone(),1827 collection_id,1828 AccessMode::WhiteList1829 ));1830 assert_ok!(TemplateModule::set_mint_permission(1831 origin1.clone(),1832 collection_id,1833 true1834 ));1835 assert_ok!(TemplateModule::add_to_white_list(1836 origin1,1837 collection_id,1838 account(2)1839 ));18401841 assert_ok!(TemplateModule::create_item(1842 origin2,1843 1,1844 account(2),1845 default_nft_data().into()1846 ));1847 });1848}184918501851#[test]1852fn total_number_collections_bound() {1853 new_test_ext().execute_with(|| {1854 default_limits();18551856 create_test_collection(&CollectionMode::NFT, 1);1857 });1858}185918601861#[test]1862fn total_number_collections_bound_neg() {1863 new_test_ext().execute_with(|| {1864 default_limits();18651866 let origin1 = Origin::signed(1);18671868 for i in 0..default_collection_numbers_limit() {1869 create_test_collection(&CollectionMode::NFT, i + 1);1870 }18711872 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1873 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1874 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();18751876 1877 assert_noop!(1878 TemplateModule::create_collection(1879 origin1,1880 col_name1,1881 col_desc1,1882 token_prefix1,1883 CollectionMode::NFT1884 ),1885 Error::<Test>::TotalCollectionsLimitExceeded1886 );1887 });1888}188918901891#[test]1892fn owned_tokens_bound() {1893 new_test_ext().execute_with(|| {1894 default_limits();18951896 let collection_id = create_test_collection(&CollectionMode::NFT, 1);18971898 let data = default_nft_data();1899 create_test_item(collection_id, &data.clone().into());1900 create_test_item(collection_id, &data.into());1901 });1902}190319041905#[test]1906fn owned_tokens_bound_neg() {1907 new_test_ext().execute_with(|| {1908 assert_ok!(TemplateModule::set_chain_limits(1909 RawOrigin::Root.into(),1910 ChainLimits {1911 collection_numbers_limit: 10,1912 account_token_ownership_limit: 1,1913 collections_admins_limit: 5,1914 custom_data_limit: 2048,1915 nft_sponsor_transfer_timeout: 15,1916 fungible_sponsor_transfer_timeout: 15,1917 refungible_sponsor_transfer_timeout: 15,1918 const_on_chain_schema_limit: 1024,1919 offchain_schema_limit: 1024,1920 variable_on_chain_schema_limit: 1024,1921 }1922 ));19231924 let collection_id = create_test_collection(&CollectionMode::NFT, 1);19251926 let origin1 = Origin::signed(1);1927 let data = default_nft_data();1928 create_test_item(collection_id, &data.clone().into());19291930 assert_noop!(1931 TemplateModule::create_item(origin1, 1, account(1), data.into()),1932 Error::<Test>::AddressOwnershipLimitExceeded1933 );1934 });1935}193619371938#[test]1939fn collection_admins_bound() {1940 new_test_ext().execute_with(|| {1941 assert_ok!(TemplateModule::set_chain_limits(1942 RawOrigin::Root.into(),1943 ChainLimits {1944 collection_numbers_limit: 10,1945 account_token_ownership_limit: 10,1946 collections_admins_limit: 2,1947 custom_data_limit: 2048,1948 nft_sponsor_transfer_timeout: 15,1949 fungible_sponsor_transfer_timeout: 15,1950 refungible_sponsor_transfer_timeout: 15,1951 const_on_chain_schema_limit: 1024,1952 offchain_schema_limit: 1024,1953 variable_on_chain_schema_limit: 1024,1954 }1955 ));19561957 let collection_id = create_test_collection(&CollectionMode::NFT, 1);19581959 let origin1 = Origin::signed(1);19601961 assert_ok!(TemplateModule::add_collection_admin(1962 origin1.clone(),1963 collection_id,1964 account(2)1965 ));1966 assert_ok!(TemplateModule::add_collection_admin(1967 origin1,1968 collection_id,1969 account(3)1970 ));1971 });1972}197319741975#[test]1976fn collection_admins_bound_neg() {1977 new_test_ext().execute_with(|| {1978 assert_ok!(TemplateModule::set_chain_limits(1979 RawOrigin::Root.into(),1980 ChainLimits {1981 collection_numbers_limit: 10,1982 account_token_ownership_limit: 1,1983 collections_admins_limit: 1,1984 custom_data_limit: 2048,1985 nft_sponsor_transfer_timeout: 15,1986 fungible_sponsor_transfer_timeout: 15,1987 refungible_sponsor_transfer_timeout: 15,1988 const_on_chain_schema_limit: 1024,1989 offchain_schema_limit: 1024,1990 variable_on_chain_schema_limit: 1024,1991 }1992 ));19931994 let collection_id = create_test_collection(&CollectionMode::NFT, 1);19951996 let origin1 = Origin::signed(1);19971998 assert_ok!(TemplateModule::add_collection_admin(1999 origin1.clone(),2000 collection_id,2001 account(2)2002 ));2003 assert_noop!(2004 TemplateModule::add_collection_admin(origin1, collection_id, account(3)),2005 Error::<Test>::CollectionAdminsLimitExceeded2006 );2007 });2008}200920102011#[test]2012fn custom_data_size_nft_const_data_bound_neg() {2013 new_test_ext().execute_with(|| {2014 assert_ok!(TemplateModule::set_chain_limits(2015 RawOrigin::Root.into(),2016 ChainLimits {2017 collection_numbers_limit: 10,2018 account_token_ownership_limit: 10,2019 collections_admins_limit: 5,2020 custom_data_limit: 2,2021 nft_sponsor_transfer_timeout: 15,2022 fungible_sponsor_transfer_timeout: 15,2023 refungible_sponsor_transfer_timeout: 15,2024 const_on_chain_schema_limit: 1024,2025 offchain_schema_limit: 1024,2026 variable_on_chain_schema_limit: 1024,2027 }2028 ));20292030 let collection_id = create_test_collection(&CollectionMode::NFT, 1);20312032 let origin1 = Origin::signed(1);2033 let too_big_const_data = CreateItemData::NFT(CreateNftData {2034 const_data: vec![1, 2, 3, 4],2035 variable_data: vec![],2036 });20372038 assert_noop!(2039 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2040 Error::<Test>::TokenConstDataLimitExceeded2041 );2042 });2043}204420452046#[test]2047fn custom_data_size_nft_variable_data_bound_neg() {2048 new_test_ext().execute_with(|| {2049 assert_ok!(TemplateModule::set_chain_limits(2050 RawOrigin::Root.into(),2051 ChainLimits {2052 collection_numbers_limit: 10,2053 account_token_ownership_limit: 10,2054 collections_admins_limit: 5,2055 custom_data_limit: 2,2056 nft_sponsor_transfer_timeout: 15,2057 fungible_sponsor_transfer_timeout: 15,2058 refungible_sponsor_transfer_timeout: 15,2059 const_on_chain_schema_limit: 1024,2060 offchain_schema_limit: 1024,2061 variable_on_chain_schema_limit: 1024,2062 }2063 ));20642065 let collection_id = create_test_collection(&CollectionMode::NFT, 1);20662067 let origin1 = Origin::signed(1);2068 let too_big_const_data = CreateItemData::NFT(CreateNftData {2069 const_data: vec![],2070 variable_data: vec![1, 2, 3, 4],2071 });20722073 assert_noop!(2074 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2075 Error::<Test>::TokenVariableDataLimitExceeded2076 );2077 });2078}207920802081#[test]2082fn custom_data_size_re_fungible_const_data_bound_neg() {2083 new_test_ext().execute_with(|| {2084 assert_ok!(TemplateModule::set_chain_limits(2085 RawOrigin::Root.into(),2086 ChainLimits {2087 collection_numbers_limit: 10,2088 account_token_ownership_limit: 10,2089 collections_admins_limit: 5,2090 custom_data_limit: 2,2091 nft_sponsor_transfer_timeout: 15,2092 fungible_sponsor_transfer_timeout: 15,2093 refungible_sponsor_transfer_timeout: 15,2094 const_on_chain_schema_limit: 1024,2095 offchain_schema_limit: 1024,2096 variable_on_chain_schema_limit: 1024,2097 }2098 ));20992100 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21012102 let origin1 = Origin::signed(1);2103 let too_big_const_data = CreateItemData::NFT(CreateNftData {2104 const_data: vec![1, 2, 3, 4],2105 variable_data: vec![],2106 });21072108 assert_noop!(2109 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2110 Error::<Test>::TokenConstDataLimitExceeded2111 );2112 });2113}211421152116#[test]2117fn custom_data_size_re_fungible_variable_data_bound_neg() {2118 new_test_ext().execute_with(|| {2119 assert_ok!(TemplateModule::set_chain_limits(2120 RawOrigin::Root.into(),2121 ChainLimits {2122 collection_numbers_limit: 10,2123 account_token_ownership_limit: 10,2124 collections_admins_limit: 5,2125 custom_data_limit: 2,2126 nft_sponsor_transfer_timeout: 15,2127 fungible_sponsor_transfer_timeout: 15,2128 refungible_sponsor_transfer_timeout: 15,2129 const_on_chain_schema_limit: 1024,2130 offchain_schema_limit: 1024,2131 variable_on_chain_schema_limit: 1024,2132 }2133 ));21342135 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21362137 let origin1 = Origin::signed(1);2138 let too_big_const_data = CreateItemData::NFT(CreateNftData {2139 const_data: vec![],2140 variable_data: vec![1, 2, 3, 4],2141 });21422143 assert_noop!(2144 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),2145 Error::<Test>::TokenVariableDataLimitExceeded2146 );2147 });2148}214921502151#[test]2152fn set_const_on_chain_schema() {2153 new_test_ext().execute_with(|| {2154 default_limits();21552156 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21572158 let origin1 = Origin::signed(1);2159 assert_ok!(TemplateModule::set_const_on_chain_schema(2160 origin1,2161 collection_id,2162 b"test const on chain schema".to_vec()2163 ));21642165 assert_eq!(2166 TemplateModule::collection_id(collection_id)2167 .unwrap()2168 .const_on_chain_schema,2169 b"test const on chain schema".to_vec()2170 );2171 assert_eq!(2172 TemplateModule::collection_id(collection_id)2173 .unwrap()2174 .variable_on_chain_schema,2175 b"".to_vec()2176 );2177 });2178}21792180#[test]2181fn set_variable_on_chain_schema() {2182 new_test_ext().execute_with(|| {2183 default_limits();21842185 let collection_id = create_test_collection(&CollectionMode::NFT, 1);21862187 let origin1 = Origin::signed(1);2188 assert_ok!(TemplateModule::set_variable_on_chain_schema(2189 origin1,2190 collection_id,2191 b"test variable on chain schema".to_vec()2192 ));21932194 assert_eq!(2195 TemplateModule::collection_id(collection_id)2196 .unwrap()2197 .const_on_chain_schema,2198 b"".to_vec()2199 );2200 assert_eq!(2201 TemplateModule::collection_id(collection_id)2202 .unwrap()2203 .variable_on_chain_schema,2204 b"test variable on chain schema".to_vec()2205 );2206 });2207}22082209#[test]2210fn set_variable_meta_data_on_nft_token_stores_variable_meta_data() {2211 new_test_ext().execute_with(|| {2212 default_limits();22132214 let collection_id = create_test_collection(&CollectionMode::NFT, 1);22152216 let origin1 = Origin::signed(1);22172218 let data = default_nft_data();2219 create_test_item(1, &data.into());22202221 let variable_data = b"test set_variable_meta_data method.".to_vec();2222 assert_ok!(TemplateModule::set_variable_meta_data(2223 origin1,2224 collection_id,2225 1,2226 variable_data.clone()2227 ));22282229 assert_eq!(2230 TemplateModule::nft_item_id(collection_id, 1)2231 .unwrap()2232 .variable_data,2233 variable_data2234 );2235 });2236}22372238#[test]2239fn set_variable_meta_data_on_re_fungible_token_stores_variable_meta_data() {2240 new_test_ext().execute_with(|| {2241 default_limits();22422243 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);22442245 let origin1 = Origin::signed(1);22462247 let data = default_re_fungible_data();2248 create_test_item(1, &data.into());22492250 let variable_data = b"test set_variable_meta_data method.".to_vec();2251 assert_ok!(TemplateModule::set_variable_meta_data(2252 origin1,2253 collection_id,2254 1,2255 variable_data.clone()2256 ));22572258 assert_eq!(2259 TemplateModule::refungible_item_id(collection_id, 1)2260 .unwrap()2261 .variable_data,2262 variable_data2263 );2264 });2265}22662267#[test]2268fn set_variable_meta_data_on_fungible_token_fails() {2269 new_test_ext().execute_with(|| {2270 default_limits();22712272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);22732274 let origin1 = Origin::signed(1);22752276 let data = default_fungible_data();2277 create_test_item(1, &data.into());22782279 let variable_data = b"test set_variable_meta_data method.".to_vec();2280 assert_noop!(2281 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),2282 Error::<Test>::CantStoreMetadataInFungibleTokens2283 );2284 });2285}22862287#[test]2288fn set_variable_meta_data_on_nft_token_fails_for_big_data() {2289 new_test_ext().execute_with(|| {2290 assert_ok!(TemplateModule::set_chain_limits(2291 RawOrigin::Root.into(),2292 ChainLimits {2293 collection_numbers_limit: default_collection_numbers_limit(),2294 account_token_ownership_limit: 10,2295 collections_admins_limit: 5,2296 custom_data_limit: 10,2297 nft_sponsor_transfer_timeout: 15,2298 fungible_sponsor_transfer_timeout: 15,2299 refungible_sponsor_transfer_timeout: 15,2300 const_on_chain_schema_limit: 1024,2301 offchain_schema_limit: 1024,2302 variable_on_chain_schema_limit: 1024,2303 }2304 ));23052306 let collection_id = create_test_collection(&CollectionMode::NFT, 1);23072308 let origin1 = Origin::signed(1);23092310 let data = default_nft_data();2311 create_test_item(1, &data.into());23122313 let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();2314 assert_noop!(2315 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),2316 Error::<Test>::TokenVariableDataLimitExceeded2317 );2318 });2319}23202321#[test]2322fn set_variable_meta_data_on_re_fungible_token_fails_for_big_data() {2323 new_test_ext().execute_with(|| {2324 assert_ok!(TemplateModule::set_chain_limits(2325 RawOrigin::Root.into(),2326 ChainLimits {2327 collection_numbers_limit: default_collection_numbers_limit(),2328 account_token_ownership_limit: 10,2329 collections_admins_limit: 5,2330 custom_data_limit: 10,2331 nft_sponsor_transfer_timeout: 15,2332 fungible_sponsor_transfer_timeout: 15,2333 refungible_sponsor_transfer_timeout: 15,2334 const_on_chain_schema_limit: 1024,2335 offchain_schema_limit: 1024,2336 variable_on_chain_schema_limit: 1024,2337 }2338 ));23392340 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);23412342 let origin1 = Origin::signed(1);23432344 let data = default_re_fungible_data();2345 create_test_item(1, &data.into());23462347 let variable_data = b"test set_variable_meta_data method, bigger than limits.".to_vec();2348 assert_noop!(2349 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),2350 Error::<Test>::TokenVariableDataLimitExceeded2351 );2352 });2353}