git.delta.rocks / unique-network / refs/commits / 6d406a445076

difftreelog

source

pallets/nft/src/tests.rs97.3 KiBsourcehistory
1// Tests to be written here2use crate::mock::*;3use crate::{AccessMode, ApprovePermissions, CollectionMode, Ownership, ChainLimits};4use frame_support::{assert_noop, assert_ok};5use frame_system::{ RawOrigin };67// Use cases tests region8// #region9#[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        // change owner scenario175        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        // assert_eq!(TemplateModule::address_tokens(1, 1), []);181        assert_eq!(TemplateModule::address_tokens(1, 2), [1]);182183        // split item scenario184        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        // split item and new owner has account scenario193        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        // change owner scenario253        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        // assert_eq!(TemplateModule::address_tokens(1, 1), []);264        assert_eq!(TemplateModule::address_tokens(1, 2), [1]);265266        // split item scenario267        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        // split item and new owner has account scenario288        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        // default scenario349        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        // assert_eq!(TemplateModule::address_tokens(1, 1), []);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        // neg transfer398        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        // do approve407        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        // do approve483        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        // do approve571        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        // do approve661        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        // assert_eq!(TemplateModule::address_tokens(1, 1), []);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        // check balance (collection with id = 1, user id = 1)815        assert_eq!(TemplateModule::balance_count(1, 1), 1);816817        // burn item818        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        // check balance (collection with id = 1, user id = 1)863        assert_eq!(TemplateModule::balance_count(1, 1), 1000);864865        // burn item866        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        // check balance (collection with id = 1, user id = 2)930        assert_eq!(TemplateModule::balance_count(1, 1), 1000);931932        // burn item933        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        // collection admin991        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        // collection admin1048        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        // remove admin1055        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        // check balance before1113        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        // create item1118        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        // check balance (collection with id = 1, user id = 1)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        // create item1179        assert_ok!(TemplateModule::create_item(1180            origin1.clone(),1181            1,1182            [1, 1, 1].to_vec(),1183            11184        ));11851186        // approve1187        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        // create item1223        assert_ok!(TemplateModule::create_item(1224            origin1.clone(),1225            1,1226            [1, 1, 1].to_vec(),1227            11228        ));12291230        // approve1231        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        // after transfer1258        assert_eq!(TemplateModule::balance_count(1, 1), 0);1259        assert_eq!(TemplateModule::balance_count(1, 2), 1);1260    });1261}12621263// #endregion12641265// Coverage tests region1266// #region12671268#[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}14251426// If address is already added to white list, nothing happens1427#[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}16341635// If address is already removed from white list, nothing happens1636#[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}16771678// If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom (2 tests)1679#[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        // do approve1772        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}17871788// If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom (2 tests)1789#[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        // do approve1882        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}18971898// If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)1899#[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}19451946// If Public Access mode is set to WhiteList, oken transfers can’t be Approved by a non-whitelisted address (see Approve method).1947#[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        // do approve1980        assert_noop!(1981            TemplateModule::approve(origin1.clone(), 1, 1, 1),1982            "Address is not in white list"1983        );1984    });1985}19861987// If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer or transferFrom (2 tests) and1988//          tokens can be transferred from a whitelisted address with transfer or transferFrom (2 tests)1989#[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        // do approve2080        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}20932094// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner.2095#[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}21412142// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin.2143#[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}21922193// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white listed address.2194#[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}22402241// If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address.2242#[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}22872288// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner.2289#[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}23352336// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin.2337#[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}23862387// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address.2388#[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}24332434// If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address.2435#[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}24832484// Total number of collections. Positive test2485#[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}25132514// Total number of collections. Negotive test2515#[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        // 11-th collection in chain. Expects error2547        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}25562557// Owned tokens by a single address. Positive test2558#[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}26002601// Owned tokens by a single address. Negotive test2602#[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}26442645// Number of collection admins. Positive test2646#[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}26772678// Number of collection admins. Negotive test2679#[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}27102711// Custom data size. Positive test2712#[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}27402741// Custom data size. Negotive test2742#[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// #endregion