git.delta.rocks / unique-network / refs/commits / d96245d01eab

difftreelog

source

pallets/nft/src/tests.rs29.8 KiBsourcehistory
1// Tests to be written here2use crate::mock::*;3use crate::{CollectionMode, Ownership, ApprovePermissions};4use frame_support::{assert_noop, assert_ok};56#[test]7fn create_nft_item() {8    new_test_ext().execute_with(|| {9        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();10        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();11        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();12        let mode: CollectionMode = CollectionMode::NFT(2000);1314        let origin1 = Origin::signed(1);15        assert_ok!(TemplateModule::create_collection(16            origin1.clone(),17            col_name1.clone(),18            col_desc1.clone(),19            token_prefix1.clone(),20            mode21        ));22        assert_eq!(TemplateModule::collection(1).owner, 1);232425        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));26        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());27    });28}2930#[test]31fn create_refungible_item() {32    new_test_ext().execute_with(|| {33        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();34        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();35        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();36        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);3738        let origin1 = Origin::signed(1);39        assert_ok!(TemplateModule::create_collection(40            origin1.clone(),41            col_name1.clone(),42            col_desc1.clone(),43            token_prefix1.clone(),44            mode45        ));46        assert_eq!(TemplateModule::collection(1).owner, 1);474849        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));50        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());51        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });52    });53}5455#[test]56fn create_fungible_item() {57    new_test_ext().execute_with(|| {58        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();59        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();60        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();61        let mode: CollectionMode = CollectionMode::Fungible(3);6263        let origin1 = Origin::signed(1);64        assert_ok!(TemplateModule::create_collection(65            origin1.clone(),66            col_name1.clone(),67            col_desc1.clone(),68            token_prefix1.clone(),69            mode70        ));71        assert_eq!(TemplateModule::collection(1).owner, 1);7273        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));74        assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);75        assert_eq!(TemplateModule::balance_count(1,1), 1000);76        assert_eq!(TemplateModule::address_tokens(1,1), [1]);77    });78}7980#[test]81fn transfer_fungible_item() {82    new_test_ext().execute_with(|| {83        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();84        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();85        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();86        let mode: CollectionMode = CollectionMode::Fungible(3);8788        let origin1 = Origin::signed(1);89        let origin2 = Origin::signed(2);90        assert_ok!(TemplateModule::create_collection(91            origin1.clone(),92            col_name1.clone(),93            col_desc1.clone(),94            token_prefix1.clone(),95            mode96        ));97        assert_eq!(TemplateModule::collection(1).owner, 1);9899        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));100        assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);101        assert_eq!(TemplateModule::balance_count(1,1), 1000);102        assert_eq!(TemplateModule::address_tokens(1,1), [1]);103104        // change owner scenario105        assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));106        assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);107        assert_eq!(TemplateModule::fungible_item_id(1,1).value, 1000);108        assert_eq!(TemplateModule::balance_count(1,1), 0);109        assert_eq!(TemplateModule::balance_count(1,2), 1000);110        assert_eq!(TemplateModule::address_tokens(1,1), []);111        assert_eq!(TemplateModule::address_tokens(1,2), [1]);112113        // split item scenario114        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));115        assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 2);116        assert_eq!(TemplateModule::fungible_item_id(1,2).owner, 3);117        assert_eq!(TemplateModule::balance_count(1,2), 500);118        assert_eq!(TemplateModule::balance_count(1,3), 500);119        assert_eq!(TemplateModule::address_tokens(1,2), [1]);120        assert_eq!(TemplateModule::address_tokens(1,3), [2]);121122        // split item and new owner has account scenario123        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));124        assert_eq!(TemplateModule::fungible_item_id(1,1).value, 300);125        assert_eq!(TemplateModule::fungible_item_id(1,2).value, 700);126        assert_eq!(TemplateModule::balance_count(1,2), 300);127        assert_eq!(TemplateModule::balance_count(1,3), 700);128        assert_eq!(TemplateModule::address_tokens(1,2), [1]);129        assert_eq!(TemplateModule::address_tokens(1,3), [2]);130    });131}132133#[test]134fn transfer_refungible_item() {135    new_test_ext().execute_with(|| {136        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();137        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();138        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();139        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);140141        let origin1 = Origin::signed(1);142        let origin2 = Origin::signed(2);143        assert_ok!(TemplateModule::create_collection(144            origin1.clone(),145            col_name1.clone(),146            col_desc1.clone(),147            token_prefix1.clone(),148            mode149        ));150        assert_eq!(TemplateModule::collection(1).owner, 1);151152        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));153        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());154        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });155        assert_eq!(TemplateModule::balance_count(1,1), 1000);156        assert_eq!(TemplateModule::address_tokens(1,1), [1]);157158        // change owner scenario159        assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));160        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 1000 });161        assert_eq!(TemplateModule::balance_count(1,1), 0);162        assert_eq!(TemplateModule::balance_count(1,2), 1000);163        assert_eq!(TemplateModule::address_tokens(1,1), []);164        assert_eq!(TemplateModule::address_tokens(1,2), [1]);165166        // split item scenario167        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 500));168        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 500 });169        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 500 });170        assert_eq!(TemplateModule::balance_count(1,2), 500);171        assert_eq!(TemplateModule::balance_count(1,3), 500);172        assert_eq!(TemplateModule::address_tokens(1,2), [1]);173        assert_eq!(TemplateModule::address_tokens(1,3), [1]);174175        // split item and new owner has account scenario176        assert_ok!(TemplateModule::transfer(origin2.clone(), 3, 1, 1, 200));177        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 2, fraction: 300 });178        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[1], Ownership { owner: 3, fraction: 700 });179        assert_eq!(TemplateModule::balance_count(1,2), 300);180        assert_eq!(TemplateModule::balance_count(1,3), 700);181        assert_eq!(TemplateModule::address_tokens(1,2), [1]);182        assert_eq!(TemplateModule::address_tokens(1,3), [1]);183    });184}185186#[test]187fn transfer_nft_item() {188    new_test_ext().execute_with(|| {189        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();190        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();191        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();192        let mode: CollectionMode = CollectionMode::NFT(2000);193194        let origin1 = Origin::signed(1);195        assert_ok!(TemplateModule::create_collection(196            origin1.clone(),197            col_name1.clone(),198            col_desc1.clone(),199            token_prefix1.clone(),200            mode201        ));202        assert_eq!(TemplateModule::collection(1).owner, 1);203204205        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));206        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());207        assert_eq!(TemplateModule::balance_count(1,1), 1);208        assert_eq!(TemplateModule::address_tokens(1,1), [1]);209210        // default scenario211        assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));212        assert_eq!(TemplateModule::nft_item_id(1,1).owner, 2);213        assert_eq!(TemplateModule::balance_count(1,1), 0);214        assert_eq!(TemplateModule::balance_count(1,2), 1);215        assert_eq!(TemplateModule::address_tokens(1,1), []);216        assert_eq!(TemplateModule::address_tokens(1,2), [1]); 217    });218}219220#[test]221fn nft_approve_and_transfer_from() {222    new_test_ext().execute_with(|| {223        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();224        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();225        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();226        let mode: CollectionMode = CollectionMode::NFT(2000);227228        let origin1 = Origin::signed(1);229        let origin2 = Origin::signed(2);230        assert_ok!(TemplateModule::create_collection(231            origin1.clone(),232            col_name1.clone(),233            col_desc1.clone(),234            token_prefix1.clone(),235            mode236        ));237        assert_eq!(TemplateModule::collection(1).owner, 1);238239240        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));241        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());242        assert_eq!(TemplateModule::balance_count(1,1), 1);243        assert_eq!(TemplateModule::address_tokens(1,1), [1]);244245        assert_noop!(246            TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),247            "You do not have permissions to modify this collection"248        );249250        // do approve251        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));252        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);253        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));254        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);255        assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});256257        assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1));258        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);259    });260}261262#[test]263fn refungible_approve_and_transfer_from() {264    new_test_ext().execute_with(|| {265        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();266        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();267        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();268        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);269270        let origin1 = Origin::signed(1);271        let origin2 = Origin::signed(2);272        assert_ok!(TemplateModule::create_collection(273            origin1.clone(),274            col_name1.clone(),275            col_desc1.clone(),276            token_prefix1.clone(),277            mode278        ));279        assert_eq!(TemplateModule::collection(1).owner, 1);280281        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [1,2,3].to_vec(), 1));282        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());283        assert_eq!(TemplateModule::refungible_item_id(1,1).owner[0], Ownership { owner: 1, fraction: 1000 });284        assert_eq!(TemplateModule::balance_count(1,1), 1000);285        assert_eq!(TemplateModule::address_tokens(1,1), [1]);286287        assert_noop!(288            TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),289            "You do not have permissions to modify this collection"290        );291292        // do approve293        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));294        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);295        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));296        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);297        assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});298299        assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));300        assert_eq!(TemplateModule::balance_count(1,1), 900);301        assert_eq!(TemplateModule::balance_count(1,3), 100);302        assert_eq!(TemplateModule::address_tokens(1,1), [1]);303        assert_eq!(TemplateModule::address_tokens(1,3), [1]);304305        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);306        assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});307    });308}309310#[test]311fn fungible_approve_and_transfer_from() {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::Fungible(3);317318        let origin1 = Origin::signed(1);319        let origin2 = Origin::signed(2);320        assert_ok!(TemplateModule::create_collection(321            origin1.clone(),322            col_name1.clone(),323            col_desc1.clone(),324            token_prefix1.clone(),325            mode326        ));327        assert_eq!(TemplateModule::collection(1).owner, 1);328329        assert_ok!(TemplateModule::create_item(origin1.clone(), 1, [].to_vec(), 1));330        assert_eq!(TemplateModule::fungible_item_id(1,1).owner, 1);331        assert_eq!(TemplateModule::balance_count(1,1), 1000);332        assert_eq!(TemplateModule::address_tokens(1,1), [1]);333334        assert_noop!(335            TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 1),336            "You do not have permissions to modify this collection"337        );338339        // do approve340        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));341        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);342        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));343        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 2);344        assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 2, amount: 100000000});345346        assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 100));347        assert_eq!(TemplateModule::balance_count(1,1), 900);348        assert_eq!(TemplateModule::balance_count(1,3), 100);349        assert_eq!(TemplateModule::address_tokens(1,1), [1]);350        assert_eq!(TemplateModule::address_tokens(1,3), [2]);351352        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 1);353        assert_eq!(TemplateModule::approved(1,(1,1))[0], ApprovePermissions { approved: 10, amount: 100000000});354355        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));356        assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 3, 1, 1, 900));357        assert_eq!(TemplateModule::balance_count(1,1), 0);358        assert_eq!(TemplateModule::balance_count(1,3), 1000);359        assert_eq!(TemplateModule::address_tokens(1,1), []);360        assert_eq!(TemplateModule::address_tokens(1,3), [2]);361362        assert_eq!(TemplateModule::approved(1,(1,1)).len(), 0);363    });364}365366#[test]367fn change_collection_owner() {368    new_test_ext().execute_with(|| {369        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();370        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();371        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();372        let mode: CollectionMode = CollectionMode::NFT(2000);373374        let origin1 = Origin::signed(1);375        assert_ok!(TemplateModule::create_collection(376            origin1.clone(),377            col_name1.clone(),378            col_desc1.clone(),379            token_prefix1.clone(),380            mode381        ));382        assert_ok!(TemplateModule::change_collection_owner(383            origin1.clone(),384            1,385            2386        ));387        assert_eq!(TemplateModule::collection(1).owner, 2);388    });389}390391#[test]392fn destroy_collection() {393    new_test_ext().execute_with(|| {394        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();395        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();396        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();397        let mode: CollectionMode = CollectionMode::NFT(2000);398399        let origin1 = Origin::signed(1);400        assert_ok!(TemplateModule::create_collection(401            origin1.clone(),402            col_name1.clone(),403            col_desc1.clone(),404            token_prefix1.clone(),405            mode406        ));407        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));408    });409}410411#[test]412fn burn_nft_item() {413    new_test_ext().execute_with(|| {414        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();415        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();416        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();417        let mode: CollectionMode = CollectionMode::NFT(2000);418419        let origin1 = Origin::signed(1);420        let origin2 = Origin::signed(2);421        assert_ok!(TemplateModule::create_collection(422            origin1.clone(),423            col_name1.clone(),424            col_desc1.clone(),425            token_prefix1.clone(),426            mode427        ));428        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));429        assert_ok!(TemplateModule::create_item(430            origin2.clone(),431            1,432            [1, 2, 3].to_vec(),433            1434        ));435436        assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());437438        // check balance (collection with id = 1, user id = 1)439        assert_eq!(TemplateModule::balance_count(1, 1), 1);440441        // burn item442        assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));443        assert_noop!(444            TemplateModule::burn_item(origin1.clone(), 1, 1),445            "Item does not exists"446        );447448        assert_eq!(TemplateModule::balance_count(1, 1), 0);449    });450}451452#[test]453fn burn_fungible_item() {454    new_test_ext().execute_with(|| {455        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();456        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();457        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();458        let mode: CollectionMode = CollectionMode::Fungible(3);459460        let origin1 = Origin::signed(1);461        let origin2 = Origin::signed(2);462        assert_ok!(TemplateModule::create_collection(463            origin1.clone(),464            col_name1.clone(),465            col_desc1.clone(),466            token_prefix1.clone(),467            mode468        ));469        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));470        assert_ok!(TemplateModule::create_item(471            origin2.clone(),472            1,473            [].to_vec(),474            1475        ));476477        // check balance (collection with id = 1, user id = 1)478        assert_eq!(TemplateModule::balance_count(1, 1), 1000);479480        // burn item481        assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));482        assert_noop!(483            TemplateModule::burn_item(origin1.clone(), 1, 1),484            "Item does not exists"485        );486487        assert_eq!(TemplateModule::balance_count(1, 1), 0);488    });489}490491#[test]492fn burn_refungible_item() {493    new_test_ext().execute_with(|| {494        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();495        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();496        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();497        let mode: CollectionMode = CollectionMode::ReFungible(200, 3);498499        let origin1 = Origin::signed(1);500        let origin2 = Origin::signed(2);501        assert_ok!(TemplateModule::create_collection(502            origin1.clone(),503            col_name1.clone(),504            col_desc1.clone(),505            token_prefix1.clone(),506            mode507        ));508        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));509        assert_ok!(TemplateModule::create_item(510            origin2.clone(),511            1,512            [1,2,3].to_vec(),513            1514        ));515516        assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());517518        // check balance (collection with id = 1, user id = 2)519        assert_eq!(TemplateModule::balance_count(1, 1), 1000);520521        // burn item522        assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));523        assert_noop!(524            TemplateModule::burn_item(origin1.clone(), 1, 1),525            "Item does not exists"526        );527528        assert_eq!(TemplateModule::balance_count(1, 1), 0);529    });530}531532#[test]533fn add_collection_admin() {534    new_test_ext().execute_with(|| {535        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();536        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();537        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();538        let mode: CollectionMode = CollectionMode::NFT(2000);539540        let origin1 = Origin::signed(1);541        let origin2 = Origin::signed(2);542        let origin3 = Origin::signed(3);543        assert_ok!(TemplateModule::create_collection(544            origin1.clone(),545            col_name1.clone(),546            col_desc1.clone(),547            token_prefix1.clone(),548            mode.clone()549        ));550        assert_ok!(TemplateModule::create_collection(551            origin2.clone(),552            col_name1.clone(),553            col_desc1.clone(),554            token_prefix1.clone(),555            mode.clone()556        ));557        assert_ok!(TemplateModule::create_collection(558            origin3.clone(),559            col_name1.clone(),560            col_desc1.clone(),561            token_prefix1.clone(),562            mode.clone()563        ));564565        assert_eq!(TemplateModule::collection(1).owner, 1);566        assert_eq!(TemplateModule::collection(2).owner, 2);567        assert_eq!(TemplateModule::collection(3).owner, 3);568569        // collection admin570        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));571        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));572573        assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);574        assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);575    });576}577578#[test]579fn remove_collection_admin() {580    new_test_ext().execute_with(|| {581        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();582        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();583        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();584        let mode: CollectionMode = CollectionMode::NFT(2000);585586        let origin1 = Origin::signed(1);587        let origin2 = Origin::signed(2);588        let origin3 = Origin::signed(3);589590        assert_ok!(TemplateModule::create_collection(591            origin1.clone(),592            col_name1.clone(),593            col_desc1.clone(),594            token_prefix1.clone(),595            mode.clone()596        ));597        assert_ok!(TemplateModule::create_collection(598            origin2.clone(),599            col_name1.clone(),600            col_desc1.clone(),601            token_prefix1.clone(),602            mode.clone()603        ));604        assert_ok!(TemplateModule::create_collection(605            origin3.clone(),606            col_name1.clone(),607            col_desc1.clone(),608            token_prefix1.clone(),609            mode.clone()610        ));611612        assert_eq!(TemplateModule::collection(1).owner, 1);613        assert_eq!(TemplateModule::collection(2).owner, 2);614        assert_eq!(TemplateModule::collection(3).owner, 3);615616        // collection admin617        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));618        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));619620        assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);621        assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);622623        // remove admin624        assert_ok!(TemplateModule::remove_collection_admin(625            origin2.clone(),626            1,627            3628        ));629        assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);630    });631}632633#[test]634fn balance_of() {635    new_test_ext().execute_with(|| {636        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();637        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();638        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();639        let nft_mode: CollectionMode = CollectionMode::NFT(2000);640        let furg_mode: CollectionMode = CollectionMode::Fungible(3);641        let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);642643        let origin1 = Origin::signed(1);644645        assert_ok!(TemplateModule::create_collection(646            origin1.clone(),647            col_name1.clone(),648            col_desc1.clone(),649            token_prefix1.clone(),650            nft_mode.clone()651        ));652        assert_ok!(TemplateModule::create_collection(653            origin1.clone(),654            col_name1.clone(),655            col_desc1.clone(),656            token_prefix1.clone(),657            furg_mode.clone()658        ));659        assert_ok!(TemplateModule::create_collection(660            origin1.clone(),661            col_name1.clone(),662            col_desc1.clone(),663            token_prefix1.clone(),664            refung_mode.clone()665        ));666667        assert_eq!(TemplateModule::collection(1).owner, 1);668        assert_eq!(TemplateModule::collection(2).owner, 1);669        assert_eq!(TemplateModule::collection(3).owner, 1);670671        // check balance before672        assert_eq!(TemplateModule::balance_count(1, 1), 0);673        assert_eq!(TemplateModule::balance_count(2, 1), 0);674        assert_eq!(TemplateModule::balance_count(3, 1), 0);675676        // create item677        assert_ok!(TemplateModule::create_item(678            origin1.clone(),679            1,680            [1, 1, 1].to_vec(),681            1682        ));683684        assert_ok!(TemplateModule::create_item(685            origin1.clone(),686            2,687            [].to_vec(),688            1689        ));690691        assert_ok!(TemplateModule::create_item(692            origin1.clone(),693            3,694            [1, 1, 1].to_vec(),695            1696        ));697698        // check balance (collection with id = 1, user id = 1)699        assert_eq!(TemplateModule::balance_count(1, 1), 1);700        assert_eq!(TemplateModule::balance_count(2, 1), 1000);701        assert_eq!(TemplateModule::balance_count(3, 1), 1000);702        assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);703        assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);704        assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);705    });706}707708#[test]709fn approve() {710    new_test_ext().execute_with(|| {711        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();712        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();713        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();714        let nft_mode: CollectionMode = CollectionMode::NFT(2000);715        let origin1 = Origin::signed(1);716717        assert_ok!(TemplateModule::create_collection(718            origin1.clone(),719            col_name1.clone(),720            col_desc1.clone(),721            token_prefix1.clone(),722            nft_mode.clone()723        ));724725        assert_eq!(TemplateModule::collection(1).owner, 1);726727        // create item728        assert_ok!(TemplateModule::create_item(729            origin1.clone(),730            1,731            [1, 1, 1].to_vec(),732            1733        ));734735        // approve736        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));737        assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);738    });739}740741#[test]742fn transfer_from() {743    new_test_ext().execute_with(|| {744        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();745        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();746        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();747        let mode: CollectionMode = CollectionMode::NFT(2000);748        let origin1 = Origin::signed(1);749        let origin2 = Origin::signed(2);750751        assert_ok!(TemplateModule::create_collection(752            origin1.clone(),753            col_name1.clone(),754            col_desc1.clone(),755            token_prefix1.clone(),756            mode757        ));758759        assert_eq!(TemplateModule::collection(1).owner, 1);760761        // create item762        assert_ok!(TemplateModule::create_item(763            origin1.clone(),764            1,765            [1, 1, 1].to_vec(),766            1767        ));768769        // approve770        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));771        assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);772        assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 2, 1, 1, 1));773774        // after transfer775        assert_eq!(TemplateModule::balance_count(1, 1), 0);776        assert_eq!(TemplateModule::balance_count(1, 2), 1);777    });778}