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}46474849#[test]50fn create_nft_multiple_items() {51 new_test_ext().execute_with(|| {52 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();53 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();54 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();55 let mode: CollectionMode = CollectionMode::NFT(2000);5657 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 58 collection_numbers_limit: 10,59 account_token_ownership_limit: 10,60 collections_admins_limit: 5,61 custom_data_limit: 2048,62 nft_sponsor_transfer_timeout: 15,63 fungible_sponsor_transfer_timeout: 15,64 refungible_sponsor_transfer_timeout: 15, 65 }));6667 let origin1 = Origin::signed(1);68 assert_ok!(TemplateModule::create_collection(69 origin1.clone(),70 col_name1.clone(),71 col_desc1.clone(),72 token_prefix1.clone(),73 mode74 ));75 assert_eq!(TemplateModule::collection(1).owner, 1);7677 let properties = [[1, 2, 3].to_vec(), [3, 2, 1].to_vec(), [3, 3, 3].to_vec()].to_vec();7879 assert_ok!(TemplateModule::create_multiple_items(80 origin1.clone(),81 1,82 properties.clone(),83 184 ));85 for (index, data) in properties.iter().enumerate() {86 assert_eq!(TemplateModule::nft_item_id(1, (index + 1) as u64).data, *data);87 }88 });89}9091#[test]92fn create_refungible_item() {93 new_test_ext().execute_with(|| {94 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();95 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();96 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();97 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);9899 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 100 collection_numbers_limit: 10,101 account_token_ownership_limit: 10,102 collections_admins_limit: 5,103 custom_data_limit: 2048,104 nft_sponsor_transfer_timeout: 15,105 fungible_sponsor_transfer_timeout: 15,106 refungible_sponsor_transfer_timeout: 15, 107 }));108109 let origin1 = Origin::signed(1);110 assert_ok!(TemplateModule::create_collection(111 origin1.clone(),112 col_name1.clone(),113 col_desc1.clone(),114 token_prefix1.clone(),115 mode116 ));117 assert_eq!(TemplateModule::collection(1).owner, 1);118119 assert_ok!(TemplateModule::create_item(120 origin1.clone(),121 1,122 [1, 2, 3].to_vec(),123 1124 ));125 assert_eq!(126 TemplateModule::refungible_item_id(1, 1).data,127 [1, 2, 3].to_vec()128 );129 assert_eq!(130 TemplateModule::refungible_item_id(1, 1).owner[0],131 Ownership {132 owner: 1,133 fraction: 1000134 }135 );136 });137}138139#[test]140fn create_multiple_refungible_items() {141 new_test_ext().execute_with(|| {142 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();143 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();144 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();145 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);146147 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 148 collection_numbers_limit: 10,149 account_token_ownership_limit: 10,150 collections_admins_limit: 5,151 custom_data_limit: 2048,152 nft_sponsor_transfer_timeout: 15,153 fungible_sponsor_transfer_timeout: 15,154 refungible_sponsor_transfer_timeout: 15, 155 }));156157 let origin1 = Origin::signed(1);158 assert_ok!(TemplateModule::create_collection(159 origin1.clone(),160 col_name1.clone(),161 col_desc1.clone(),162 token_prefix1.clone(),163 mode164 ));165 assert_eq!(TemplateModule::collection(1).owner, 1);166167 let properties = [[1, 2, 3].to_vec(), [3, 2, 1].to_vec(), [3, 3, 3].to_vec()].to_vec();168169 assert_ok!(TemplateModule::create_multiple_items(170 origin1.clone(),171 1,172 properties.clone(),173 1174 ));175 for (index, data) in properties.iter().enumerate() {176177 let item = TemplateModule::refungible_item_id(1, (index + 1) as u64);178 assert_eq!(item.data, *data);179 assert_eq!(180 item.owner[0],181 Ownership {182 owner: 1,183 fraction: 1000184 }185 );186 }187 });188}189190#[test]191fn create_fungible_item() {192 new_test_ext().execute_with(|| {193 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();194 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();195 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();196 let mode: CollectionMode = CollectionMode::Fungible(3);197198 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 199 collection_numbers_limit: 10,200 account_token_ownership_limit: 10,201 collections_admins_limit: 5,202 custom_data_limit: 2048,203 nft_sponsor_transfer_timeout: 15,204 fungible_sponsor_transfer_timeout: 15,205 refungible_sponsor_transfer_timeout: 15, 206 }));207208 let origin1 = Origin::signed(1);209 assert_ok!(TemplateModule::create_collection(210 origin1.clone(),211 col_name1.clone(),212 col_desc1.clone(),213 token_prefix1.clone(),214 mode215 ));216 assert_eq!(TemplateModule::collection(1).owner, 1);217218 assert_ok!(TemplateModule::create_item(219 origin1.clone(),220 1,221 [].to_vec(),222 1223 ));224 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);225 });226}227228#[test]229fn create_multiple_fungible_items() {230 new_test_ext().execute_with(|| {231 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();232 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();233 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();234 let mode: CollectionMode = CollectionMode::Fungible(3);235236 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 237 collection_numbers_limit: 10,238 account_token_ownership_limit: 10,239 collections_admins_limit: 5,240 custom_data_limit: 2048,241 nft_sponsor_transfer_timeout: 15,242 fungible_sponsor_transfer_timeout: 15,243 refungible_sponsor_transfer_timeout: 15, 244 }));245246 let origin1 = Origin::signed(1);247 assert_ok!(TemplateModule::create_collection(248 origin1.clone(),249 col_name1.clone(),250 col_desc1.clone(),251 token_prefix1.clone(),252 mode253 ));254 assert_eq!(TemplateModule::collection(1).owner, 1);255256 let properties = [[].to_vec(), [].to_vec(), [].to_vec()].to_vec();257258 assert_ok!(TemplateModule::create_multiple_items(259 origin1.clone(),260 1,261 properties.clone(),262 1263 ));264 265 for (index, _) in properties.iter().enumerate() {266 assert_eq!(TemplateModule::fungible_item_id(1, (index + 1) as u64).owner, 1);267 }268 assert_eq!(TemplateModule::balance_count(1, 1), 3000);269 assert_eq!(TemplateModule::address_tokens(1, 1), [1, 2, 3]);270 });271}272273#[test]274fn transfer_fungible_item() {275 new_test_ext().execute_with(|| {276 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();277 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();278 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();279 let mode: CollectionMode = CollectionMode::Fungible(3);280281 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 282 collection_numbers_limit: 10,283 account_token_ownership_limit: 10,284 collections_admins_limit: 5,285 custom_data_limit: 2048,286 nft_sponsor_transfer_timeout: 15,287 fungible_sponsor_transfer_timeout: 15,288 refungible_sponsor_transfer_timeout: 15, 289 }));290291 let origin1 = Origin::signed(1);292 let origin2 = Origin::signed(2);293 assert_ok!(TemplateModule::create_collection(294 origin1.clone(),295 col_name1.clone(),296 col_desc1.clone(),297 token_prefix1.clone(),298 mode299 ));300 assert_eq!(TemplateModule::collection(1).owner, 1);301302 assert_ok!(TemplateModule::create_item(303 origin1.clone(),304 1,305 [].to_vec(),306 1307 ));308 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);309 assert_eq!(TemplateModule::balance_count(1, 1), 1000);310 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);311312 313 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));314 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 2);315 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 1000);316 assert_eq!(TemplateModule::balance_count(1, 1), 0);317 assert_eq!(TemplateModule::balance_count(1, 2), 1000);318 319 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);320321 322 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));323 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 2);324 assert_eq!(TemplateModule::fungible_item_id(1, 2).owner, 3);325 assert_eq!(TemplateModule::balance_count(1, 2), 500);326 assert_eq!(TemplateModule::balance_count(1, 3), 500);327 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);328 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);329330 331 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));332 assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 300);333 assert_eq!(TemplateModule::fungible_item_id(1, 2).value, 700);334 assert_eq!(TemplateModule::balance_count(1, 2), 300);335 assert_eq!(TemplateModule::balance_count(1, 3), 700);336 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);337 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);338 });339}340341#[test]342fn transfer_refungible_item() {343 new_test_ext().execute_with(|| {344 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();345 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();346 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();347 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);348349 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 350 collection_numbers_limit: 10,351 account_token_ownership_limit: 10,352 collections_admins_limit: 5,353 custom_data_limit: 2048,354 nft_sponsor_transfer_timeout: 15,355 fungible_sponsor_transfer_timeout: 15,356 refungible_sponsor_transfer_timeout: 15, 357 }));358359 let origin1 = Origin::signed(1);360 let origin2 = Origin::signed(2);361 assert_ok!(TemplateModule::create_collection(362 origin1.clone(),363 col_name1.clone(),364 col_desc1.clone(),365 token_prefix1.clone(),366 mode367 ));368 assert_eq!(TemplateModule::collection(1).owner, 1);369370 assert_ok!(TemplateModule::create_item(371 origin1.clone(),372 1,373 [1, 2, 3].to_vec(),374 1375 ));376 assert_eq!(377 TemplateModule::refungible_item_id(1, 1).data,378 [1, 2, 3].to_vec()379 );380 assert_eq!(381 TemplateModule::refungible_item_id(1, 1).owner[0],382 Ownership {383 owner: 1,384 fraction: 1000385 }386 );387 assert_eq!(TemplateModule::balance_count(1, 1), 1000);388 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);389390 391 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));392 assert_eq!(393 TemplateModule::refungible_item_id(1, 1).owner[0],394 Ownership {395 owner: 2,396 fraction: 1000397 }398 );399 assert_eq!(TemplateModule::balance_count(1, 1), 0);400 assert_eq!(TemplateModule::balance_count(1, 2), 1000);401 402 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);403404 405 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));406 assert_eq!(407 TemplateModule::refungible_item_id(1, 1).owner[0],408 Ownership {409 owner: 2,410 fraction: 500411 }412 );413 assert_eq!(414 TemplateModule::refungible_item_id(1, 1).owner[1],415 Ownership {416 owner: 3,417 fraction: 500418 }419 );420 assert_eq!(TemplateModule::balance_count(1, 2), 500);421 assert_eq!(TemplateModule::balance_count(1, 3), 500);422 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);423 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);424425 426 assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));427 assert_eq!(428 TemplateModule::refungible_item_id(1, 1).owner[0],429 Ownership {430 owner: 2,431 fraction: 300432 }433 );434 assert_eq!(435 TemplateModule::refungible_item_id(1, 1).owner[1],436 Ownership {437 owner: 3,438 fraction: 700439 }440 );441 assert_eq!(TemplateModule::balance_count(1, 2), 300);442 assert_eq!(TemplateModule::balance_count(1, 3), 700);443 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);444 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);445 });446}447448#[test]449fn transfer_nft_item() {450 new_test_ext().execute_with(|| {451 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();452 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();453 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();454 let mode: CollectionMode = CollectionMode::NFT(2000);455456 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 457 collection_numbers_limit: 10,458 account_token_ownership_limit: 10,459 collections_admins_limit: 5,460 custom_data_limit: 2048,461 nft_sponsor_transfer_timeout: 15,462 fungible_sponsor_transfer_timeout: 15,463 refungible_sponsor_transfer_timeout: 15, 464 }));465466 let origin1 = Origin::signed(1);467 assert_ok!(TemplateModule::create_collection(468 origin1.clone(),469 col_name1.clone(),470 col_desc1.clone(),471 token_prefix1.clone(),472 mode473 ));474 assert_eq!(TemplateModule::collection(1).owner, 1);475476 assert_ok!(TemplateModule::create_item(477 origin1.clone(),478 1,479 [1, 2, 3].to_vec(),480 1481 ));482 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());483 assert_eq!(TemplateModule::balance_count(1, 1), 1);484 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);485486 487 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));488 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 2);489 assert_eq!(TemplateModule::balance_count(1, 1), 0);490 assert_eq!(TemplateModule::balance_count(1, 2), 1);491 492 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);493 });494}495496#[test]497fn nft_approve_and_transfer_from() {498 new_test_ext().execute_with(|| {499 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();500 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();501 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();502 let mode: CollectionMode = CollectionMode::NFT(2000);503504 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 505 collection_numbers_limit: 10,506 account_token_ownership_limit: 10,507 collections_admins_limit: 5,508 custom_data_limit: 2048,509 nft_sponsor_transfer_timeout: 15,510 fungible_sponsor_transfer_timeout: 15,511 refungible_sponsor_transfer_timeout: 15, 512 }));513514 let origin1 = Origin::signed(1);515 let origin2 = Origin::signed(2);516 assert_ok!(TemplateModule::create_collection(517 origin1.clone(),518 col_name1.clone(),519 col_desc1.clone(),520 token_prefix1.clone(),521 mode522 ));523 assert_eq!(TemplateModule::collection(1).owner, 1);524525 assert_ok!(TemplateModule::create_item(526 origin1.clone(),527 1,528 [1, 2, 3].to_vec(),529 1530 ));531 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());532 assert_eq!(TemplateModule::balance_count(1, 1), 1);533 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);534535 assert_ok!(TemplateModule::set_mint_permission(536 origin1.clone(),537 1,538 true539 ));540 assert_ok!(TemplateModule::set_public_access_mode(541 origin1.clone(),542 1,543 AccessMode::WhiteList544 ));545 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));546 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));547 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));548549 550 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));551 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);552 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));553 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);554 assert_eq!(555 TemplateModule::approved(1, (1, 1))[0],556 ApprovePermissions {557 approved: 2,558 amount: 100000000559 }560 );561562 assert_ok!(TemplateModule::transfer_from(563 origin2.clone(),564 1,565 3,566 1,567 1,568 1569 ));570 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);571 });572}573574#[test]575fn refungible_approve_and_transfer_from() {576 new_test_ext().execute_with(|| {577 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();578 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();579 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();580 let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);581582 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 583 collection_numbers_limit: 10,584 account_token_ownership_limit: 10,585 collections_admins_limit: 5,586 custom_data_limit: 2048,587 nft_sponsor_transfer_timeout: 15,588 fungible_sponsor_transfer_timeout: 15,589 refungible_sponsor_transfer_timeout: 15, 590 }));591592 let origin1 = Origin::signed(1);593 let origin2 = Origin::signed(2);594 assert_ok!(TemplateModule::create_collection(595 origin1.clone(),596 col_name1.clone(),597 col_desc1.clone(),598 token_prefix1.clone(),599 mode600 ));601 assert_eq!(TemplateModule::collection(1).owner, 1);602603 assert_ok!(TemplateModule::create_item(604 origin1.clone(),605 1,606 [1, 2, 3].to_vec(),607 1608 ));609 assert_eq!(610 TemplateModule::refungible_item_id(1, 1).data,611 [1, 2, 3].to_vec()612 );613 assert_eq!(614 TemplateModule::refungible_item_id(1, 1).owner[0],615 Ownership {616 owner: 1,617 fraction: 1000618 }619 );620 assert_eq!(TemplateModule::balance_count(1, 1), 1000);621 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);622623 assert_ok!(TemplateModule::set_mint_permission(624 origin1.clone(),625 1,626 true627 ));628 assert_ok!(TemplateModule::set_public_access_mode(629 origin1.clone(),630 1,631 AccessMode::WhiteList632 ));633 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));634 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));635 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));636637 638 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));639 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);640 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));641 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);642 assert_eq!(643 TemplateModule::approved(1, (1, 1))[0],644 ApprovePermissions {645 approved: 2,646 amount: 100000000647 }648 );649650 assert_ok!(TemplateModule::transfer_from(651 origin2.clone(),652 1,653 3,654 1,655 1,656 100657 ));658 assert_eq!(TemplateModule::balance_count(1, 1), 900);659 assert_eq!(TemplateModule::balance_count(1, 3), 100);660 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);661 assert_eq!(TemplateModule::address_tokens(1, 3), [1]);662663 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);664 assert_eq!(665 TemplateModule::approved(1, (1, 1))[0],666 ApprovePermissions {667 approved: 3,668 amount: 100000000669 }670 );671 });672}673674#[test]675fn fungible_approve_and_transfer_from() {676 new_test_ext().execute_with(|| {677 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();678 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();679 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();680 let mode: CollectionMode = CollectionMode::Fungible(3);681682 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 683 collection_numbers_limit: 10,684 account_token_ownership_limit: 10,685 collections_admins_limit: 5,686 custom_data_limit: 2048,687 nft_sponsor_transfer_timeout: 15,688 fungible_sponsor_transfer_timeout: 15,689 refungible_sponsor_transfer_timeout: 15, 690 }));691692 let origin1 = Origin::signed(1);693 let origin2 = Origin::signed(2);694 assert_ok!(TemplateModule::create_collection(695 origin1.clone(),696 col_name1.clone(),697 col_desc1.clone(),698 token_prefix1.clone(),699 mode700 ));701 assert_eq!(TemplateModule::collection(1).owner, 1);702703 assert_ok!(TemplateModule::create_item(704 origin1.clone(),705 1,706 [].to_vec(),707 1708 ));709 assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);710 assert_eq!(TemplateModule::balance_count(1, 1), 1000);711 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);712713 assert_ok!(TemplateModule::set_mint_permission(714 origin1.clone(),715 1,716 true717 ));718 assert_ok!(TemplateModule::set_public_access_mode(719 origin1.clone(),720 1,721 AccessMode::WhiteList722 ));723 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));724 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));725 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));726727 728 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));729 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);730 assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));731 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);732 assert_eq!(733 TemplateModule::approved(1, (1, 1))[0],734 ApprovePermissions {735 approved: 2,736 amount: 100000000737 }738 );739740 assert_ok!(TemplateModule::transfer_from(741 origin2.clone(),742 1,743 3,744 1,745 1,746 100747 ));748 assert_eq!(TemplateModule::balance_count(1, 1), 900);749 assert_eq!(TemplateModule::balance_count(1, 3), 100);750 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);751 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);752753 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);754 assert_eq!(755 TemplateModule::approved(1, (1, 1))[0],756 ApprovePermissions {757 approved: 3,758 amount: 100000000759 }760 );761762 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));763 assert_ok!(TemplateModule::transfer_from(764 origin2.clone(),765 1,766 3,767 1,768 1,769 900770 ));771 assert_eq!(TemplateModule::balance_count(1, 1), 0);772 assert_eq!(TemplateModule::balance_count(1, 3), 1000);773 774 assert_eq!(TemplateModule::address_tokens(1, 3), [2]);775776 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);777 });778}779780#[test]781fn change_collection_owner() {782 new_test_ext().execute_with(|| {783 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();784 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();785 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();786 let mode: CollectionMode = CollectionMode::NFT(2000);787788 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 789 collection_numbers_limit: 10,790 account_token_ownership_limit: 10,791 collections_admins_limit: 5,792 custom_data_limit: 2048,793 nft_sponsor_transfer_timeout: 15,794 fungible_sponsor_transfer_timeout: 15,795 refungible_sponsor_transfer_timeout: 15, 796 }));797798 let origin1 = Origin::signed(1);799 assert_ok!(TemplateModule::create_collection(800 origin1.clone(),801 col_name1.clone(),802 col_desc1.clone(),803 token_prefix1.clone(),804 mode805 ));806 assert_ok!(TemplateModule::change_collection_owner(807 origin1.clone(),808 1,809 2810 ));811 assert_eq!(TemplateModule::collection(1).owner, 2);812 });813}814815#[test]816fn destroy_collection() {817 new_test_ext().execute_with(|| {818 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();819 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();820 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();821 let mode: CollectionMode = CollectionMode::NFT(2000);822823 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 824 collection_numbers_limit: 10,825 account_token_ownership_limit: 10,826 collections_admins_limit: 5,827 custom_data_limit: 2048,828 nft_sponsor_transfer_timeout: 15,829 fungible_sponsor_transfer_timeout: 15,830 refungible_sponsor_transfer_timeout: 15, 831 }));832833 let origin1 = Origin::signed(1);834 assert_ok!(TemplateModule::create_collection(835 origin1.clone(),836 col_name1.clone(),837 col_desc1.clone(),838 token_prefix1.clone(),839 mode840 ));841 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));842 });843}844845#[test]846fn burn_nft_item() {847 new_test_ext().execute_with(|| {848 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();849 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();850 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();851 let mode: CollectionMode = CollectionMode::NFT(2000);852853 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 854 collection_numbers_limit: 10,855 account_token_ownership_limit: 10,856 collections_admins_limit: 5,857 custom_data_limit: 2048,858 nft_sponsor_transfer_timeout: 15,859 fungible_sponsor_transfer_timeout: 15,860 refungible_sponsor_transfer_timeout: 15, 861 }));862863 let origin1 = Origin::signed(1);864 assert_ok!(TemplateModule::create_collection(865 origin1.clone(),866 col_name1.clone(),867 col_desc1.clone(),868 token_prefix1.clone(),869 mode870 ));871 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));872 assert_ok!(TemplateModule::create_item(873 origin1.clone(),874 1,875 [1, 2, 3].to_vec(),876 1877 ));878879 assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());880881 882 assert_eq!(TemplateModule::balance_count(1, 1), 1);883884 885 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));886 assert_noop!(887 TemplateModule::burn_item(origin1.clone(), 1, 1),888 "Item does not exists"889 );890891 assert_eq!(TemplateModule::balance_count(1, 1), 0);892 });893}894895#[test]896fn burn_fungible_item() {897 new_test_ext().execute_with(|| {898 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();899 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();900 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();901 let mode: CollectionMode = CollectionMode::Fungible(3);902903 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 904 collection_numbers_limit: 10,905 account_token_ownership_limit: 10,906 collections_admins_limit: 5,907 custom_data_limit: 2048,908 nft_sponsor_transfer_timeout: 15,909 fungible_sponsor_transfer_timeout: 15,910 refungible_sponsor_transfer_timeout: 15, 911 }));912913 let origin1 = Origin::signed(1);914 assert_ok!(TemplateModule::create_collection(915 origin1.clone(),916 col_name1.clone(),917 col_desc1.clone(),918 token_prefix1.clone(),919 mode920 ));921 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));922 assert_ok!(TemplateModule::create_item(923 origin1.clone(),924 1,925 [].to_vec(),926 1927 ));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 burn_refungible_item() {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::ReFungible(200, 3);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 assert_ok!(TemplateModule::create_collection(964 origin1.clone(),965 col_name1.clone(),966 col_desc1.clone(),967 token_prefix1.clone(),968 mode969 ));970971 assert_ok!(TemplateModule::set_mint_permission(972 origin1.clone(),973 1,974 true975 ));976 assert_ok!(TemplateModule::set_public_access_mode(977 origin1.clone(),978 1,979 AccessMode::WhiteList980 ));981 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));982983 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));984 assert_ok!(TemplateModule::create_item(985 origin2.clone(),986 1,987 [1, 2, 3].to_vec(),988 1989 ));990991 assert_eq!(992 TemplateModule::refungible_item_id(1, 1).data,993 [1, 2, 3].to_vec()994 );995996 997 assert_eq!(TemplateModule::balance_count(1, 1), 1000);998999 1000 assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));1001 assert_noop!(1002 TemplateModule::burn_item(origin1.clone(), 1, 1),1003 "Item does not exists"1004 );10051006 assert_eq!(TemplateModule::balance_count(1, 1), 0);1007 });1008}10091010#[test]1011fn add_collection_admin() {1012 new_test_ext().execute_with(|| {1013 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1014 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1015 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1016 let mode: CollectionMode = CollectionMode::NFT(2000);10171018 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1019 collection_numbers_limit: 10,1020 account_token_ownership_limit: 10,1021 collections_admins_limit: 5,1022 custom_data_limit: 2048,1023 nft_sponsor_transfer_timeout: 15,1024 fungible_sponsor_transfer_timeout: 15,1025 refungible_sponsor_transfer_timeout: 15, 1026 }));10271028 let origin1 = Origin::signed(1);1029 let origin2 = Origin::signed(2);1030 let origin3 = Origin::signed(3);1031 assert_ok!(TemplateModule::create_collection(1032 origin1.clone(),1033 col_name1.clone(),1034 col_desc1.clone(),1035 token_prefix1.clone(),1036 mode.clone()1037 ));1038 assert_ok!(TemplateModule::create_collection(1039 origin2.clone(),1040 col_name1.clone(),1041 col_desc1.clone(),1042 token_prefix1.clone(),1043 mode.clone()1044 ));1045 assert_ok!(TemplateModule::create_collection(1046 origin3.clone(),1047 col_name1.clone(),1048 col_desc1.clone(),1049 token_prefix1.clone(),1050 mode.clone()1051 ));10521053 assert_eq!(TemplateModule::collection(1).owner, 1);1054 assert_eq!(TemplateModule::collection(2).owner, 2);1055 assert_eq!(TemplateModule::collection(3).owner, 3);10561057 1058 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));1059 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));10601061 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);1062 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);1063 });1064}10651066#[test]1067fn remove_collection_admin() {1068 new_test_ext().execute_with(|| {1069 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1070 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1071 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1072 let mode: CollectionMode = CollectionMode::NFT(2000);10731074 let origin1 = Origin::signed(1);1075 let origin2 = Origin::signed(2);1076 let origin3 = Origin::signed(3);10771078 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1079 collection_numbers_limit: 10,1080 account_token_ownership_limit: 10,1081 collections_admins_limit: 5,1082 custom_data_limit: 2048,1083 nft_sponsor_transfer_timeout: 15,1084 fungible_sponsor_transfer_timeout: 15,1085 refungible_sponsor_transfer_timeout: 15, 1086 }));10871088 assert_ok!(TemplateModule::create_collection(1089 origin1.clone(),1090 col_name1.clone(),1091 col_desc1.clone(),1092 token_prefix1.clone(),1093 mode.clone()1094 ));1095 assert_ok!(TemplateModule::create_collection(1096 origin2.clone(),1097 col_name1.clone(),1098 col_desc1.clone(),1099 token_prefix1.clone(),1100 mode.clone()1101 ));1102 assert_ok!(TemplateModule::create_collection(1103 origin3.clone(),1104 col_name1.clone(),1105 col_desc1.clone(),1106 token_prefix1.clone(),1107 mode.clone()1108 ));11091110 assert_eq!(TemplateModule::collection(1).owner, 1);1111 assert_eq!(TemplateModule::collection(2).owner, 2);1112 assert_eq!(TemplateModule::collection(3).owner, 3);11131114 1115 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));1116 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));11171118 assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);1119 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);11201121 1122 assert_ok!(TemplateModule::remove_collection_admin(1123 origin2.clone(),1124 1,1125 31126 ));1127 assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);1128 });1129}11301131#[test]1132fn balance_of() {1133 new_test_ext().execute_with(|| {1134 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1135 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1136 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1137 let nft_mode: CollectionMode = CollectionMode::NFT(2000);1138 let furg_mode: CollectionMode = CollectionMode::Fungible(3);1139 let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);11401141 let origin1 = Origin::signed(1);11421143 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1144 collection_numbers_limit: 10,1145 account_token_ownership_limit: 10,1146 collections_admins_limit: 5,1147 custom_data_limit: 2048,1148 nft_sponsor_transfer_timeout: 15,1149 fungible_sponsor_transfer_timeout: 15,1150 refungible_sponsor_transfer_timeout: 15, 1151 }));11521153 assert_ok!(TemplateModule::create_collection(1154 origin1.clone(),1155 col_name1.clone(),1156 col_desc1.clone(),1157 token_prefix1.clone(),1158 nft_mode.clone()1159 ));1160 assert_ok!(TemplateModule::create_collection(1161 origin1.clone(),1162 col_name1.clone(),1163 col_desc1.clone(),1164 token_prefix1.clone(),1165 furg_mode.clone()1166 ));1167 assert_ok!(TemplateModule::create_collection(1168 origin1.clone(),1169 col_name1.clone(),1170 col_desc1.clone(),1171 token_prefix1.clone(),1172 refung_mode.clone()1173 ));11741175 assert_eq!(TemplateModule::collection(1).owner, 1);1176 assert_eq!(TemplateModule::collection(2).owner, 1);1177 assert_eq!(TemplateModule::collection(3).owner, 1);11781179 1180 assert_eq!(TemplateModule::balance_count(1, 1), 0);1181 assert_eq!(TemplateModule::balance_count(2, 1), 0);1182 assert_eq!(TemplateModule::balance_count(3, 1), 0);11831184 1185 assert_ok!(TemplateModule::create_item(1186 origin1.clone(),1187 1,1188 [1, 1, 1].to_vec(),1189 11190 ));11911192 assert_ok!(TemplateModule::create_item(1193 origin1.clone(),1194 2,1195 [].to_vec(),1196 11197 ));11981199 assert_ok!(TemplateModule::create_item(1200 origin1.clone(),1201 3,1202 [1, 1, 1].to_vec(),1203 11204 ));12051206 1207 assert_eq!(TemplateModule::balance_count(1, 1), 1);1208 assert_eq!(TemplateModule::balance_count(2, 1), 1000);1209 assert_eq!(TemplateModule::balance_count(3, 1), 1000);1210 assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);1211 assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);1212 assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);1213 });1214}12151216#[test]1217fn approve() {1218 new_test_ext().execute_with(|| {1219 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1220 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1221 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1222 let nft_mode: CollectionMode = CollectionMode::NFT(2000);1223 let origin1 = Origin::signed(1);12241225 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1226 collection_numbers_limit: 10,1227 account_token_ownership_limit: 10,1228 collections_admins_limit: 5,1229 custom_data_limit: 2048,1230 nft_sponsor_transfer_timeout: 15,1231 fungible_sponsor_transfer_timeout: 15,1232 refungible_sponsor_transfer_timeout: 15, 1233 }));12341235 assert_ok!(TemplateModule::create_collection(1236 origin1.clone(),1237 col_name1.clone(),1238 col_desc1.clone(),1239 token_prefix1.clone(),1240 nft_mode.clone()1241 ));12421243 assert_eq!(TemplateModule::collection(1).owner, 1);12441245 1246 assert_ok!(TemplateModule::create_item(1247 origin1.clone(),1248 1,1249 [1, 1, 1].to_vec(),1250 11251 ));12521253 1254 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));1255 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);1256 });1257}12581259#[test]1260fn transfer_from() {1261 new_test_ext().execute_with(|| {1262 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1263 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1264 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1265 let mode: CollectionMode = CollectionMode::NFT(2000);1266 let origin1 = Origin::signed(1);1267 let origin2 = Origin::signed(2);12681269 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1270 collection_numbers_limit: 10,1271 account_token_ownership_limit: 10,1272 collections_admins_limit: 5,1273 custom_data_limit: 2048,1274 nft_sponsor_transfer_timeout: 15,1275 fungible_sponsor_transfer_timeout: 15,1276 refungible_sponsor_transfer_timeout: 15, 1277 }));12781279 assert_ok!(TemplateModule::create_collection(1280 origin1.clone(),1281 col_name1.clone(),1282 col_desc1.clone(),1283 token_prefix1.clone(),1284 mode1285 ));12861287 assert_eq!(TemplateModule::collection(1).owner, 1);12881289 1290 assert_ok!(TemplateModule::create_item(1291 origin1.clone(),1292 1,1293 [1, 1, 1].to_vec(),1294 11295 ));12961297 1298 assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));1299 assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);13001301 assert_ok!(TemplateModule::set_mint_permission(1302 origin1.clone(),1303 1,1304 true1305 ));1306 assert_ok!(TemplateModule::set_public_access_mode(1307 origin1.clone(),1308 1,1309 AccessMode::WhiteList1310 ));1311 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1312 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1313 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));13141315 assert_ok!(TemplateModule::transfer_from(1316 origin2.clone(),1317 1,1318 2,1319 1,1320 1,1321 11322 ));13231324 1325 assert_eq!(TemplateModule::balance_count(1, 1), 0);1326 assert_eq!(TemplateModule::balance_count(1, 2), 1);1327 });1328}1329133013311332133313341335#[test]1336fn owner_can_add_address_to_white_list() {1337 new_test_ext().execute_with(|| {1338 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1339 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1340 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1341 let mode: CollectionMode = CollectionMode::NFT(2000);1342 let origin1 = Origin::signed(1);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_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1363 assert_eq!(TemplateModule::white_list(1)[0], 2);1364 });1365}13661367#[test]1368fn admin_can_add_address_to_white_list() {1369 new_test_ext().execute_with(|| {1370 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1371 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1372 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1373 let mode: CollectionMode = CollectionMode::NFT(2000);1374 let origin1 = Origin::signed(1);1375 let origin2 = Origin::signed(2);13761377 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1378 collection_numbers_limit: 10,1379 account_token_ownership_limit: 10,1380 collections_admins_limit: 5,1381 custom_data_limit: 2048,1382 nft_sponsor_transfer_timeout: 15,1383 fungible_sponsor_transfer_timeout: 15,1384 refungible_sponsor_transfer_timeout: 15, 1385 }));13861387 assert_ok!(TemplateModule::create_collection(1388 origin1.clone(),1389 col_name1.clone(),1390 col_desc1.clone(),1391 token_prefix1.clone(),1392 mode1393 ));13941395 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));1396 assert_ok!(TemplateModule::add_to_white_list(origin2.clone(), 1, 3));1397 assert_eq!(TemplateModule::white_list(1)[0], 3);1398 });1399}14001401#[test]1402fn nonprivileged_user_cannot_add_address_to_white_list() {1403 new_test_ext().execute_with(|| {1404 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1405 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1406 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1407 let mode: CollectionMode = CollectionMode::NFT(2000);1408 let origin1 = Origin::signed(1);1409 let origin2 = Origin::signed(2);14101411 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1412 collection_numbers_limit: 10,1413 account_token_ownership_limit: 10,1414 collections_admins_limit: 5,1415 custom_data_limit: 2048,1416 nft_sponsor_transfer_timeout: 15,1417 fungible_sponsor_transfer_timeout: 15,1418 refungible_sponsor_transfer_timeout: 15, 1419 }));14201421 assert_ok!(TemplateModule::create_collection(1422 origin1.clone(),1423 col_name1.clone(),1424 col_desc1.clone(),1425 token_prefix1.clone(),1426 mode1427 ));14281429 assert_noop!(1430 TemplateModule::add_to_white_list(origin2.clone(), 1, 3),1431 "You do not have permissions to modify this collection"1432 );1433 });1434}14351436#[test]1437fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {1438 new_test_ext().execute_with(|| {1439 let origin1 = Origin::signed(1);14401441 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1442 collection_numbers_limit: 10,1443 account_token_ownership_limit: 10,1444 collections_admins_limit: 5,1445 custom_data_limit: 2048,1446 nft_sponsor_transfer_timeout: 15,1447 fungible_sponsor_transfer_timeout: 15,1448 refungible_sponsor_transfer_timeout: 15, 1449 }));14501451 assert_noop!(1452 TemplateModule::add_to_white_list(origin1.clone(), 1, 2),1453 "This collection does not exist"1454 );1455 });1456}14571458#[test]1459fn nobody_can_add_address_to_white_list_of_deleted_collection() {1460 new_test_ext().execute_with(|| {1461 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1462 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1463 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1464 let mode: CollectionMode = CollectionMode::NFT(2000);1465 let origin1 = Origin::signed(1);14661467 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1468 collection_numbers_limit: 10,1469 account_token_ownership_limit: 10,1470 collections_admins_limit: 5,1471 custom_data_limit: 2048,1472 nft_sponsor_transfer_timeout: 15,1473 fungible_sponsor_transfer_timeout: 15,1474 refungible_sponsor_transfer_timeout: 15, 1475 }));14761477 assert_ok!(TemplateModule::create_collection(1478 origin1.clone(),1479 col_name1.clone(),1480 col_desc1.clone(),1481 token_prefix1.clone(),1482 mode1483 ));14841485 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));1486 assert_noop!(1487 TemplateModule::add_to_white_list(origin1.clone(), 1, 2),1488 "This collection does not exist"1489 );1490 });1491}149214931494#[test]1495fn address_is_already_added_to_white_list() {1496 new_test_ext().execute_with(|| {1497 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1498 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1499 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1500 let mode: CollectionMode = CollectionMode::NFT(2000);1501 let origin1 = Origin::signed(1);15021503 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1504 collection_numbers_limit: 10,1505 account_token_ownership_limit: 10,1506 collections_admins_limit: 5,1507 custom_data_limit: 2048,1508 nft_sponsor_transfer_timeout: 15,1509 fungible_sponsor_transfer_timeout: 15,1510 refungible_sponsor_transfer_timeout: 15, 1511 }));15121513 assert_ok!(TemplateModule::create_collection(1514 origin1.clone(),1515 col_name1.clone(),1516 col_desc1.clone(),1517 token_prefix1.clone(),1518 mode1519 ));15201521 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1522 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1523 assert_eq!(TemplateModule::white_list(1)[0], 2);1524 assert_eq!(TemplateModule::white_list(1).len(), 1);1525 });1526}15271528#[test]1529fn owner_can_remove_address_from_white_list() {1530 new_test_ext().execute_with(|| {1531 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1532 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1533 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1534 let mode: CollectionMode = CollectionMode::NFT(2000);1535 let origin1 = Origin::signed(1);15361537 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1538 collection_numbers_limit: 10,1539 account_token_ownership_limit: 10,1540 collections_admins_limit: 5,1541 custom_data_limit: 2048,1542 nft_sponsor_transfer_timeout: 15,1543 fungible_sponsor_transfer_timeout: 15,1544 refungible_sponsor_transfer_timeout: 15, 1545 }));15461547 assert_ok!(TemplateModule::create_collection(1548 origin1.clone(),1549 col_name1.clone(),1550 col_desc1.clone(),1551 token_prefix1.clone(),1552 mode1553 ));15541555 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1556 assert_ok!(TemplateModule::remove_from_white_list(1557 origin1.clone(),1558 1,1559 21560 ));1561 assert_eq!(TemplateModule::white_list(1).len(), 0);1562 });1563}15641565#[test]1566fn admin_can_remove_address_from_white_list() {1567 new_test_ext().execute_with(|| {1568 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1569 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1570 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1571 let mode: CollectionMode = CollectionMode::NFT(2000);1572 let origin1 = Origin::signed(1);1573 let origin2 = Origin::signed(2);15741575 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1576 collection_numbers_limit: 10,1577 account_token_ownership_limit: 10,1578 collections_admins_limit: 5,1579 custom_data_limit: 2048,1580 nft_sponsor_transfer_timeout: 15,1581 fungible_sponsor_transfer_timeout: 15,1582 refungible_sponsor_transfer_timeout: 15, 1583 }));15841585 assert_ok!(TemplateModule::create_collection(1586 origin1.clone(),1587 col_name1.clone(),1588 col_desc1.clone(),1589 token_prefix1.clone(),1590 mode1591 ));15921593 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));15941595 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));1596 assert_ok!(TemplateModule::remove_from_white_list(1597 origin2.clone(),1598 1,1599 31600 ));1601 assert_eq!(TemplateModule::white_list(1).len(), 0);1602 });1603}16041605#[test]1606fn nonprivileged_user_cannot_remove_address_from_white_list() {1607 new_test_ext().execute_with(|| {1608 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1609 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1610 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1611 let mode: CollectionMode = CollectionMode::NFT(2000);1612 let origin1 = Origin::signed(1);1613 let origin2 = Origin::signed(2);16141615 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1616 collection_numbers_limit: 10,1617 account_token_ownership_limit: 10,1618 collections_admins_limit: 5,1619 custom_data_limit: 2048,1620 nft_sponsor_transfer_timeout: 15,1621 fungible_sponsor_transfer_timeout: 15,1622 refungible_sponsor_transfer_timeout: 15, 1623 }));16241625 assert_ok!(TemplateModule::create_collection(1626 origin1.clone(),1627 col_name1.clone(),1628 col_desc1.clone(),1629 token_prefix1.clone(),1630 mode1631 ));16321633 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1634 assert_noop!(1635 TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),1636 "You do not have permissions to modify this collection"1637 );1638 assert_eq!(TemplateModule::white_list(1)[0], 2);1639 });1640}16411642#[test]1643fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {1644 new_test_ext().execute_with(|| {1645 let origin1 = Origin::signed(1);16461647 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1648 collection_numbers_limit: 10,1649 account_token_ownership_limit: 10,1650 collections_admins_limit: 5,1651 custom_data_limit: 2048,1652 nft_sponsor_transfer_timeout: 15,1653 fungible_sponsor_transfer_timeout: 15,1654 refungible_sponsor_transfer_timeout: 15, 1655 }));16561657 assert_noop!(1658 TemplateModule::remove_from_white_list(origin1.clone(), 1, 2),1659 "This collection does not exist"1660 );1661 });1662}16631664#[test]1665fn nobody_can_remove_address_from_white_list_of_deleted_collection() {1666 new_test_ext().execute_with(|| {1667 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1668 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1669 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1670 let mode: CollectionMode = CollectionMode::NFT(2000);1671 let origin1 = Origin::signed(1);1672 let origin2 = Origin::signed(2);16731674 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1675 collection_numbers_limit: 10,1676 account_token_ownership_limit: 10,1677 collections_admins_limit: 5,1678 custom_data_limit: 2048,1679 nft_sponsor_transfer_timeout: 15,1680 fungible_sponsor_transfer_timeout: 15,1681 refungible_sponsor_transfer_timeout: 15, 1682 }));16831684 assert_ok!(TemplateModule::create_collection(1685 origin1.clone(),1686 col_name1.clone(),1687 col_desc1.clone(),1688 token_prefix1.clone(),1689 mode1690 ));16911692 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1693 assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));1694 assert_noop!(1695 TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),1696 "This collection does not exist"1697 );1698 assert_eq!(TemplateModule::white_list(1).len(), 0);1699 });1700}170117021703#[test]1704fn address_is_already_removed_from_white_list() {1705 new_test_ext().execute_with(|| {1706 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1707 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1708 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1709 let mode: CollectionMode = CollectionMode::NFT(2000);1710 let origin1 = Origin::signed(1);17111712 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1713 collection_numbers_limit: 10,1714 account_token_ownership_limit: 10,1715 collections_admins_limit: 5,1716 custom_data_limit: 2048,1717 nft_sponsor_transfer_timeout: 15,1718 fungible_sponsor_transfer_timeout: 15,1719 refungible_sponsor_transfer_timeout: 15, 1720 }));17211722 assert_ok!(TemplateModule::create_collection(1723 origin1.clone(),1724 col_name1.clone(),1725 col_desc1.clone(),1726 token_prefix1.clone(),1727 mode1728 ));17291730 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));1731 assert_ok!(TemplateModule::remove_from_white_list(1732 origin1.clone(),1733 1,1734 21735 ));1736 assert_ok!(TemplateModule::remove_from_white_list(1737 origin1.clone(),1738 1,1739 21740 ));1741 assert_eq!(TemplateModule::white_list(1).len(), 0);1742 });1743}174417451746#[test]1747fn white_list_test_1() {1748 new_test_ext().execute_with(|| {1749 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1750 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1751 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1752 let mode: CollectionMode = CollectionMode::NFT(2000);17531754 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1755 collection_numbers_limit: 10,1756 account_token_ownership_limit: 10,1757 collections_admins_limit: 5,1758 custom_data_limit: 2048,1759 nft_sponsor_transfer_timeout: 15,1760 fungible_sponsor_transfer_timeout: 15,1761 refungible_sponsor_transfer_timeout: 15, 1762 }));17631764 let origin1 = Origin::signed(1);1765 assert_ok!(TemplateModule::create_collection(1766 origin1.clone(),1767 col_name1.clone(),1768 col_desc1.clone(),1769 token_prefix1.clone(),1770 mode1771 ));1772 assert_eq!(TemplateModule::collection(1).owner, 1);17731774 assert_ok!(TemplateModule::create_item(1775 origin1.clone(),1776 1,1777 [1, 2, 3].to_vec(),1778 11779 ));17801781 assert_ok!(TemplateModule::set_public_access_mode(1782 origin1.clone(),1783 1,1784 AccessMode::WhiteList1785 ));1786 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));17871788 assert_noop!(1789 TemplateModule::transfer(origin1.clone(), 3, 1, 1, 1),1790 "Address is not in white list"1791 );1792 });1793}17941795#[test]1796fn white_list_test_2() {1797 new_test_ext().execute_with(|| {1798 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1799 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1800 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1801 let mode: CollectionMode = CollectionMode::NFT(2000);18021803 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1804 collection_numbers_limit: 10,1805 account_token_ownership_limit: 10,1806 collections_admins_limit: 5,1807 custom_data_limit: 2048,1808 nft_sponsor_transfer_timeout: 15,1809 fungible_sponsor_transfer_timeout: 15,1810 refungible_sponsor_transfer_timeout: 15, 1811 }));18121813 let origin1 = Origin::signed(1);1814 assert_ok!(TemplateModule::create_collection(1815 origin1.clone(),1816 col_name1.clone(),1817 col_desc1.clone(),1818 token_prefix1.clone(),1819 mode1820 ));1821 assert_eq!(TemplateModule::collection(1).owner, 1);18221823 assert_ok!(TemplateModule::create_item(1824 origin1.clone(),1825 1,1826 [1, 2, 3].to_vec(),1827 11828 ));18291830 assert_ok!(TemplateModule::set_public_access_mode(1831 origin1.clone(),1832 1,1833 AccessMode::WhiteList1834 ));1835 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1836 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));18371838 1839 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));1840 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);18411842 assert_ok!(TemplateModule::remove_from_white_list(1843 origin1.clone(),1844 1,1845 11846 ));18471848 assert_noop!(1849 TemplateModule::transfer_from(origin1.clone(), 1, 3, 1, 1, 1),1850 "Address is not in white list"1851 );1852 });1853}185418551856#[test]1857fn white_list_test_3() {1858 new_test_ext().execute_with(|| {1859 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1860 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1861 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1862 let mode: CollectionMode = CollectionMode::NFT(2000);18631864 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1865 collection_numbers_limit: 10,1866 account_token_ownership_limit: 10,1867 collections_admins_limit: 5,1868 custom_data_limit: 2048,1869 nft_sponsor_transfer_timeout: 15,1870 fungible_sponsor_transfer_timeout: 15,1871 refungible_sponsor_transfer_timeout: 15, 1872 }));18731874 let origin1 = Origin::signed(1);1875 assert_ok!(TemplateModule::create_collection(1876 origin1.clone(),1877 col_name1.clone(),1878 col_desc1.clone(),1879 token_prefix1.clone(),1880 mode1881 ));1882 assert_eq!(TemplateModule::collection(1).owner, 1);18831884 assert_ok!(TemplateModule::create_item(1885 origin1.clone(),1886 1,1887 [1, 2, 3].to_vec(),1888 11889 ));18901891 assert_ok!(TemplateModule::set_public_access_mode(1892 origin1.clone(),1893 1,1894 AccessMode::WhiteList1895 ));1896 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));18971898 assert_noop!(1899 TemplateModule::transfer(origin1.clone(), 3, 1, 1, 1),1900 "Address is not in white list"1901 );1902 });1903}19041905#[test]1906fn white_list_test_4() {1907 new_test_ext().execute_with(|| {1908 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1909 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1910 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1911 let mode: CollectionMode = CollectionMode::NFT(2000);19121913 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1914 collection_numbers_limit: 10,1915 account_token_ownership_limit: 10,1916 collections_admins_limit: 5,1917 custom_data_limit: 2048,1918 nft_sponsor_transfer_timeout: 15,1919 fungible_sponsor_transfer_timeout: 15,1920 refungible_sponsor_transfer_timeout: 15, 1921 }));19221923 let origin1 = Origin::signed(1);1924 assert_ok!(TemplateModule::create_collection(1925 origin1.clone(),1926 col_name1.clone(),1927 col_desc1.clone(),1928 token_prefix1.clone(),1929 mode1930 ));1931 assert_eq!(TemplateModule::collection(1).owner, 1);19321933 assert_ok!(TemplateModule::create_item(1934 origin1.clone(),1935 1,1936 [1, 2, 3].to_vec(),1937 11938 ));19391940 assert_ok!(TemplateModule::set_public_access_mode(1941 origin1.clone(),1942 1,1943 AccessMode::WhiteList1944 ));1945 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));1946 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));19471948 1949 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));1950 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);19511952 assert_ok!(TemplateModule::remove_from_white_list(1953 origin1.clone(),1954 1,1955 21956 ));19571958 assert_noop!(1959 TemplateModule::transfer_from(origin1.clone(), 1, 3, 1, 1, 1),1960 "Address is not in white list"1961 );1962 });1963}196419651966#[test]1967fn white_list_test_5() {1968 new_test_ext().execute_with(|| {1969 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();1970 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();1971 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();1972 let mode: CollectionMode = CollectionMode::NFT(2000);19731974 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 1975 collection_numbers_limit: 10,1976 account_token_ownership_limit: 10,1977 collections_admins_limit: 5,1978 custom_data_limit: 2048,1979 nft_sponsor_transfer_timeout: 15,1980 fungible_sponsor_transfer_timeout: 15,1981 refungible_sponsor_transfer_timeout: 15, 1982 }));19831984 let origin1 = Origin::signed(1);1985 assert_ok!(TemplateModule::create_collection(1986 origin1.clone(),1987 col_name1.clone(),1988 col_desc1.clone(),1989 token_prefix1.clone(),1990 mode1991 ));1992 assert_eq!(TemplateModule::collection(1).owner, 1);19931994 assert_ok!(TemplateModule::create_item(1995 origin1.clone(),1996 1,1997 [1, 2, 3].to_vec(),1998 11999 ));20002001 assert_ok!(TemplateModule::set_public_access_mode(2002 origin1.clone(),2003 1,2004 AccessMode::WhiteList2005 ));2006 assert_noop!(2007 TemplateModule::burn_item(origin1.clone(), 1, 1),2008 "Address is not in white list"2009 );2010 });2011}201220132014#[test]2015fn white_list_test_6() {2016 new_test_ext().execute_with(|| {2017 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2018 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2019 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2020 let mode: CollectionMode = CollectionMode::NFT(2000);20212022 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2023 collection_numbers_limit: 10,2024 account_token_ownership_limit: 10,2025 collections_admins_limit: 5,2026 custom_data_limit: 2048,2027 nft_sponsor_transfer_timeout: 15,2028 fungible_sponsor_transfer_timeout: 15,2029 refungible_sponsor_transfer_timeout: 15, 2030 }));20312032 let origin1 = Origin::signed(1);2033 assert_ok!(TemplateModule::create_collection(2034 origin1.clone(),2035 col_name1.clone(),2036 col_desc1.clone(),2037 token_prefix1.clone(),2038 mode2039 ));2040 assert_ok!(TemplateModule::set_public_access_mode(2041 origin1.clone(),2042 1,2043 AccessMode::WhiteList2044 ));20452046 2047 assert_noop!(2048 TemplateModule::approve(origin1.clone(), 1, 1, 1),2049 "Address is not in white list"2050 );2051 });2052}2053205420552056#[test]2057fn white_list_test_7() {2058 new_test_ext().execute_with(|| {2059 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2060 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2061 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2062 let mode: CollectionMode = CollectionMode::NFT(2000);20632064 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2065 collection_numbers_limit: 10,2066 account_token_ownership_limit: 10,2067 collections_admins_limit: 5,2068 custom_data_limit: 2048,2069 nft_sponsor_transfer_timeout: 15,2070 fungible_sponsor_transfer_timeout: 15,2071 refungible_sponsor_transfer_timeout: 15, 2072 }));20732074 let origin1 = Origin::signed(1);2075 assert_ok!(TemplateModule::create_collection(2076 origin1.clone(),2077 col_name1.clone(),2078 col_desc1.clone(),2079 token_prefix1.clone(),2080 mode2081 ));2082 assert_eq!(TemplateModule::collection(1).owner, 1);20832084 assert_ok!(TemplateModule::create_item(2085 origin1.clone(),2086 1,2087 [1, 2, 3].to_vec(),2088 12089 ));20902091 assert_ok!(TemplateModule::set_public_access_mode(2092 origin1.clone(),2093 1,2094 AccessMode::WhiteList2095 ));2096 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));2097 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));20982099 assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1));2100 });2101}21022103#[test]2104fn white_list_test_8() {2105 new_test_ext().execute_with(|| {2106 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2107 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2108 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2109 let mode: CollectionMode = CollectionMode::NFT(2000);21102111 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2112 collection_numbers_limit: 10,2113 account_token_ownership_limit: 10,2114 collections_admins_limit: 5,2115 custom_data_limit: 2048,2116 nft_sponsor_transfer_timeout: 15,2117 fungible_sponsor_transfer_timeout: 15,2118 refungible_sponsor_transfer_timeout: 15, 2119 }));21202121 let origin1 = Origin::signed(1);2122 assert_ok!(TemplateModule::create_collection(2123 origin1.clone(),2124 col_name1.clone(),2125 col_desc1.clone(),2126 token_prefix1.clone(),2127 mode2128 ));2129 assert_eq!(TemplateModule::collection(1).owner, 1);21302131 assert_ok!(TemplateModule::create_item(2132 origin1.clone(),2133 1,2134 [1, 2, 3].to_vec(),2135 12136 ));21372138 assert_ok!(TemplateModule::set_public_access_mode(2139 origin1.clone(),2140 1,2141 AccessMode::WhiteList2142 ));2143 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));2144 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));21452146 2147 assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));2148 assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);21492150 assert_ok!(TemplateModule::transfer_from(2151 origin1.clone(),2152 1,2153 2,2154 1,2155 1,2156 12157 ));2158 });2159}216021612162#[test]2163fn white_list_test_9() {2164 new_test_ext().execute_with(|| {2165 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2166 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2167 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2168 let mode: CollectionMode = CollectionMode::NFT(2000);21692170 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2171 collection_numbers_limit: 10,2172 account_token_ownership_limit: 10,2173 collections_admins_limit: 5,2174 custom_data_limit: 2048,2175 nft_sponsor_transfer_timeout: 15,2176 fungible_sponsor_transfer_timeout: 15,2177 refungible_sponsor_transfer_timeout: 15, 2178 }));21792180 let origin1 = Origin::signed(1);2181 assert_ok!(TemplateModule::create_collection(2182 origin1.clone(),2183 col_name1.clone(),2184 col_desc1.clone(),2185 token_prefix1.clone(),2186 mode2187 ));21882189 assert_ok!(TemplateModule::set_public_access_mode(2190 origin1.clone(),2191 1,2192 AccessMode::WhiteList2193 ));2194 assert_ok!(TemplateModule::set_mint_permission(2195 origin1.clone(),2196 1,2197 false2198 ));21992200 assert_ok!(TemplateModule::create_item(2201 origin1.clone(),2202 1,2203 [1, 2, 3].to_vec(),2204 12205 ));2206 });2207}220822092210#[test]2211fn white_list_test_10() {2212 new_test_ext().execute_with(|| {2213 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2214 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2215 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2216 let mode: CollectionMode = CollectionMode::NFT(2000);22172218 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2219 collection_numbers_limit: 10,2220 account_token_ownership_limit: 10,2221 collections_admins_limit: 5,2222 custom_data_limit: 2048,2223 nft_sponsor_transfer_timeout: 15,2224 fungible_sponsor_transfer_timeout: 15,2225 refungible_sponsor_transfer_timeout: 15, 2226 }));22272228 let origin1 = Origin::signed(1);2229 let origin2 = Origin::signed(2);2230 assert_ok!(TemplateModule::create_collection(2231 origin1.clone(),2232 col_name1.clone(),2233 col_desc1.clone(),2234 token_prefix1.clone(),2235 mode2236 ));22372238 assert_ok!(TemplateModule::set_public_access_mode(2239 origin1.clone(),2240 1,2241 AccessMode::WhiteList2242 ));2243 assert_ok!(TemplateModule::set_mint_permission(2244 origin1.clone(),2245 1,2246 false2247 ));22482249 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));22502251 assert_ok!(TemplateModule::create_item(2252 origin2.clone(),2253 1,2254 [1, 2, 3].to_vec(),2255 22256 ));2257 });2258}225922602261#[test]2262fn white_list_test_11() {2263 new_test_ext().execute_with(|| {2264 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2265 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2266 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2267 let mode: CollectionMode = CollectionMode::NFT(2000);22682269 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2270 collection_numbers_limit: 10,2271 account_token_ownership_limit: 10,2272 collections_admins_limit: 5,2273 custom_data_limit: 2048,2274 nft_sponsor_transfer_timeout: 15,2275 fungible_sponsor_transfer_timeout: 15,2276 refungible_sponsor_transfer_timeout: 15, 2277 }));22782279 let origin1 = Origin::signed(1);2280 let origin2 = Origin::signed(2);2281 assert_ok!(TemplateModule::create_collection(2282 origin1.clone(),2283 col_name1.clone(),2284 col_desc1.clone(),2285 token_prefix1.clone(),2286 mode2287 ));22882289 assert_ok!(TemplateModule::set_public_access_mode(2290 origin1.clone(),2291 1,2292 AccessMode::WhiteList2293 ));2294 assert_ok!(TemplateModule::set_mint_permission(2295 origin1.clone(),2296 1,2297 false2298 ));2299 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));23002301 assert_noop!(2302 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2303 "Public minting is not allowed for this collection"2304 );2305 });2306}230723082309#[test]2310fn white_list_test_12() {2311 new_test_ext().execute_with(|| {2312 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2313 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2314 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2315 let mode: CollectionMode = CollectionMode::NFT(2000);23162317 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2318 collection_numbers_limit: 10,2319 account_token_ownership_limit: 10,2320 collections_admins_limit: 5,2321 custom_data_limit: 2048,2322 nft_sponsor_transfer_timeout: 15,2323 fungible_sponsor_transfer_timeout: 15,2324 refungible_sponsor_transfer_timeout: 15, 2325 }));23262327 let origin1 = Origin::signed(1);2328 let origin2 = Origin::signed(2);2329 assert_ok!(TemplateModule::create_collection(2330 origin1.clone(),2331 col_name1.clone(),2332 col_desc1.clone(),2333 token_prefix1.clone(),2334 mode2335 ));23362337 assert_ok!(TemplateModule::set_public_access_mode(2338 origin1.clone(),2339 1,2340 AccessMode::WhiteList2341 ));2342 assert_ok!(TemplateModule::set_mint_permission(2343 origin1.clone(),2344 1,2345 false2346 ));23472348 assert_noop!(2349 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2350 "Public minting is not allowed for this collection"2351 );2352 });2353}235423552356#[test]2357fn white_list_test_13() {2358 new_test_ext().execute_with(|| {2359 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2360 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2361 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2362 let mode: CollectionMode = CollectionMode::NFT(2000);23632364 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2365 collection_numbers_limit: 10,2366 account_token_ownership_limit: 10,2367 collections_admins_limit: 5,2368 custom_data_limit: 2048,2369 nft_sponsor_transfer_timeout: 15,2370 fungible_sponsor_transfer_timeout: 15,2371 refungible_sponsor_transfer_timeout: 15, 2372 }));23732374 let origin1 = Origin::signed(1);2375 assert_ok!(TemplateModule::create_collection(2376 origin1.clone(),2377 col_name1.clone(),2378 col_desc1.clone(),2379 token_prefix1.clone(),2380 mode2381 ));23822383 assert_ok!(TemplateModule::set_public_access_mode(2384 origin1.clone(),2385 1,2386 AccessMode::WhiteList2387 ));2388 assert_ok!(TemplateModule::set_mint_permission(2389 origin1.clone(),2390 1,2391 true2392 ));23932394 assert_ok!(TemplateModule::create_item(2395 origin1.clone(),2396 1,2397 [1, 2, 3].to_vec(),2398 12399 ));2400 });2401}240224032404#[test]2405fn white_list_test_14() {2406 new_test_ext().execute_with(|| {2407 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2408 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2409 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2410 let mode: CollectionMode = CollectionMode::NFT(2000);24112412 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2413 collection_numbers_limit: 10,2414 account_token_ownership_limit: 10,2415 collections_admins_limit: 5,2416 custom_data_limit: 2048,2417 nft_sponsor_transfer_timeout: 15,2418 fungible_sponsor_transfer_timeout: 15,2419 refungible_sponsor_transfer_timeout: 15, 2420 }));24212422 let origin1 = Origin::signed(1);2423 let origin2 = Origin::signed(2);2424 assert_ok!(TemplateModule::create_collection(2425 origin1.clone(),2426 col_name1.clone(),2427 col_desc1.clone(),2428 token_prefix1.clone(),2429 mode2430 ));24312432 assert_ok!(TemplateModule::set_public_access_mode(2433 origin1.clone(),2434 1,2435 AccessMode::WhiteList2436 ));2437 assert_ok!(TemplateModule::set_mint_permission(2438 origin1.clone(),2439 1,2440 true2441 ));24422443 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));24442445 assert_ok!(TemplateModule::create_item(2446 origin2.clone(),2447 1,2448 [1, 2, 3].to_vec(),2449 22450 ));2451 });2452}245324542455#[test]2456fn white_list_test_15() {2457 new_test_ext().execute_with(|| {2458 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2459 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2460 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2461 let mode: CollectionMode = CollectionMode::NFT(2000);24622463 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2464 collection_numbers_limit: 10,2465 account_token_ownership_limit: 10,2466 collections_admins_limit: 5,2467 custom_data_limit: 2048,2468 nft_sponsor_transfer_timeout: 15,2469 fungible_sponsor_transfer_timeout: 15,2470 refungible_sponsor_transfer_timeout: 15, 2471 }));24722473 let origin1 = Origin::signed(1);2474 let origin2 = Origin::signed(2);2475 assert_ok!(TemplateModule::create_collection(2476 origin1.clone(),2477 col_name1.clone(),2478 col_desc1.clone(),2479 token_prefix1.clone(),2480 mode2481 ));24822483 assert_ok!(TemplateModule::set_public_access_mode(2484 origin1.clone(),2485 1,2486 AccessMode::WhiteList2487 ));2488 assert_ok!(TemplateModule::set_mint_permission(2489 origin1.clone(),2490 1,2491 true2492 ));24932494 assert_noop!(2495 TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),2496 "Address is not in white list"2497 );2498 });2499}250025012502#[test]2503fn white_list_test_16() {2504 new_test_ext().execute_with(|| {2505 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2506 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2507 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2508 let mode: CollectionMode = CollectionMode::NFT(2000);25092510 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2511 collection_numbers_limit: 10,2512 account_token_ownership_limit: 10,2513 collections_admins_limit: 5,2514 custom_data_limit: 2048,2515 nft_sponsor_transfer_timeout: 15,2516 fungible_sponsor_transfer_timeout: 15,2517 refungible_sponsor_transfer_timeout: 15, 2518 }));25192520 let origin1 = Origin::signed(1);2521 let origin2 = Origin::signed(2);2522 assert_ok!(TemplateModule::create_collection(2523 origin1.clone(),2524 col_name1.clone(),2525 col_desc1.clone(),2526 token_prefix1.clone(),2527 mode2528 ));25292530 assert_ok!(TemplateModule::set_public_access_mode(2531 origin1.clone(),2532 1,2533 AccessMode::WhiteList2534 ));2535 assert_ok!(TemplateModule::set_mint_permission(2536 origin1.clone(),2537 1,2538 true2539 ));2540 assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));25412542 assert_ok!(TemplateModule::create_item(2543 origin2.clone(),2544 1,2545 [1, 2, 3].to_vec(),2546 22547 ));2548 });2549}255025512552#[test]2553fn total_number_collections_bound() {2554 new_test_ext().execute_with(|| {2555 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2556 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2557 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2558 let mode: CollectionMode = CollectionMode::NFT(2000);25592560 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2561 collection_numbers_limit: 10,2562 account_token_ownership_limit: 10,2563 collections_admins_limit: 5,2564 custom_data_limit: 2048,2565 nft_sponsor_transfer_timeout: 15,2566 fungible_sponsor_transfer_timeout: 15,2567 refungible_sponsor_transfer_timeout: 15, 2568 }));25692570 let origin1 = Origin::signed(1);2571 assert_ok!(TemplateModule::create_collection(2572 origin1.clone(),2573 col_name1.clone(),2574 col_desc1.clone(),2575 token_prefix1.clone(),2576 mode2577 ));2578 });2579}258025812582#[test]2583fn total_number_collections_bound_neg() {2584 new_test_ext().execute_with(|| {2585 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2586 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2587 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2588 let mode: CollectionMode = CollectionMode::NFT(2000);25892590 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2591 collection_numbers_limit: 10,2592 account_token_ownership_limit: 10,2593 collections_admins_limit: 5,2594 custom_data_limit: 2048,2595 nft_sponsor_transfer_timeout: 15,2596 fungible_sponsor_transfer_timeout: 15,2597 refungible_sponsor_transfer_timeout: 15, 2598 }));25992600 let origin1 = Origin::signed(1);26012602 for _ in 0..10 {26032604 assert_ok!(TemplateModule::create_collection(2605 origin1.clone(),2606 col_name1.clone(),2607 col_desc1.clone(),2608 token_prefix1.clone(),2609 mode.clone()2610 ));2611 }26122613 2614 assert_noop!(TemplateModule::create_collection(2615 origin1.clone(),2616 col_name1.clone(),2617 col_desc1.clone(),2618 token_prefix1.clone(),2619 mode.clone()2620 ), "Total collections bound exceeded");2621 });2622}262326242625#[test]2626fn owned_tokens_bound() {2627 new_test_ext().execute_with(|| {2628 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2629 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2630 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2631 let mode: CollectionMode = CollectionMode::NFT(2000);26322633 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2634 collection_numbers_limit: 10,2635 account_token_ownership_limit: 10,2636 collections_admins_limit: 5,2637 custom_data_limit: 2048,2638 nft_sponsor_transfer_timeout: 15,2639 fungible_sponsor_transfer_timeout: 15,2640 refungible_sponsor_transfer_timeout: 15, 2641 }));26422643 let origin1 = Origin::signed(1);2644 assert_ok!(TemplateModule::create_collection(2645 origin1.clone(),2646 col_name1.clone(),2647 col_desc1.clone(),2648 token_prefix1.clone(),2649 mode2650 ));26512652 assert_ok!(TemplateModule::create_item(2653 origin1.clone(),2654 1,2655 [1, 2, 3].to_vec(),2656 12657 ));26582659 assert_ok!(TemplateModule::create_item(2660 origin1.clone(),2661 1,2662 [1, 2, 3].to_vec(),2663 12664 ));2665 });2666}266726682669#[test]2670fn owned_tokens_bound_neg() {2671 new_test_ext().execute_with(|| {2672 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2673 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2674 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2675 let mode: CollectionMode = CollectionMode::NFT(2000);26762677 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2678 collection_numbers_limit: 10,2679 account_token_ownership_limit: 1,2680 collections_admins_limit: 5,2681 custom_data_limit: 2048,2682 nft_sponsor_transfer_timeout: 15,2683 fungible_sponsor_transfer_timeout: 15,2684 refungible_sponsor_transfer_timeout: 15, 2685 }));26862687 let origin1 = Origin::signed(1);2688 assert_ok!(TemplateModule::create_collection(2689 origin1.clone(),2690 col_name1.clone(),2691 col_desc1.clone(),2692 token_prefix1.clone(),2693 mode2694 ));26952696 assert_ok!(TemplateModule::create_item(2697 origin1.clone(),2698 1,2699 [1, 2, 3].to_vec(),2700 12701 ));27022703 assert_noop!(TemplateModule::create_item(2704 origin1.clone(),2705 1,2706 [1, 2, 3].to_vec(),2707 12708 ), "Owned tokens by a single address bound exceeded");2709 });2710}271127122713#[test]2714fn collection_admins_bound() {2715 new_test_ext().execute_with(|| {2716 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2717 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2718 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2719 let mode: CollectionMode = CollectionMode::NFT(2000);27202721 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2722 collection_numbers_limit: 10,2723 account_token_ownership_limit: 10,2724 collections_admins_limit: 2,2725 custom_data_limit: 2048,2726 nft_sponsor_transfer_timeout: 15,2727 fungible_sponsor_transfer_timeout: 15,2728 refungible_sponsor_transfer_timeout: 15, 2729 }));27302731 let origin1 = Origin::signed(1);2732 assert_ok!(TemplateModule::create_collection(2733 origin1.clone(),2734 col_name1.clone(),2735 col_desc1.clone(),2736 token_prefix1.clone(),2737 mode2738 ));27392740 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));2741 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));2742 });2743}274427452746#[test]2747fn collection_admins_bound_neg() {2748 new_test_ext().execute_with(|| {2749 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2750 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2751 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2752 let mode: CollectionMode = CollectionMode::NFT(2000);27532754 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2755 collection_numbers_limit: 10,2756 account_token_ownership_limit: 1,2757 collections_admins_limit: 1,2758 custom_data_limit: 2048,2759 nft_sponsor_transfer_timeout: 15,2760 fungible_sponsor_transfer_timeout: 15,2761 refungible_sponsor_transfer_timeout: 15, 2762 }));27632764 let origin1 = Origin::signed(1);2765 assert_ok!(TemplateModule::create_collection(2766 origin1.clone(),2767 col_name1.clone(),2768 col_desc1.clone(),2769 token_prefix1.clone(),2770 mode2771 ));27722773 assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));2774 assert_noop!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3), "Number of collection admins bound exceeded");2775 });2776}277727782779#[test]2780fn custom_data_size_bound() {2781 new_test_ext().execute_with(|| {2782 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2783 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2784 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2785 let mode: CollectionMode = CollectionMode::NFT(2000);27862787 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2788 collection_numbers_limit: 10,2789 account_token_ownership_limit: 10,2790 collections_admins_limit: 5,2791 custom_data_limit: 2048,2792 nft_sponsor_transfer_timeout: 15,2793 fungible_sponsor_transfer_timeout: 15,2794 refungible_sponsor_transfer_timeout: 15, 2795 }));27962797 let origin1 = Origin::signed(1);2798 assert_ok!(TemplateModule::create_collection(2799 origin1.clone(),2800 col_name1.clone(),2801 col_desc1.clone(),2802 token_prefix1.clone(),2803 mode2804 ));2805 });2806}280728082809#[test]2810fn custom_data_size_bound_neg() {2811 new_test_ext().execute_with(|| {2812 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2813 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2814 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();2815 let mode: CollectionMode = CollectionMode::NFT(2000);28162817 assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 2818 collection_numbers_limit: 10,2819 account_token_ownership_limit: 10,2820 collections_admins_limit: 5,2821 custom_data_limit: 200,2822 nft_sponsor_transfer_timeout: 15,2823 fungible_sponsor_transfer_timeout: 15,2824 refungible_sponsor_transfer_timeout: 15, 2825 }));28262827 let origin1 = Origin::signed(1);2828 assert_noop!(TemplateModule::create_collection(2829 origin1.clone(),2830 col_name1.clone(),2831 col_desc1.clone(),2832 token_prefix1.clone(),2833 mode2834 ), "Custom data size bound exceeded");2835 });2836}2837