12use crate::mock::*;3use crate::{AccessMode, ApprovePermissions, CollectionMode, Ownership, ChainLimits};4use frame_support::{assert_noop, assert_ok};5use frame_system::{ RawOrigin };6789#[test]10fn create_nft_item() {11 new_test_ext().execute_with(|| {12 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();13 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();14 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();15 let mode: CollectionMode = CollectionMode::NFT(2000);1617 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 18 collection_numbers_limit: 10,19 account_token_ownership_limit: 10,20 collections_admins_limit: 5,21 custom_data_limit: 2048,22 nft_sponsor_transfer_timeout: 15,23 fungible_sponsor_transfer_timeout: 15,24 refungible_sponsor_transfer_timeout: 15, 25 }));2627 let origin1 = Origin::signed(1);28 assert_ok!(TemplateModule::create_collection(29 origin1.clone(),30 col_name1.clone(),31 col_desc1.clone(),32 token_prefix1.clone(),33 mode34 ));35 assert_eq!(TemplateModule::collection(1).owner, 1);3637 assert_ok!(TemplateModule::create_item(38 origin1.clone(),39 1,40 [1, 2, 3].to_vec(),41 142 ));43 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());44 });45}4647#[test]48fn create_refungible_item() {49 new_test_ext().execute_with(|| {50 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();51 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();52 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();53 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);5455 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 56 collection_numbers_limit: 10,57 account_token_ownership_limit: 10,58 collections_admins_limit: 5,59 custom_data_limit: 2048,60 nft_sponsor_transfer_timeout: 15,61 fungible_sponsor_transfer_timeout: 15,62 refungible_sponsor_transfer_timeout: 15, 63 }));6465 let origin1 = Origin::signed(1);66 assert_ok!(TemplateModule::create_collection(67 origin1.clone(),68 col_name1.clone(),69 col_desc1.clone(),70 token_prefix1.clone(),71 mode72 ));73 assert_eq!(TemplateModule::collection(1).owner, 1);7475 assert_ok!(TemplateModule::create_item(76 origin1.clone(),77 1,78 [1, 2, 3].to_vec(),79 180 ));81 assert_eq!(82 TemplateModule::refungible_item_id(1, 1).data,83 [1, 2, 3].to_vec()84 );85 assert_eq!(86 TemplateModule::refungible_item_id(1, 1).owner[0],87 Ownership {88 owner: 1,89 fraction: 100090 }91 );92 });93}9495#[test]96fn create_fungible_item() {97 new_test_ext().execute_with(|| {98 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();99 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();100 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();101 let mode: CollectionMode = CollectionMode::Fungible(3);102103 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 104 collection_numbers_limit: 10,105 account_token_ownership_limit: 10,106 collections_admins_limit: 5,107 custom_data_limit: 2048,108 nft_sponsor_transfer_timeout: 15,109 fungible_sponsor_transfer_timeout: 15,110 refungible_sponsor_transfer_timeout: 15, 111 }));112113 let origin1 = Origin::signed(1);114 assert_ok!(TemplateModule::create_collection(115 origin1.clone(),116 col_name1.clone(),117 col_desc1.clone(),118 token_prefix1.clone(),119 mode120 ));121 assert_eq!(TemplateModule::collection(1).owner, 1);122123 assert_ok!(TemplateModule::create_item(124 origin1.clone(),125 1,126 [].to_vec(),127 1128 ));129 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);130 assert_eq!(TemplateModule::balance_count(1, 1), 1000);131 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);132 });133}134135#[test]136fn transfer_fungible_item() {137 new_test_ext().execute_with(|| {138 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();141 let mode: CollectionMode = CollectionMode::Fungible(3);142143 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 144 collection_numbers_limit: 10,145 account_token_ownership_limit: 10,146 collections_admins_limit: 5,147 custom_data_limit: 2048,148 nft_sponsor_transfer_timeout: 15,149 fungible_sponsor_transfer_timeout: 15,150 refungible_sponsor_transfer_timeout: 15, 151 }));152153 let origin1 = Origin::signed(1);154 let origin2 = Origin::signed(2);155 assert_ok!(TemplateModule::create_collection(156 origin1.clone(),157 col_name1.clone(),158 col_desc1.clone(),159 token_prefix1.clone(),160 mode161 ));162 assert_eq!(TemplateModule::collection(1).owner, 1);163164 assert_ok!(TemplateModule::create_item(165 origin1.clone(),166 1,167 [].to_vec(),168 1169 ));170 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);171 assert_eq!(TemplateModule::balance_count(1, 1), 1000);172 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);173174 175 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));176 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 2);177 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 1000);178 assert_eq!(TemplateModule::balance_count(1, 1), 0);179 assert_eq!(TemplateModule::balance_count(1, 2), 1000);180 181 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);182183 184 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));185 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 2);186 assert_eq!(TemplateModule::fungible_item_id(1, 2).owner, 3);187 assert_eq!(TemplateModule::balance_count(1, 2), 500);188 assert_eq!(TemplateModule::balance_count(1, 3), 500);189 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);190 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);191192 193 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));194 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 300);195 assert_eq!(TemplateModule::fungible_item_id(1, 2).value, 700);196 assert_eq!(TemplateModule::balance_count(1, 2), 300);197 assert_eq!(TemplateModule::balance_count(1, 3), 700);198 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);199 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);200 });201}202203#[test]204fn transfer_refungible_item() {205 new_test_ext().execute_with(|| {206 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();207 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();208 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();209 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);210211 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 212 collection_numbers_limit: 10,213 account_token_ownership_limit: 10,214 collections_admins_limit: 5,215 custom_data_limit: 2048,216 nft_sponsor_transfer_timeout: 15,217 fungible_sponsor_transfer_timeout: 15,218 refungible_sponsor_transfer_timeout: 15, 219 }));220221 let origin1 = Origin::signed(1);222 let origin2 = Origin::signed(2);223 assert_ok!(TemplateModule::create_collection(224 origin1.clone(),225 col_name1.clone(),226 col_desc1.clone(),227 token_prefix1.clone(),228 mode229 ));230 assert_eq!(TemplateModule::collection(1).owner, 1);231232 assert_ok!(TemplateModule::create_item(233 origin1.clone(),234 1,235 [1, 2, 3].to_vec(),236 1237 ));238 assert_eq!(239 TemplateModule::refungible_item_id(1, 1).data,240 [1, 2, 3].to_vec()241 );242 assert_eq!(243 TemplateModule::refungible_item_id(1, 1).owner[0],244 Ownership {245 owner: 1,246 fraction: 1000247 }248 );249 assert_eq!(TemplateModule::balance_count(1, 1), 1000);250 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);251252 253 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));254 assert_eq!(255 TemplateModule::refungible_item_id(1, 1).owner[0],256 Ownership {257 owner: 2,258 fraction: 1000259 }260 );261 assert_eq!(TemplateModule::balance_count(1, 1), 0);262 assert_eq!(TemplateModule::balance_count(1, 2), 1000);263 264 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);265266 267 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));268 assert_eq!(269 TemplateModule::refungible_item_id(1, 1).owner[0],270 Ownership {271 owner: 2,272 fraction: 500273 }274 );275 assert_eq!(276 TemplateModule::refungible_item_id(1, 1).owner[1],277 Ownership {278 owner: 3,279 fraction: 500280 }281 );282 assert_eq!(TemplateModule::balance_count(1, 2), 500);283 assert_eq!(TemplateModule::balance_count(1, 3), 500);284 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);285 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);286287 288 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));289 assert_eq!(290 TemplateModule::refungible_item_id(1, 1).owner[0],291 Ownership {292 owner: 2,293 fraction: 300294 }295 );296 assert_eq!(297 TemplateModule::refungible_item_id(1, 1).owner[1],298 Ownership {299 owner: 3,300 fraction: 700301 }302 );303 assert_eq!(TemplateModule::balance_count(1, 2), 300);304 assert_eq!(TemplateModule::balance_count(1, 3), 700);305 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);306 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);307 });308}309310#[test]311fn transfer_nft_item() {312 new_test_ext().execute_with(|| {313 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();314 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();315 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();316 let mode: CollectionMode = CollectionMode::NFT(2000);317318 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 319 collection_numbers_limit: 10,320 account_token_ownership_limit: 10,321 collections_admins_limit: 5,322 custom_data_limit: 2048,323 nft_sponsor_transfer_timeout: 15,324 fungible_sponsor_transfer_timeout: 15,325 refungible_sponsor_transfer_timeout: 15, 326 }));327328 let origin1 = Origin::signed(1);329 assert_ok!(TemplateModule::create_collection(330 origin1.clone(),331 col_name1.clone(),332 col_desc1.clone(),333 token_prefix1.clone(),334 mode335 ));336 assert_eq!(TemplateModule::collection(1).owner, 1);337338 assert_ok!(TemplateModule::create_item(339 origin1.clone(),340 1,341 [1, 2, 3].to_vec(),342 1343 ));344 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());345 assert_eq!(TemplateModule::balance_count(1, 1), 1);346 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);347348 349 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));350 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 2);351 assert_eq!(TemplateModule::balance_count(1, 1), 0);352 assert_eq!(TemplateModule::balance_count(1, 2), 1);353 354 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);355 });356}357358#[test]359fn nft_approve_and_transfer_from() {360 new_test_ext().execute_with(|| {361 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();362 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();363 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();364 let mode: CollectionMode = CollectionMode::NFT(2000);365366 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 367 collection_numbers_limit: 10,368 account_token_ownership_limit: 10,369 collections_admins_limit: 5,370 custom_data_limit: 2048,371 nft_sponsor_transfer_timeout: 15,372 fungible_sponsor_transfer_timeout: 15,373 refungible_sponsor_transfer_timeout: 15, 374 }));375376 let origin1 = Origin::signed(1);377 let origin2 = Origin::signed(2);378 assert_ok!(TemplateModule::create_collection(379 origin1.clone(),380 col_name1.clone(),381 col_desc1.clone(),382 token_prefix1.clone(),383 mode384 ));385 assert_eq!(TemplateModule::collection(1).owner, 1);386387 assert_ok!(TemplateModule::create_item(388 origin1.clone(),389 1,390 [1, 2, 3].to_vec(),391 1392 ));393 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());394 assert_eq!(TemplateModule::balance_count(1, 1), 1);395 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);396397 398 assert_noop!(TemplateModule::transfer_from(399 origin2.clone(),400 1,401 2,402 1,403 1,404 1), "Only item owner, collection owner and admins can modify items");405406 407 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));408 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);409 assert_eq!(410 TemplateModule::approved(1, (1, 1))[0],411 ApprovePermissions {412 approved: 2,413 amount: 100000000414 }415 );416417 assert_ok!(TemplateModule::transfer_from(418 origin2.clone(),419 1,420 2,421 1,422 1,423 1424 ));425 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);426 });427}428429#[test]430fn nft_approve_and_transfer_from_white_list() {431 new_test_ext().execute_with(|| {432 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();433 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();434 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();435 let mode: CollectionMode = CollectionMode::NFT(2000);436437 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 438 collection_numbers_limit: 10,439 account_token_ownership_limit: 10,440 collections_admins_limit: 5,441 custom_data_limit: 2048,442 nft_sponsor_transfer_timeout: 15,443 fungible_sponsor_transfer_timeout: 15,444 refungible_sponsor_transfer_timeout: 15, 445 }));446447 let origin1 = Origin::signed(1);448 let origin2 = Origin::signed(2);449 assert_ok!(TemplateModule::create_collection(450 origin1.clone(),451 col_name1.clone(),452 col_desc1.clone(),453 token_prefix1.clone(),454 mode455 ));456 assert_eq!(TemplateModule::collection(1).owner, 1);457458 assert_ok!(TemplateModule::create_item(459 origin1.clone(),460 1,461 [1, 2, 3].to_vec(),462 1463 ));464 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());465 assert_eq!(TemplateModule::balance_count(1, 1), 1);466 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);467468 assert_ok!(TemplateModule::set_mint_permission(469 origin1.clone(),470 1,471 true472 ));473 assert_ok!(TemplateModule::set_public_access_mode(474 origin1.clone(),475 1,476 AccessMode::WhiteList477 ));478 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));479 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));480 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));481482 483 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));484 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);485 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));486 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);487 assert_eq!(488 TemplateModule::approved(1, (1, 1))[0],489 ApprovePermissions {490 approved: 2,491 amount: 100000000492 }493 );494495 assert_ok!(TemplateModule::transfer_from(496 origin2.clone(),497 1,498 3,499 1,500 1,501 1502 ));503 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);504 });505}506507#[test]508fn refungible_approve_and_transfer_from() {509 new_test_ext().execute_with(|| {510 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();511 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();512 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();513 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);514515 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 516 collection_numbers_limit: 10,517 account_token_ownership_limit: 10,518 collections_admins_limit: 5,519 custom_data_limit: 2048,520 nft_sponsor_transfer_timeout: 15,521 fungible_sponsor_transfer_timeout: 15,522 refungible_sponsor_transfer_timeout: 15, 523 }));524525 let origin1 = Origin::signed(1);526 let origin2 = Origin::signed(2);527 assert_ok!(TemplateModule::create_collection(528 origin1.clone(),529 col_name1.clone(),530 col_desc1.clone(),531 token_prefix1.clone(),532 mode533 ));534 assert_eq!(TemplateModule::collection(1).owner, 1);535536 assert_ok!(TemplateModule::create_item(537 origin1.clone(),538 1,539 [1, 2, 3].to_vec(),540 1541 ));542 assert_eq!(543 TemplateModule::refungible_item_id(1, 1).data,544 [1, 2, 3].to_vec()545 );546 assert_eq!(547 TemplateModule::refungible_item_id(1, 1).owner[0],548 Ownership {549 owner: 1,550 fraction: 1000551 }552 );553 assert_eq!(TemplateModule::balance_count(1, 1), 1000);554 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);555556 assert_ok!(TemplateModule::set_mint_permission(557 origin1.clone(),558 1,559 true560 ));561 assert_ok!(TemplateModule::set_public_access_mode(562 origin1.clone(),563 1,564 AccessMode::WhiteList565 ));566 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));567 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));568 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));569570 571 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));572 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);573 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));574 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);575 assert_eq!(576 TemplateModule::approved(1, (1, 1))[0],577 ApprovePermissions {578 approved: 2,579 amount: 100000000580 }581 );582583 assert_ok!(TemplateModule::transfer_from(584 origin2.clone(),585 1,586 3,587 1,588 1,589 100590 ));591 assert_eq!(TemplateModule::balance_count(1, 1), 900);592 assert_eq!(TemplateModule::balance_count(1, 3), 100);593 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);594 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);595596 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);597 assert_eq!(598 TemplateModule::approved(1, (1, 1))[0],599 ApprovePermissions {600 approved: 3,601 amount: 100000000602 }603 );604 });605}606607#[test]608fn fungible_approve_and_transfer_from() {609 new_test_ext().execute_with(|| {610 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();611 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();612 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();613 let mode: CollectionMode = CollectionMode::Fungible(3);614615 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 616 collection_numbers_limit: 10,617 account_token_ownership_limit: 10,618 collections_admins_limit: 5,619 custom_data_limit: 2048,620 nft_sponsor_transfer_timeout: 15,621 fungible_sponsor_transfer_timeout: 15,622 refungible_sponsor_transfer_timeout: 15, 623 }));624625 let origin1 = Origin::signed(1);626 let origin2 = Origin::signed(2);627 assert_ok!(TemplateModule::create_collection(628 origin1.clone(),629 col_name1.clone(),630 col_desc1.clone(),631 token_prefix1.clone(),632 mode633 ));634 assert_eq!(TemplateModule::collection(1).owner, 1);635636 assert_ok!(TemplateModule::create_item(637 origin1.clone(),638 1,639 [].to_vec(),640 1641 ));642 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);643 assert_eq!(TemplateModule::balance_count(1, 1), 1000);644 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);645646 assert_ok!(TemplateModule::set_mint_permission(647 origin1.clone(),648 1,649 true650 ));651 assert_ok!(TemplateModule::set_public_access_mode(652 origin1.clone(),653 1,654 AccessMode::WhiteList655 ));656 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));657 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));658 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));659660 661 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));662 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);663 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));664 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);665 assert_eq!(666 TemplateModule::approved(1, (1, 1))[0],667 ApprovePermissions {668 approved: 2,669 amount: 100000000670 }671 );672673 assert_ok!(TemplateModule::transfer_from(674 origin2.clone(),675 1,676 3,677 1,678 1,679 100680 ));681 assert_eq!(TemplateModule::balance_count(1, 1), 900);682 assert_eq!(TemplateModule::balance_count(1, 3), 100);683 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);684 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);685686 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);687 assert_eq!(688 TemplateModule::approved(1, (1, 1))[0],689 ApprovePermissions {690 approved: 3,691 amount: 100000000692 }693 );694695 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));696 assert_ok!(TemplateModule::transfer_from(697 origin2.clone(),698 1,699 3,700 1,701 1,702 900703 ));704 assert_eq!(TemplateModule::balance_count(1, 1), 0);705 assert_eq!(TemplateModule::balance_count(1, 3), 1000);706 707 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);708709 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);710 });711}712713#[test]714fn change_collection_owner() {715 new_test_ext().execute_with(|| {716 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();717 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();718 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();719 let mode: CollectionMode = CollectionMode::NFT(2000);720721 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 722 collection_numbers_limit: 10,723 account_token_ownership_limit: 10,724 collections_admins_limit: 5,725 custom_data_limit: 2048,726 nft_sponsor_transfer_timeout: 15,727 fungible_sponsor_transfer_timeout: 15,728 refungible_sponsor_transfer_timeout: 15, 729 }));730731 let origin1 = Origin::signed(1);732 assert_ok!(TemplateModule::create_collection(733 origin1.clone(),734 col_name1.clone(),735 col_desc1.clone(),736 token_prefix1.clone(),737 mode738 ));739 assert_ok!(TemplateModule::change_collection_owner(740 origin1.clone(),741 1,742 2743 ));744 assert_eq!(TemplateModule::collection(1).owner, 2);745 });746}747748#[test]749fn destroy_collection() {750 new_test_ext().execute_with(|| {751 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();752 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();753 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();754 let mode: CollectionMode = CollectionMode::NFT(2000);755756 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 757 collection_numbers_limit: 10,758 account_token_ownership_limit: 10,759 collections_admins_limit: 5,760 custom_data_limit: 2048,761 nft_sponsor_transfer_timeout: 15,762 fungible_sponsor_transfer_timeout: 15,763 refungible_sponsor_transfer_timeout: 15, 764 }));765766 let origin1 = Origin::signed(1);767 assert_ok!(TemplateModule::create_collection(768 origin1.clone(),769 col_name1.clone(),770 col_desc1.clone(),771 token_prefix1.clone(),772 mode773 ));774 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));775 });776}777778#[test]779fn burn_nft_item() {780 new_test_ext().execute_with(|| {781 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();782 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();783 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();784 let mode: CollectionMode = CollectionMode::NFT(2000);785786 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 787 collection_numbers_limit: 10,788 account_token_ownership_limit: 10,789 collections_admins_limit: 5,790 custom_data_limit: 2048,791 nft_sponsor_transfer_timeout: 15,792 fungible_sponsor_transfer_timeout: 15,793 refungible_sponsor_transfer_timeout: 15, 794 }));795796 let origin1 = Origin::signed(1);797 assert_ok!(TemplateModule::create_collection(798 origin1.clone(),799 col_name1.clone(),800 col_desc1.clone(),801 token_prefix1.clone(),802 mode803 ));804 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));805 assert_ok!(TemplateModule::create_item(806 origin1.clone(),807 1,808 [1, 2, 3].to_vec(),809 1810 ));811812 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());813814 815 assert_eq!(TemplateModule::balance_count(1, 1), 1);816817 818 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));819 assert_noop!(820 TemplateModule::burn_item(origin1.clone(), 1, 1),821 "Item does not exists"822 );823824 assert_eq!(TemplateModule::balance_count(1, 1), 0);825 });826}827828#[test]829fn burn_fungible_item() {830 new_test_ext().execute_with(|| {831 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();832 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();833 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();834 let mode: CollectionMode = CollectionMode::Fungible(3);835836 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 837 collection_numbers_limit: 10,838 account_token_ownership_limit: 10,839 collections_admins_limit: 5,840 custom_data_limit: 2048,841 nft_sponsor_transfer_timeout: 15,842 fungible_sponsor_transfer_timeout: 15,843 refungible_sponsor_transfer_timeout: 15, 844 }));845846 let origin1 = Origin::signed(1);847 assert_ok!(TemplateModule::create_collection(848 origin1.clone(),849 col_name1.clone(),850 col_desc1.clone(),851 token_prefix1.clone(),852 mode853 ));854 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));855 assert_ok!(TemplateModule::create_item(856 origin1.clone(),857 1,858 [].to_vec(),859 1860 ));861862 863 assert_eq!(TemplateModule::balance_count(1, 1), 1000);864865 866 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));867 assert_noop!(868 TemplateModule::burn_item(origin1.clone(), 1, 1),869 "Item does not exists"870 );871872 assert_eq!(TemplateModule::balance_count(1, 1), 0);873 });874}875876#[test]877fn burn_refungible_item() {878 new_test_ext().execute_with(|| {879 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();880 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();881 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();882 let mode: CollectionMode = CollectionMode::ReFungible(200, 3);883884 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 885 collection_numbers_limit: 10,886 account_token_ownership_limit: 10,887 collections_admins_limit: 5,888 custom_data_limit: 2048,889 nft_sponsor_transfer_timeout: 15,890 fungible_sponsor_transfer_timeout: 15,891 refungible_sponsor_transfer_timeout: 15, 892 }));893894 let origin1 = Origin::signed(1);895 let origin2 = Origin::signed(2);896 assert_ok!(TemplateModule::create_collection(897 origin1.clone(),898 col_name1.clone(),899 col_desc1.clone(),900 token_prefix1.clone(),901 mode902 ));903904 assert_ok!(TemplateModule::set_mint_permission(905 origin1.clone(),906 1,907 true908 ));909 assert_ok!(TemplateModule::set_public_access_mode(910 origin1.clone(),911 1,912 AccessMode::WhiteList913 ));914 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));915916 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));917 assert_ok!(TemplateModule::create_item(918 origin2.clone(),919 1,920 [1, 2, 3].to_vec(),921 1922 ));923924 assert_eq!(925 TemplateModule::refungible_item_id(1, 1).data,926 [1, 2, 3].to_vec()927 );928929 930 assert_eq!(TemplateModule::balance_count(1, 1), 1000);931932 933 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));934 assert_noop!(935 TemplateModule::burn_item(origin1.clone(), 1, 1),936 "Item does not exists"937 );938939 assert_eq!(TemplateModule::balance_count(1, 1), 0);940 });941}942943#[test]944fn add_collection_admin() {945 new_test_ext().execute_with(|| {946 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();947 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();948 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();949 let mode: CollectionMode = CollectionMode::NFT(2000);950951 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 952 collection_numbers_limit: 10,953 account_token_ownership_limit: 10,954 collections_admins_limit: 5,955 custom_data_limit: 2048,956 nft_sponsor_transfer_timeout: 15,957 fungible_sponsor_transfer_timeout: 15,958 refungible_sponsor_transfer_timeout: 15, 959 }));960961 let origin1 = Origin::signed(1);962 let origin2 = Origin::signed(2);963 let origin3 = Origin::signed(3);964 assert_ok!(TemplateModule::create_collection(965 origin1.clone(),966 col_name1.clone(),967 col_desc1.clone(),968 token_prefix1.clone(),969 mode.clone()970 ));971 assert_ok!(TemplateModule::create_collection(972 origin2.clone(),973 col_name1.clone(),974 col_desc1.clone(),975 token_prefix1.clone(),976 mode.clone()977 ));978 assert_ok!(TemplateModule::create_collection(979 origin3.clone(),980 col_name1.clone(),981 col_desc1.clone(),982 token_prefix1.clone(),983 mode.clone()984 ));985986 assert_eq!(TemplateModule::collection(1).owner, 1);987 assert_eq!(TemplateModule::collection(2).owner, 2);988 assert_eq!(TemplateModule::collection(3).owner, 3);989990 991 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));992 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));993994 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);995 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);996 });997}998999#[test]1000fn remove_collection_admin() {1001 new_test_ext().execute_with(|| {1002 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1003 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1004 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1005 let mode: CollectionMode = CollectionMode::NFT(2000);10061007 let origin1 = Origin::signed(1);1008 let origin2 = Origin::signed(2);1009 let origin3 = Origin::signed(3);10101011 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1012 collection_numbers_limit: 10,1013 account_token_ownership_limit: 10,1014 collections_admins_limit: 5,1015 custom_data_limit: 2048,1016 nft_sponsor_transfer_timeout: 15,1017 fungible_sponsor_transfer_timeout: 15,1018 refungible_sponsor_transfer_timeout: 15, 1019 }));10201021 assert_ok!(TemplateModule::create_collection(1022 origin1.clone(),1023 col_name1.clone(),1024 col_desc1.clone(),1025 token_prefix1.clone(),1026 mode.clone()1027 ));1028 assert_ok!(TemplateModule::create_collection(1029 origin2.clone(),1030 col_name1.clone(),1031 col_desc1.clone(),1032 token_prefix1.clone(),1033 mode.clone()1034 ));1035 assert_ok!(TemplateModule::create_collection(1036 origin3.clone(),1037 col_name1.clone(),1038 col_desc1.clone(),1039 token_prefix1.clone(),1040 mode.clone()1041 ));10421043 assert_eq!(TemplateModule::collection(1).owner, 1);1044 assert_eq!(TemplateModule::collection(2).owner, 2);1045 assert_eq!(TemplateModule::collection(3).owner, 3);10461047 1048 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));1049 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));10501051 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);1052 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);10531054 1055 assert_ok!(TemplateModule::remove_collection_admin(1056 origin2.clone(),1057 1,1058 31059 ));1060 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);1061 });1062}10631064#[test]1065fn balance_of() {1066 new_test_ext().execute_with(|| {1067 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1068 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1069 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1070 let nft_mode: CollectionMode = CollectionMode::NFT(2000);1071 let furg_mode: CollectionMode = CollectionMode::Fungible(3);1072 let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);10731074 let origin1 = Origin::signed(1);10751076 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1077 collection_numbers_limit: 10,1078 account_token_ownership_limit: 10,1079 collections_admins_limit: 5,1080 custom_data_limit: 2048,1081 nft_sponsor_transfer_timeout: 15,1082 fungible_sponsor_transfer_timeout: 15,1083 refungible_sponsor_transfer_timeout: 15, 1084 }));10851086 assert_ok!(TemplateModule::create_collection(1087 origin1.clone(),1088 col_name1.clone(),1089 col_desc1.clone(),1090 token_prefix1.clone(),1091 nft_mode.clone()1092 ));1093 assert_ok!(TemplateModule::create_collection(1094 origin1.clone(),1095 col_name1.clone(),1096 col_desc1.clone(),1097 token_prefix1.clone(),1098 furg_mode.clone()1099 ));1100 assert_ok!(TemplateModule::create_collection(1101 origin1.clone(),1102 col_name1.clone(),1103 col_desc1.clone(),1104 token_prefix1.clone(),1105 refung_mode.clone()1106 ));11071108 assert_eq!(TemplateModule::collection(1).owner, 1);1109 assert_eq!(TemplateModule::collection(2).owner, 1);1110 assert_eq!(TemplateModule::collection(3).owner, 1);11111112 1113 assert_eq!(TemplateModule::balance_count(1, 1), 0);1114 assert_eq!(TemplateModule::balance_count(2, 1), 0);1115 assert_eq!(TemplateModule::balance_count(3, 1), 0);11161117 1118 assert_ok!(TemplateModule::create_item(1119 origin1.clone(),1120 1,1121 [1, 1, 1].to_vec(),1122 11123 ));11241125 assert_ok!(TemplateModule::create_item(1126 origin1.clone(),1127 2,1128 [].to_vec(),1129 11130 ));11311132 assert_ok!(TemplateModule::create_item(1133 origin1.clone(),1134 3,1135 [1, 1, 1].to_vec(),1136 11137 ));11381139 1140 assert_eq!(TemplateModule::balance_count(1, 1), 1);1141 assert_eq!(TemplateModule::balance_count(2, 1), 1000);1142 assert_eq!(TemplateModule::balance_count(3, 1), 1000);1143 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);1144 assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);1145 assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);1146 });1147}11481149#[test]1150fn approve() {1151 new_test_ext().execute_with(|| {1152 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1153 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1154 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1155 let nft_mode: CollectionMode = CollectionMode::NFT(2000);1156 let origin1 = Origin::signed(1);11571158 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1159 collection_numbers_limit: 10,1160 account_token_ownership_limit: 10,1161 collections_admins_limit: 5,1162 custom_data_limit: 2048,1163 nft_sponsor_transfer_timeout: 15,1164 fungible_sponsor_transfer_timeout: 15,1165 refungible_sponsor_transfer_timeout: 15, 1166 }));11671168 assert_ok!(TemplateModule::create_collection(1169 origin1.clone(),1170 col_name1.clone(),1171 col_desc1.clone(),1172 token_prefix1.clone(),1173 nft_mode.clone()1174 ));11751176 assert_eq!(TemplateModule::collection(1).owner, 1);11771178 1179 assert_ok!(TemplateModule::create_item(1180 origin1.clone(),1181 1,1182 [1, 1, 1].to_vec(),1183 11184 ));11851186 1187 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));1188 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);1189 });1190}11911192#[test]1193fn transfer_from() {1194 new_test_ext().execute_with(|| {1195 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1196 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1197 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1198 let mode: CollectionMode = CollectionMode::NFT(2000);1199 let origin1 = Origin::signed(1);1200 let origin2 = Origin::signed(2);12011202 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1203 collection_numbers_limit: 10,1204 account_token_ownership_limit: 10,1205 collections_admins_limit: 5,1206 custom_data_limit: 2048,1207 nft_sponsor_transfer_timeout: 15,1208 fungible_sponsor_transfer_timeout: 15,1209 refungible_sponsor_transfer_timeout: 15, 1210 }));12111212 assert_ok!(TemplateModule::create_collection(1213 origin1.clone(),1214 col_name1.clone(),1215 col_desc1.clone(),1216 token_prefix1.clone(),1217 mode1218 ));12191220 assert_eq!(TemplateModule::collection(1).owner, 1);12211222 1223 assert_ok!(TemplateModule::create_item(1224 origin1.clone(),1225 1,1226 [1, 1, 1].to_vec(),1227 11228 ));12291230 1231 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));1232 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);12331234 assert_ok!(TemplateModule::set_mint_permission(1235 origin1.clone(),1236 1,1237 true1238 ));1239 assert_ok!(TemplateModule::set_public_access_mode(1240 origin1.clone(),1241 1,1242 AccessMode::WhiteList1243 ));1244 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1245 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1246 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));12471248 assert_ok!(TemplateModule::transfer_from(1249 origin2.clone(),1250 1,1251 2,1252 1,1253 1,1254 11255 ));12561257 1258 assert_eq!(TemplateModule::balance_count(1, 1), 0);1259 assert_eq!(TemplateModule::balance_count(1, 2), 1);1260 });1261}1262126312641265126612671268#[test]1269fn owner_can_add_address_to_white_list() {1270 new_test_ext().execute_with(|| {1271 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1272 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1273 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1274 let mode: CollectionMode = CollectionMode::NFT(2000);1275 let origin1 = Origin::signed(1);12761277 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1278 collection_numbers_limit: 10,1279 account_token_ownership_limit: 10,1280 collections_admins_limit: 5,1281 custom_data_limit: 2048,1282 nft_sponsor_transfer_timeout: 15,1283 fungible_sponsor_transfer_timeout: 15,1284 refungible_sponsor_transfer_timeout: 15, 1285 }));12861287 assert_ok!(TemplateModule::create_collection(1288 origin1.clone(),1289 col_name1.clone(),1290 col_desc1.clone(),1291 token_prefix1.clone(),1292 mode1293 ));12941295 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1296 assert_eq!(TemplateModule::white_list(1)[0], 2);1297 });1298}12991300#[test]1301fn admin_can_add_address_to_white_list() {1302 new_test_ext().execute_with(|| {1303 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1304 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1305 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1306 let mode: CollectionMode = CollectionMode::NFT(2000);1307 let origin1 = Origin::signed(1);1308 let origin2 = Origin::signed(2);13091310 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1311 collection_numbers_limit: 10,1312 account_token_ownership_limit: 10,1313 collections_admins_limit: 5,1314 custom_data_limit: 2048,1315 nft_sponsor_transfer_timeout: 15,1316 fungible_sponsor_transfer_timeout: 15,1317 refungible_sponsor_transfer_timeout: 15, 1318 }));13191320 assert_ok!(TemplateModule::create_collection(1321 origin1.clone(),1322 col_name1.clone(),1323 col_desc1.clone(),1324 token_prefix1.clone(),1325 mode1326 ));13271328 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));1329 assert_ok!(TemplateModule::add_to_white_list(origin2.clone(), 1, 3));1330 assert_eq!(TemplateModule::white_list(1)[0], 3);1331 });1332}13331334#[test]1335fn nonprivileged_user_cannot_add_address_to_white_list() {1336 new_test_ext().execute_with(|| {1337 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1338 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1339 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1340 let mode: CollectionMode = CollectionMode::NFT(2000);1341 let origin1 = Origin::signed(1);1342 let origin2 = Origin::signed(2);13431344 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1345 collection_numbers_limit: 10,1346 account_token_ownership_limit: 10,1347 collections_admins_limit: 5,1348 custom_data_limit: 2048,1349 nft_sponsor_transfer_timeout: 15,1350 fungible_sponsor_transfer_timeout: 15,1351 refungible_sponsor_transfer_timeout: 15, 1352 }));13531354 assert_ok!(TemplateModule::create_collection(1355 origin1.clone(),1356 col_name1.clone(),1357 col_desc1.clone(),1358 token_prefix1.clone(),1359 mode1360 ));13611362 assert_noop!(1363 TemplateModule::add_to_white_list(origin2.clone(), 1, 3),1364 "You do not have permissions to modify this collection"1365 );1366 });1367}13681369#[test]1370fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {1371 new_test_ext().execute_with(|| {1372 let origin1 = Origin::signed(1);13731374 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1375 collection_numbers_limit: 10,1376 account_token_ownership_limit: 10,1377 collections_admins_limit: 5,1378 custom_data_limit: 2048,1379 nft_sponsor_transfer_timeout: 15,1380 fungible_sponsor_transfer_timeout: 15,1381 refungible_sponsor_transfer_timeout: 15, 1382 }));13831384 assert_noop!(1385 TemplateModule::add_to_white_list(origin1.clone(), 1, 2),1386 "This collection does not exist"1387 );1388 });1389}13901391#[test]1392fn nobody_can_add_address_to_white_list_of_deleted_collection() {1393 new_test_ext().execute_with(|| {1394 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1395 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1396 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1397 let mode: CollectionMode = CollectionMode::NFT(2000);1398 let origin1 = Origin::signed(1);13991400 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1401 collection_numbers_limit: 10,1402 account_token_ownership_limit: 10,1403 collections_admins_limit: 5,1404 custom_data_limit: 2048,1405 nft_sponsor_transfer_timeout: 15,1406 fungible_sponsor_transfer_timeout: 15,1407 refungible_sponsor_transfer_timeout: 15, 1408 }));14091410 assert_ok!(TemplateModule::create_collection(1411 origin1.clone(),1412 col_name1.clone(),1413 col_desc1.clone(),1414 token_prefix1.clone(),1415 mode1416 ));14171418 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));1419 assert_noop!(1420 TemplateModule::add_to_white_list(origin1.clone(), 1, 2),1421 "This collection does not exist"1422 );1423 });1424}142514261427#[test]1428fn address_is_already_added_to_white_list() {1429 new_test_ext().execute_with(|| {1430 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1431 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1432 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1433 let mode: CollectionMode = CollectionMode::NFT(2000);1434 let origin1 = Origin::signed(1);14351436 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1437 collection_numbers_limit: 10,1438 account_token_ownership_limit: 10,1439 collections_admins_limit: 5,1440 custom_data_limit: 2048,1441 nft_sponsor_transfer_timeout: 15,1442 fungible_sponsor_transfer_timeout: 15,1443 refungible_sponsor_transfer_timeout: 15, 1444 }));14451446 assert_ok!(TemplateModule::create_collection(1447 origin1.clone(),1448 col_name1.clone(),1449 col_desc1.clone(),1450 token_prefix1.clone(),1451 mode1452 ));14531454 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1455 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1456 assert_eq!(TemplateModule::white_list(1)[0], 2);1457 assert_eq!(TemplateModule::white_list(1).len(), 1);1458 });1459}14601461#[test]1462fn owner_can_remove_address_from_white_list() {1463 new_test_ext().execute_with(|| {1464 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1465 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1466 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1467 let mode: CollectionMode = CollectionMode::NFT(2000);1468 let origin1 = Origin::signed(1);14691470 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1471 collection_numbers_limit: 10,1472 account_token_ownership_limit: 10,1473 collections_admins_limit: 5,1474 custom_data_limit: 2048,1475 nft_sponsor_transfer_timeout: 15,1476 fungible_sponsor_transfer_timeout: 15,1477 refungible_sponsor_transfer_timeout: 15, 1478 }));14791480 assert_ok!(TemplateModule::create_collection(1481 origin1.clone(),1482 col_name1.clone(),1483 col_desc1.clone(),1484 token_prefix1.clone(),1485 mode1486 ));14871488 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1489 assert_ok!(TemplateModule::remove_from_white_list(1490 origin1.clone(),1491 1,1492 21493 ));1494 assert_eq!(TemplateModule::white_list(1).len(), 0);1495 });1496}14971498#[test]1499fn admin_can_remove_address_from_white_list() {1500 new_test_ext().execute_with(|| {1501 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1502 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1503 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1504 let mode: CollectionMode = CollectionMode::NFT(2000);1505 let origin1 = Origin::signed(1);1506 let origin2 = Origin::signed(2);15071508 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1509 collection_numbers_limit: 10,1510 account_token_ownership_limit: 10,1511 collections_admins_limit: 5,1512 custom_data_limit: 2048,1513 nft_sponsor_transfer_timeout: 15,1514 fungible_sponsor_transfer_timeout: 15,1515 refungible_sponsor_transfer_timeout: 15, 1516 }));15171518 assert_ok!(TemplateModule::create_collection(1519 origin1.clone(),1520 col_name1.clone(),1521 col_desc1.clone(),1522 token_prefix1.clone(),1523 mode1524 ));15251526 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));15271528 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));1529 assert_ok!(TemplateModule::remove_from_white_list(1530 origin2.clone(),1531 1,1532 31533 ));1534 assert_eq!(TemplateModule::white_list(1).len(), 0);1535 });1536}15371538#[test]1539fn nonprivileged_user_cannot_remove_address_from_white_list() {1540 new_test_ext().execute_with(|| {1541 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1542 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1543 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1544 let mode: CollectionMode = CollectionMode::NFT(2000);1545 let origin1 = Origin::signed(1);1546 let origin2 = Origin::signed(2);15471548 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1549 collection_numbers_limit: 10,1550 account_token_ownership_limit: 10,1551 collections_admins_limit: 5,1552 custom_data_limit: 2048,1553 nft_sponsor_transfer_timeout: 15,1554 fungible_sponsor_transfer_timeout: 15,1555 refungible_sponsor_transfer_timeout: 15, 1556 }));15571558 assert_ok!(TemplateModule::create_collection(1559 origin1.clone(),1560 col_name1.clone(),1561 col_desc1.clone(),1562 token_prefix1.clone(),1563 mode1564 ));15651566 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1567 assert_noop!(1568 TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),1569 "You do not have permissions to modify this collection"1570 );1571 assert_eq!(TemplateModule::white_list(1)[0], 2);1572 });1573}15741575#[test]1576fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {1577 new_test_ext().execute_with(|| {1578 let origin1 = Origin::signed(1);15791580 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1581 collection_numbers_limit: 10,1582 account_token_ownership_limit: 10,1583 collections_admins_limit: 5,1584 custom_data_limit: 2048,1585 nft_sponsor_transfer_timeout: 15,1586 fungible_sponsor_transfer_timeout: 15,1587 refungible_sponsor_transfer_timeout: 15, 1588 }));15891590 assert_noop!(1591 TemplateModule::remove_from_white_list(origin1.clone(), 1, 2),1592 "This collection does not exist"1593 );1594 });1595}15961597#[test]1598fn nobody_can_remove_address_from_white_list_of_deleted_collection() {1599 new_test_ext().execute_with(|| {1600 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1601 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1602 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1603 let mode: CollectionMode = CollectionMode::NFT(2000);1604 let origin1 = Origin::signed(1);1605 let origin2 = Origin::signed(2);16061607 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1608 collection_numbers_limit: 10,1609 account_token_ownership_limit: 10,1610 collections_admins_limit: 5,1611 custom_data_limit: 2048,1612 nft_sponsor_transfer_timeout: 15,1613 fungible_sponsor_transfer_timeout: 15,1614 refungible_sponsor_transfer_timeout: 15, 1615 }));16161617 assert_ok!(TemplateModule::create_collection(1618 origin1.clone(),1619 col_name1.clone(),1620 col_desc1.clone(),1621 token_prefix1.clone(),1622 mode1623 ));16241625 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1626 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));1627 assert_noop!(1628 TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),1629 "This collection does not exist"1630 );1631 assert_eq!(TemplateModule::white_list(1).len(), 0);1632 });1633}163416351636#[test]1637fn address_is_already_removed_from_white_list() {1638 new_test_ext().execute_with(|| {1639 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1640 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1641 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1642 let mode: CollectionMode = CollectionMode::NFT(2000);1643 let origin1 = Origin::signed(1);16441645 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1646 collection_numbers_limit: 10,1647 account_token_ownership_limit: 10,1648 collections_admins_limit: 5,1649 custom_data_limit: 2048,1650 nft_sponsor_transfer_timeout: 15,1651 fungible_sponsor_transfer_timeout: 15,1652 refungible_sponsor_transfer_timeout: 15, 1653 }));16541655 assert_ok!(TemplateModule::create_collection(1656 origin1.clone(),1657 col_name1.clone(),1658 col_desc1.clone(),1659 token_prefix1.clone(),1660 mode1661 ));16621663 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1664 assert_ok!(TemplateModule::remove_from_white_list(1665 origin1.clone(),1666 1,1667 21668 ));1669 assert_ok!(TemplateModule::remove_from_white_list(1670 origin1.clone(),1671 1,1672 21673 ));1674 assert_eq!(TemplateModule::white_list(1).len(), 0);1675 });1676}167716781679#[test]1680fn white_list_test_1() {1681 new_test_ext().execute_with(|| {1682 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1683 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1684 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1685 let mode: CollectionMode = CollectionMode::NFT(2000);16861687 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1688 collection_numbers_limit: 10,1689 account_token_ownership_limit: 10,1690 collections_admins_limit: 5,1691 custom_data_limit: 2048,1692 nft_sponsor_transfer_timeout: 15,1693 fungible_sponsor_transfer_timeout: 15,1694 refungible_sponsor_transfer_timeout: 15, 1695 }));16961697 let origin1 = Origin::signed(1);1698 assert_ok!(TemplateModule::create_collection(1699 origin1.clone(),1700 col_name1.clone(),1701 col_desc1.clone(),1702 token_prefix1.clone(),1703 mode1704 ));1705 assert_eq!(TemplateModule::collection(1).owner, 1);17061707 assert_ok!(TemplateModule::create_item(1708 origin1.clone(),1709 1,1710 [1, 2, 3].to_vec(),1711 11712 ));17131714 assert_ok!(TemplateModule::set_public_access_mode(1715 origin1.clone(),1716 1,1717 AccessMode::WhiteList1718 ));1719 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));17201721 assert_noop!(1722 TemplateModule::transfer(origin1.clone(), 3, 1, 1, 1),1723 "Address is not in white list"1724 );1725 });1726}17271728#[test]1729fn white_list_test_2() {1730 new_test_ext().execute_with(|| {1731 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1732 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1733 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1734 let mode: CollectionMode = CollectionMode::NFT(2000);17351736 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1737 collection_numbers_limit: 10,1738 account_token_ownership_limit: 10,1739 collections_admins_limit: 5,1740 custom_data_limit: 2048,1741 nft_sponsor_transfer_timeout: 15,1742 fungible_sponsor_transfer_timeout: 15,1743 refungible_sponsor_transfer_timeout: 15, 1744 }));17451746 let origin1 = Origin::signed(1);1747 assert_ok!(TemplateModule::create_collection(1748 origin1.clone(),1749 col_name1.clone(),1750 col_desc1.clone(),1751 token_prefix1.clone(),1752 mode1753 ));1754 assert_eq!(TemplateModule::collection(1).owner, 1);17551756 assert_ok!(TemplateModule::create_item(1757 origin1.clone(),1758 1,1759 [1, 2, 3].to_vec(),1760 11761 ));17621763 assert_ok!(TemplateModule::set_public_access_mode(1764 origin1.clone(),1765 1,1766 AccessMode::WhiteList1767 ));1768 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1769 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));17701771 1772 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));1773 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);17741775 assert_ok!(TemplateModule::remove_from_white_list(1776 origin1.clone(),1777 1,1778 11779 ));17801781 assert_noop!(1782 TemplateModule::transfer_from(origin1.clone(), 1, 3, 1, 1, 1),1783 "Address is not in white list"1784 );1785 });1786}178717881789#[test]1790fn white_list_test_3() {1791 new_test_ext().execute_with(|| {1792 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1793 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1794 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1795 let mode: CollectionMode = CollectionMode::NFT(2000);17961797 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1798 collection_numbers_limit: 10,1799 account_token_ownership_limit: 10,1800 collections_admins_limit: 5,1801 custom_data_limit: 2048,1802 nft_sponsor_transfer_timeout: 15,1803 fungible_sponsor_transfer_timeout: 15,1804 refungible_sponsor_transfer_timeout: 15, 1805 }));18061807 let origin1 = Origin::signed(1);1808 assert_ok!(TemplateModule::create_collection(1809 origin1.clone(),1810 col_name1.clone(),1811 col_desc1.clone(),1812 token_prefix1.clone(),1813 mode1814 ));1815 assert_eq!(TemplateModule::collection(1).owner, 1);18161817 assert_ok!(TemplateModule::create_item(1818 origin1.clone(),1819 1,1820 [1, 2, 3].to_vec(),1821 11822 ));18231824 assert_ok!(TemplateModule::set_public_access_mode(1825 origin1.clone(),1826 1,1827 AccessMode::WhiteList1828 ));1829 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));18301831 assert_noop!(1832 TemplateModule::transfer(origin1.clone(), 3, 1, 1, 1),1833 "Address is not in white list"1834 );1835 });1836}18371838#[test]1839fn white_list_test_4() {1840 new_test_ext().execute_with(|| {1841 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1842 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1843 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1844 let mode: CollectionMode = CollectionMode::NFT(2000);18451846 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1847 collection_numbers_limit: 10,1848 account_token_ownership_limit: 10,1849 collections_admins_limit: 5,1850 custom_data_limit: 2048,1851 nft_sponsor_transfer_timeout: 15,1852 fungible_sponsor_transfer_timeout: 15,1853 refungible_sponsor_transfer_timeout: 15, 1854 }));18551856 let origin1 = Origin::signed(1);1857 assert_ok!(TemplateModule::create_collection(1858 origin1.clone(),1859 col_name1.clone(),1860 col_desc1.clone(),1861 token_prefix1.clone(),1862 mode1863 ));1864 assert_eq!(TemplateModule::collection(1).owner, 1);18651866 assert_ok!(TemplateModule::create_item(1867 origin1.clone(),1868 1,1869 [1, 2, 3].to_vec(),1870 11871 ));18721873 assert_ok!(TemplateModule::set_public_access_mode(1874 origin1.clone(),1875 1,1876 AccessMode::WhiteList1877 ));1878 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1879 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));18801881 1882 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));1883 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);18841885 assert_ok!(TemplateModule::remove_from_white_list(1886 origin1.clone(),1887 1,1888 21889 ));18901891 assert_noop!(1892 TemplateModule::transfer_from(origin1.clone(), 1, 3, 1, 1, 1),1893 "Address is not in white list"1894 );1895 });1896}189718981899#[test]1900fn white_list_test_5() {1901 new_test_ext().execute_with(|| {1902 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1903 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1904 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1905 let mode: CollectionMode = CollectionMode::NFT(2000);19061907 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1908 collection_numbers_limit: 10,1909 account_token_ownership_limit: 10,1910 collections_admins_limit: 5,1911 custom_data_limit: 2048,1912 nft_sponsor_transfer_timeout: 15,1913 fungible_sponsor_transfer_timeout: 15,1914 refungible_sponsor_transfer_timeout: 15, 1915 }));19161917 let origin1 = Origin::signed(1);1918 assert_ok!(TemplateModule::create_collection(1919 origin1.clone(),1920 col_name1.clone(),1921 col_desc1.clone(),1922 token_prefix1.clone(),1923 mode1924 ));1925 assert_eq!(TemplateModule::collection(1).owner, 1);19261927 assert_ok!(TemplateModule::create_item(1928 origin1.clone(),1929 1,1930 [1, 2, 3].to_vec(),1931 11932 ));19331934 assert_ok!(TemplateModule::set_public_access_mode(1935 origin1.clone(),1936 1,1937 AccessMode::WhiteList1938 ));1939 assert_noop!(1940 TemplateModule::burn_item(origin1.clone(), 1, 1),1941 "Address is not in white list"1942 );1943 });1944}194519461947#[test]1948fn white_list_test_6() {1949 new_test_ext().execute_with(|| {1950 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1951 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1952 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1953 let mode: CollectionMode = CollectionMode::NFT(2000);19541955 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1956 collection_numbers_limit: 10,1957 account_token_ownership_limit: 10,1958 collections_admins_limit: 5,1959 custom_data_limit: 2048,1960 nft_sponsor_transfer_timeout: 15,1961 fungible_sponsor_transfer_timeout: 15,1962 refungible_sponsor_transfer_timeout: 15, 1963 }));19641965 let origin1 = Origin::signed(1);1966 assert_ok!(TemplateModule::create_collection(1967 origin1.clone(),1968 col_name1.clone(),1969 col_desc1.clone(),1970 token_prefix1.clone(),1971 mode1972 ));1973 assert_ok!(TemplateModule::set_public_access_mode(1974 origin1.clone(),1975 1,1976 AccessMode::WhiteList1977 ));19781979 1980 assert_noop!(1981 TemplateModule::approve(origin1.clone(), 1, 1, 1),1982 "Address is not in white list"1983 );1984 });1985}1986198719881989#[test]1990fn white_list_test_7() {1991 new_test_ext().execute_with(|| {1992 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1993 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1994 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1995 let mode: CollectionMode = CollectionMode::NFT(2000);19961997 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1998 collection_numbers_limit: 10,1999 account_token_ownership_limit: 10,2000 collections_admins_limit: 5,2001 custom_data_limit: 2048,2002 nft_sponsor_transfer_timeout: 15,2003 fungible_sponsor_transfer_timeout: 15,2004 refungible_sponsor_transfer_timeout: 15, 2005 }));20062007 let origin1 = Origin::signed(1);2008 assert_ok!(TemplateModule::create_collection(2009 origin1.clone(),2010 col_name1.clone(),2011 col_desc1.clone(),2012 token_prefix1.clone(),2013 mode2014 ));2015 assert_eq!(TemplateModule::collection(1).owner, 1);20162017 assert_ok!(TemplateModule::create_item(2018 origin1.clone(),2019 1,2020 [1, 2, 3].to_vec(),2021 12022 ));20232024 assert_ok!(TemplateModule::set_public_access_mode(2025 origin1.clone(),2026 1,2027 AccessMode::WhiteList2028 ));2029 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));2030 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));20312032 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1));2033 });2034}20352036#[test]2037fn white_list_test_8() {2038 new_test_ext().execute_with(|| {2039 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2040 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2041 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2042 let mode: CollectionMode = CollectionMode::NFT(2000);20432044 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2045 collection_numbers_limit: 10,2046 account_token_ownership_limit: 10,2047 collections_admins_limit: 5,2048 custom_data_limit: 2048,2049 nft_sponsor_transfer_timeout: 15,2050 fungible_sponsor_transfer_timeout: 15,2051 refungible_sponsor_transfer_timeout: 15, 2052 }));20532054 let origin1 = Origin::signed(1);2055 assert_ok!(TemplateModule::create_collection(2056 origin1.clone(),2057 col_name1.clone(),2058 col_desc1.clone(),2059 token_prefix1.clone(),2060 mode2061 ));2062 assert_eq!(TemplateModule::collection(1).owner, 1);20632064 assert_ok!(TemplateModule::create_item(2065 origin1.clone(),2066 1,2067 [1, 2, 3].to_vec(),2068 12069 ));20702071 assert_ok!(TemplateModule::set_public_access_mode(2072 origin1.clone(),2073 1,2074 AccessMode::WhiteList2075 ));2076 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));2077 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));20782079 2080 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));2081 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);20822083 assert_ok!(TemplateModule::transfer_from(2084 origin1.clone(),2085 1,2086 2,2087 1,2088 1,2089 12090 ));2091 });2092}209320942095#[test]2096fn white_list_test_9() {2097 new_test_ext().execute_with(|| {2098 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2099 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2100 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2101 let mode: CollectionMode = CollectionMode::NFT(2000);21022103 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2104 collection_numbers_limit: 10,2105 account_token_ownership_limit: 10,2106 collections_admins_limit: 5,2107 custom_data_limit: 2048,2108 nft_sponsor_transfer_timeout: 15,2109 fungible_sponsor_transfer_timeout: 15,2110 refungible_sponsor_transfer_timeout: 15, 2111 }));21122113 let origin1 = Origin::signed(1);2114 assert_ok!(TemplateModule::create_collection(2115 origin1.clone(),2116 col_name1.clone(),2117 col_desc1.clone(),2118 token_prefix1.clone(),2119 mode2120 ));21212122 assert_ok!(TemplateModule::set_public_access_mode(2123 origin1.clone(),2124 1,2125 AccessMode::WhiteList2126 ));2127 assert_ok!(TemplateModule::set_mint_permission(2128 origin1.clone(),2129 1,2130 false2131 ));21322133 assert_ok!(TemplateModule::create_item(2134 origin1.clone(),2135 1,2136 [1, 2, 3].to_vec(),2137 12138 ));2139 });2140}214121422143#[test]2144fn white_list_test_10() {2145 new_test_ext().execute_with(|| {2146 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2147 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2148 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2149 let mode: CollectionMode = CollectionMode::NFT(2000);21502151 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2152 collection_numbers_limit: 10,2153 account_token_ownership_limit: 10,2154 collections_admins_limit: 5,2155 custom_data_limit: 2048,2156 nft_sponsor_transfer_timeout: 15,2157 fungible_sponsor_transfer_timeout: 15,2158 refungible_sponsor_transfer_timeout: 15, 2159 }));21602161 let origin1 = Origin::signed(1);2162 let origin2 = Origin::signed(2);2163 assert_ok!(TemplateModule::create_collection(2164 origin1.clone(),2165 col_name1.clone(),2166 col_desc1.clone(),2167 token_prefix1.clone(),2168 mode2169 ));21702171 assert_ok!(TemplateModule::set_public_access_mode(2172 origin1.clone(),2173 1,2174 AccessMode::WhiteList2175 ));2176 assert_ok!(TemplateModule::set_mint_permission(2177 origin1.clone(),2178 1,2179 false2180 ));21812182 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));21832184 assert_ok!(TemplateModule::create_item(2185 origin2.clone(),2186 1,2187 [1, 2, 3].to_vec(),2188 22189 ));2190 });2191}219221932194#[test]2195fn white_list_test_11() {2196 new_test_ext().execute_with(|| {2197 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2198 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2199 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2200 let mode: CollectionMode = CollectionMode::NFT(2000);22012202 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2203 collection_numbers_limit: 10,2204 account_token_ownership_limit: 10,2205 collections_admins_limit: 5,2206 custom_data_limit: 2048,2207 nft_sponsor_transfer_timeout: 15,2208 fungible_sponsor_transfer_timeout: 15,2209 refungible_sponsor_transfer_timeout: 15, 2210 }));22112212 let origin1 = Origin::signed(1);2213 let origin2 = Origin::signed(2);2214 assert_ok!(TemplateModule::create_collection(2215 origin1.clone(),2216 col_name1.clone(),2217 col_desc1.clone(),2218 token_prefix1.clone(),2219 mode2220 ));22212222 assert_ok!(TemplateModule::set_public_access_mode(2223 origin1.clone(),2224 1,2225 AccessMode::WhiteList2226 ));2227 assert_ok!(TemplateModule::set_mint_permission(2228 origin1.clone(),2229 1,2230 false2231 ));2232 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));22332234 assert_noop!(2235 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2236 "Public minting is not allowed for this collection"2237 );2238 });2239}224022412242#[test]2243fn white_list_test_12() {2244 new_test_ext().execute_with(|| {2245 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2246 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2247 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2248 let mode: CollectionMode = CollectionMode::NFT(2000);22492250 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2251 collection_numbers_limit: 10,2252 account_token_ownership_limit: 10,2253 collections_admins_limit: 5,2254 custom_data_limit: 2048,2255 nft_sponsor_transfer_timeout: 15,2256 fungible_sponsor_transfer_timeout: 15,2257 refungible_sponsor_transfer_timeout: 15, 2258 }));22592260 let origin1 = Origin::signed(1);2261 let origin2 = Origin::signed(2);2262 assert_ok!(TemplateModule::create_collection(2263 origin1.clone(),2264 col_name1.clone(),2265 col_desc1.clone(),2266 token_prefix1.clone(),2267 mode2268 ));22692270 assert_ok!(TemplateModule::set_public_access_mode(2271 origin1.clone(),2272 1,2273 AccessMode::WhiteList2274 ));2275 assert_ok!(TemplateModule::set_mint_permission(2276 origin1.clone(),2277 1,2278 false2279 ));22802281 assert_noop!(2282 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2283 "Public minting is not allowed for this collection"2284 );2285 });2286}228722882289#[test]2290fn white_list_test_13() {2291 new_test_ext().execute_with(|| {2292 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2293 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2294 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2295 let mode: CollectionMode = CollectionMode::NFT(2000);22962297 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2298 collection_numbers_limit: 10,2299 account_token_ownership_limit: 10,2300 collections_admins_limit: 5,2301 custom_data_limit: 2048,2302 nft_sponsor_transfer_timeout: 15,2303 fungible_sponsor_transfer_timeout: 15,2304 refungible_sponsor_transfer_timeout: 15, 2305 }));23062307 let origin1 = Origin::signed(1);2308 assert_ok!(TemplateModule::create_collection(2309 origin1.clone(),2310 col_name1.clone(),2311 col_desc1.clone(),2312 token_prefix1.clone(),2313 mode2314 ));23152316 assert_ok!(TemplateModule::set_public_access_mode(2317 origin1.clone(),2318 1,2319 AccessMode::WhiteList2320 ));2321 assert_ok!(TemplateModule::set_mint_permission(2322 origin1.clone(),2323 1,2324 true2325 ));23262327 assert_ok!(TemplateModule::create_item(2328 origin1.clone(),2329 1,2330 [1, 2, 3].to_vec(),2331 12332 ));2333 });2334}233523362337#[test]2338fn white_list_test_14() {2339 new_test_ext().execute_with(|| {2340 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2341 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2342 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2343 let mode: CollectionMode = CollectionMode::NFT(2000);23442345 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2346 collection_numbers_limit: 10,2347 account_token_ownership_limit: 10,2348 collections_admins_limit: 5,2349 custom_data_limit: 2048,2350 nft_sponsor_transfer_timeout: 15,2351 fungible_sponsor_transfer_timeout: 15,2352 refungible_sponsor_transfer_timeout: 15, 2353 }));23542355 let origin1 = Origin::signed(1);2356 let origin2 = Origin::signed(2);2357 assert_ok!(TemplateModule::create_collection(2358 origin1.clone(),2359 col_name1.clone(),2360 col_desc1.clone(),2361 token_prefix1.clone(),2362 mode2363 ));23642365 assert_ok!(TemplateModule::set_public_access_mode(2366 origin1.clone(),2367 1,2368 AccessMode::WhiteList2369 ));2370 assert_ok!(TemplateModule::set_mint_permission(2371 origin1.clone(),2372 1,2373 true2374 ));23752376 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));23772378 assert_ok!(TemplateModule::create_item(2379 origin2.clone(),2380 1,2381 [1, 2, 3].to_vec(),2382 22383 ));2384 });2385}238623872388#[test]2389fn white_list_test_15() {2390 new_test_ext().execute_with(|| {2391 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2392 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2393 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2394 let mode: CollectionMode = CollectionMode::NFT(2000);23952396 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2397 collection_numbers_limit: 10,2398 account_token_ownership_limit: 10,2399 collections_admins_limit: 5,2400 custom_data_limit: 2048,2401 nft_sponsor_transfer_timeout: 15,2402 fungible_sponsor_transfer_timeout: 15,2403 refungible_sponsor_transfer_timeout: 15, 2404 }));24052406 let origin1 = Origin::signed(1);2407 let origin2 = Origin::signed(2);2408 assert_ok!(TemplateModule::create_collection(2409 origin1.clone(),2410 col_name1.clone(),2411 col_desc1.clone(),2412 token_prefix1.clone(),2413 mode2414 ));24152416 assert_ok!(TemplateModule::set_public_access_mode(2417 origin1.clone(),2418 1,2419 AccessMode::WhiteList2420 ));2421 assert_ok!(TemplateModule::set_mint_permission(2422 origin1.clone(),2423 1,2424 true2425 ));24262427 assert_noop!(2428 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2429 "Address is not in white list"2430 );2431 });2432}243324342435#[test]2436fn white_list_test_16() {2437 new_test_ext().execute_with(|| {2438 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2439 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2440 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2441 let mode: CollectionMode = CollectionMode::NFT(2000);24422443 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2444 collection_numbers_limit: 10,2445 account_token_ownership_limit: 10,2446 collections_admins_limit: 5,2447 custom_data_limit: 2048,2448 nft_sponsor_transfer_timeout: 15,2449 fungible_sponsor_transfer_timeout: 15,2450 refungible_sponsor_transfer_timeout: 15, 2451 }));24522453 let origin1 = Origin::signed(1);2454 let origin2 = Origin::signed(2);2455 assert_ok!(TemplateModule::create_collection(2456 origin1.clone(),2457 col_name1.clone(),2458 col_desc1.clone(),2459 token_prefix1.clone(),2460 mode2461 ));24622463 assert_ok!(TemplateModule::set_public_access_mode(2464 origin1.clone(),2465 1,2466 AccessMode::WhiteList2467 ));2468 assert_ok!(TemplateModule::set_mint_permission(2469 origin1.clone(),2470 1,2471 true2472 ));2473 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));24742475 assert_ok!(TemplateModule::create_item(2476 origin2.clone(),2477 1,2478 [1, 2, 3].to_vec(),2479 22480 ));2481 });2482}248324842485#[test]2486fn total_number_collections_bound() {2487 new_test_ext().execute_with(|| {2488 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2489 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2490 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2491 let mode: CollectionMode = CollectionMode::NFT(2000);24922493 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2494 collection_numbers_limit: 10,2495 account_token_ownership_limit: 10,2496 collections_admins_limit: 5,2497 custom_data_limit: 2048,2498 nft_sponsor_transfer_timeout: 15,2499 fungible_sponsor_transfer_timeout: 15,2500 refungible_sponsor_transfer_timeout: 15, 2501 }));25022503 let origin1 = Origin::signed(1);2504 assert_ok!(TemplateModule::create_collection(2505 origin1.clone(),2506 col_name1.clone(),2507 col_desc1.clone(),2508 token_prefix1.clone(),2509 mode2510 ));2511 });2512}251325142515#[test]2516fn total_number_collections_bound_neg() {2517 new_test_ext().execute_with(|| {2518 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2519 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2520 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2521 let mode: CollectionMode = CollectionMode::NFT(2000);25222523 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2524 collection_numbers_limit: 10,2525 account_token_ownership_limit: 10,2526 collections_admins_limit: 5,2527 custom_data_limit: 2048,2528 nft_sponsor_transfer_timeout: 15,2529 fungible_sponsor_transfer_timeout: 15,2530 refungible_sponsor_transfer_timeout: 15, 2531 }));25322533 let origin1 = Origin::signed(1);25342535 for _ in 0..10 {25362537 assert_ok!(TemplateModule::create_collection(2538 origin1.clone(),2539 col_name1.clone(),2540 col_desc1.clone(),2541 token_prefix1.clone(),2542 mode.clone()2543 ));2544 }25452546 2547 assert_noop!(TemplateModule::create_collection(2548 origin1.clone(),2549 col_name1.clone(),2550 col_desc1.clone(),2551 token_prefix1.clone(),2552 mode.clone()2553 ), "Total collections bound exceeded");2554 });2555}255625572558#[test]2559fn owned_tokens_bound() {2560 new_test_ext().execute_with(|| {2561 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2562 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2563 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2564 let mode: CollectionMode = CollectionMode::NFT(2000);25652566 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2567 collection_numbers_limit: 10,2568 account_token_ownership_limit: 10,2569 collections_admins_limit: 5,2570 custom_data_limit: 2048,2571 nft_sponsor_transfer_timeout: 15,2572 fungible_sponsor_transfer_timeout: 15,2573 refungible_sponsor_transfer_timeout: 15, 2574 }));25752576 let origin1 = Origin::signed(1);2577 assert_ok!(TemplateModule::create_collection(2578 origin1.clone(),2579 col_name1.clone(),2580 col_desc1.clone(),2581 token_prefix1.clone(),2582 mode2583 ));25842585 assert_ok!(TemplateModule::create_item(2586 origin1.clone(),2587 1,2588 [1, 2, 3].to_vec(),2589 12590 ));25912592 assert_ok!(TemplateModule::create_item(2593 origin1.clone(),2594 1,2595 [1, 2, 3].to_vec(),2596 12597 ));2598 });2599}260026012602#[test]2603fn owned_tokens_bound_neg() {2604 new_test_ext().execute_with(|| {2605 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2606 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2607 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2608 let mode: CollectionMode = CollectionMode::NFT(2000);26092610 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2611 collection_numbers_limit: 10,2612 account_token_ownership_limit: 1,2613 collections_admins_limit: 5,2614 custom_data_limit: 2048,2615 nft_sponsor_transfer_timeout: 15,2616 fungible_sponsor_transfer_timeout: 15,2617 refungible_sponsor_transfer_timeout: 15, 2618 }));26192620 let origin1 = Origin::signed(1);2621 assert_ok!(TemplateModule::create_collection(2622 origin1.clone(),2623 col_name1.clone(),2624 col_desc1.clone(),2625 token_prefix1.clone(),2626 mode2627 ));26282629 assert_ok!(TemplateModule::create_item(2630 origin1.clone(),2631 1,2632 [1, 2, 3].to_vec(),2633 12634 ));26352636 assert_noop!(TemplateModule::create_item(2637 origin1.clone(),2638 1,2639 [1, 2, 3].to_vec(),2640 12641 ), "Owned tokens by a single address bound exceeded");2642 });2643}264426452646#[test]2647fn collection_admins_bound() {2648 new_test_ext().execute_with(|| {2649 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2650 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2651 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2652 let mode: CollectionMode = CollectionMode::NFT(2000);26532654 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2655 collection_numbers_limit: 10,2656 account_token_ownership_limit: 10,2657 collections_admins_limit: 2,2658 custom_data_limit: 2048,2659 nft_sponsor_transfer_timeout: 15,2660 fungible_sponsor_transfer_timeout: 15,2661 refungible_sponsor_transfer_timeout: 15, 2662 }));26632664 let origin1 = Origin::signed(1);2665 assert_ok!(TemplateModule::create_collection(2666 origin1.clone(),2667 col_name1.clone(),2668 col_desc1.clone(),2669 token_prefix1.clone(),2670 mode2671 ));26722673 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));2674 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));2675 });2676}267726782679#[test]2680fn collection_admins_bound_neg() {2681 new_test_ext().execute_with(|| {2682 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2683 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2684 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2685 let mode: CollectionMode = CollectionMode::NFT(2000);26862687 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2688 collection_numbers_limit: 10,2689 account_token_ownership_limit: 1,2690 collections_admins_limit: 1,2691 custom_data_limit: 2048,2692 nft_sponsor_transfer_timeout: 15,2693 fungible_sponsor_transfer_timeout: 15,2694 refungible_sponsor_transfer_timeout: 15, 2695 }));26962697 let origin1 = Origin::signed(1);2698 assert_ok!(TemplateModule::create_collection(2699 origin1.clone(),2700 col_name1.clone(),2701 col_desc1.clone(),2702 token_prefix1.clone(),2703 mode2704 ));27052706 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));2707 assert_noop!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3), "Number of collection admins bound exceeded");2708 });2709}271027112712#[test]2713fn custom_data_size_bound() {2714 new_test_ext().execute_with(|| {2715 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2716 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2717 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2718 let mode: CollectionMode = CollectionMode::NFT(2000);27192720 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2721 collection_numbers_limit: 10,2722 account_token_ownership_limit: 10,2723 collections_admins_limit: 5,2724 custom_data_limit: 2048,2725 nft_sponsor_transfer_timeout: 15,2726 fungible_sponsor_transfer_timeout: 15,2727 refungible_sponsor_transfer_timeout: 15, 2728 }));27292730 let origin1 = Origin::signed(1);2731 assert_ok!(TemplateModule::create_collection(2732 origin1.clone(),2733 col_name1.clone(),2734 col_desc1.clone(),2735 token_prefix1.clone(),2736 mode2737 ));2738 });2739}274027412742#[test]2743fn custom_data_size_bound_neg() {2744 new_test_ext().execute_with(|| {2745 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2746 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2747 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2748 let mode: CollectionMode = CollectionMode::NFT(2000);27492750 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2751 collection_numbers_limit: 10,2752 account_token_ownership_limit: 10,2753 collections_admins_limit: 5,2754 custom_data_limit: 200,2755 nft_sponsor_transfer_timeout: 15,2756 fungible_sponsor_transfer_timeout: 15,2757 refungible_sponsor_transfer_timeout: 15, 2758 }));27592760 let origin1 = Origin::signed(1);2761 assert_noop!(TemplateModule::create_collection(2762 origin1.clone(),2763 col_name1.clone(),2764 col_desc1.clone(),2765 token_prefix1.clone(),2766 mode2767 ), "Custom data size bound exceeded");2768 });2769}2770