difftreelog
Unit tests added
in: master
3 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -129,6 +129,18 @@
pub amount: u64
}
+#[derive(Encode, Decode, Default, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Debug))]
+pub struct VestingItem<AccountId, Moment>
+{
+ pub sender: AccountId,
+ pub recipient: AccountId,
+ pub collection_id: u64,
+ pub item_id: u64,
+ pub amount: u64,
+ pub vesting_date: Moment
+}
+
pub trait Trait: system::Trait {
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
@@ -156,6 +168,10 @@
pub FungibleItemList get(fn fungible_item_id): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => FungibleItemType<T::AccountId>;
pub ReFungibleItemList get(fn refungible_item_id): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => ReFungibleItemType<T::AccountId>;
+ // Active vesting list
+ // pub VestingList get(fn vesting): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => VestingItem<T::AccountId, T::Moment>;
+
+ /// Index list
pub AddressTokens get(fn address_tokens): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) T::AccountId => Vec<u64>;
// Sponsorship
@@ -636,6 +652,7 @@
fn burn_refungible_item(collection_id: u64, item_id: u64, owner: T::AccountId) -> DispatchResult {
+ ensure!(<ReFungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let collection = <ReFungibleItemList<T>>::get(collection_id, item_id);
let item = collection.owner.iter().filter(|&i| i.owner == owner).next().unwrap();
Self::remove_token_index(collection_id, item_id, owner.clone())?;
@@ -655,6 +672,7 @@
fn burn_nft_item(collection_id: u64, item_id: u64) -> DispatchResult {
+ ensure!(<NftItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let item = <NftItemList<T>>::get(collection_id, item_id);
Self::remove_token_index(collection_id, item_id, item.owner.clone())?;
@@ -671,6 +689,7 @@
fn burn_fungible_item(collection_id: u64, item_id: u64) -> DispatchResult {
+ ensure!(<FungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists");
let item = <FungibleItemList<T>>::get(collection_id, item_id);
Self::remove_token_index(collection_id, item_id, item.owner.clone())?;
pallets/nft/src/tests.rsdiffbeforeafterboth--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -183,7 +183,6 @@
});
}
-
#[test]
fn transfer_nft_item() {
new_test_ext().execute_with(|| {
@@ -364,580 +363,416 @@
});
}
+#[test]
+fn change_collection_owner() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
+ let origin1 = Origin::signed(1);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
+ assert_ok!(TemplateModule::change_collection_owner(
+ origin1.clone(),
+ 1,
+ 2
+ ));
+ assert_eq!(TemplateModule::collection(1).owner, 2);
+ });
+}
+#[test]
+fn destroy_collection() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
+ let origin1 = Origin::signed(1);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
+ assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
+ });
+}
+#[test]
+fn burn_nft_item() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+ assert_ok!(TemplateModule::create_item(
+ origin2.clone(),
+ 1,
+ [1, 2, 3].to_vec(),
+ 1
+ ));
+ assert_eq!(TemplateModule::nft_item_id(1,1).data, [1,2,3].to_vec());
+ // check balance (collection with id = 1, user id = 1)
+ assert_eq!(TemplateModule::balance_count(1, 1), 1);
+ // burn item
+ assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));
+ assert_noop!(
+ TemplateModule::burn_item(origin1.clone(), 1, 1),
+ "Item does not exists"
+ );
+ assert_eq!(TemplateModule::balance_count(1, 1), 0);
+ });
+}
+#[test]
+fn burn_fungible_item() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::Fungible(3);
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+ assert_ok!(TemplateModule::create_item(
+ origin2.clone(),
+ 1,
+ [].to_vec(),
+ 1
+ ));
+ // check balance (collection with id = 1, user id = 1)
+ assert_eq!(TemplateModule::balance_count(1, 1), 1000);
+ // burn item
+ assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));
+ assert_noop!(
+ TemplateModule::burn_item(origin1.clone(), 1, 1),
+ "Item does not exists"
+ );
+ assert_eq!(TemplateModule::balance_count(1, 1), 0);
+ });
+}
-// #[test]
-// fn create_collection_test() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+#[test]
+fn burn_refungible_item() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::ReFungible(200, 3);
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// });
-// }
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+ assert_ok!(TemplateModule::create_item(
+ origin2.clone(),
+ 1,
+ [1,2,3].to_vec(),
+ 1
+ ));
-// #[test]
-// fn change_collection_owner() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ assert_eq!(TemplateModule::refungible_item_id(1,1).data, [1,2,3].to_vec());
-// let size = 1024;
-// let origin1 = Origin::signed(1);
+ // check balance (collection with id = 1, user id = 2)
+ assert_eq!(TemplateModule::balance_count(1, 1), 1000);
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::change_collection_owner(
-// origin1.clone(),
-// 1,
-// 2
-// ));
-// assert_eq!(TemplateModule::collection(1).owner, 2);
-// });
-// }
+ // burn item
+ assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));
+ assert_noop!(
+ TemplateModule::burn_item(origin1.clone(), 1, 1),
+ "Item does not exists"
+ );
-// #[test]
-// fn destroy_collection() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ assert_eq!(TemplateModule::balance_count(1, 1), 0);
+ });
+}
-// let size = 1024;
-// let origin1 = Origin::signed(1);
+#[test]
+fn add_collection_admin() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
-// });
-// }
-
-// #[test]
-// fn create_item() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-// assert_ok!(TemplateModule::create_item(
-// origin2.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
-
-// // check balance (collection with id = 1, user id = 2)
-// assert_eq!(TemplateModule::balance_count((1, 2)), 1);
-// });
-// }
-
-// #[test]
-// fn burn_item() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-// assert_ok!(TemplateModule::create_item(
-// origin2.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
-
-// // check balance (collection with id = 1, user id = 2)
-// assert_eq!(TemplateModule::balance_count((1, 2)), 1);
-
-// // burn item
-// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1));
-// assert_noop!(
-// TemplateModule::burn_item(origin1.clone(), 1, 1),
-// "Item does not exists"
-// );
-
-// assert_eq!(TemplateModule::balance_count((1, 1)), 0);
-// });
-// }
-
-// #[test]
-// fn add_collection_admin() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
-
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
-
-// // collection admin
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
-
-// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
-// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
-// });
-// }
-
-// #[test]
-// fn remove_collection_admin() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
-
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
-
-// // collection admin
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-// assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
-
-// assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
-// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
-
-// // remove admin
-// assert_ok!(TemplateModule::remove_collection_admin(
-// origin2.clone(),
-// 1,
-// 3
-// ));
-// assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);
-// });
-// }
-
-// #[test]
-// fn balance_of() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
-
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
-
-// // check balance before
-// assert_eq!(TemplateModule::balance_count((1, 1)), 0);
-
-// // create item
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
+ let origin3 = Origin::signed(3);
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin2.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin3.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
-// // check balance (collection with id = 1, user id = 2)
-// assert_eq!(TemplateModule::balance_count((1, 1)), 1);
-// assert_eq!(TemplateModule::item_id((1, 1)).owner, 1);
-// });
-// }
+ assert_eq!(TemplateModule::collection(1).owner, 1);
+ assert_eq!(TemplateModule::collection(2).owner, 2);
+ assert_eq!(TemplateModule::collection(3).owner, 3);
-// #[test]
-// fn transfer() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ // collection admin
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
+ assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
+ assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
+ });
+}
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
+#[test]
+fn remove_collection_admin() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
+ let origin3 = Origin::signed(3);
-// // create item
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin2.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin3.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode.clone()
+ ));
-// // transfer
-// assert_ok!(TemplateModule::transfer(origin1.clone(), 1, 1, 2));
-// assert_eq!(TemplateModule::item_id((1, 1)).owner, 2);
+ assert_eq!(TemplateModule::collection(1).owner, 1);
+ assert_eq!(TemplateModule::collection(2).owner, 2);
+ assert_eq!(TemplateModule::collection(3).owner, 3);
-// // balance_of check
-// assert_eq!(TemplateModule::balance_count((1, 1)), 0);
-// assert_eq!(TemplateModule::balance_count((1, 2)), 1);
-// });
-// }
+ // collection admin
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+ assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
-// #[test]
-// fn approve() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
+ assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
+ // remove admin
+ assert_ok!(TemplateModule::remove_collection_admin(
+ origin2.clone(),
+ 1,
+ 3
+ ));
+ assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), false);
+ });
+}
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
+#[test]
+fn balance_of() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let nft_mode: CollectionMode = CollectionMode::NFT(2000);
+ let furg_mode: CollectionMode = CollectionMode::Fungible(3);
+ let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
+ let origin1 = Origin::signed(1);
-// // create item
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ nft_mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ furg_mode.clone()
+ ));
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ refung_mode.clone()
+ ));
-// // approve
-// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
-// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);
-// });
-// }
+ assert_eq!(TemplateModule::collection(1).owner, 1);
+ assert_eq!(TemplateModule::collection(2).owner, 1);
+ assert_eq!(TemplateModule::collection(3).owner, 1);
-// #[test]
-// fn get_approved() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ // check balance before
+ assert_eq!(TemplateModule::balance_count(1, 1), 0);
+ assert_eq!(TemplateModule::balance_count(2, 1), 0);
+ assert_eq!(TemplateModule::balance_count(3, 1), 0);
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
+ // create item
+ assert_ok!(TemplateModule::create_item(
+ origin1.clone(),
+ 1,
+ [1, 1, 1].to_vec(),
+ 1
+ ));
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
+ assert_ok!(TemplateModule::create_item(
+ origin1.clone(),
+ 2,
+ [].to_vec(),
+ 1
+ ));
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
+ assert_ok!(TemplateModule::create_item(
+ origin1.clone(),
+ 3,
+ [1, 1, 1].to_vec(),
+ 1
+ ));
-// // create item
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
+ // check balance (collection with id = 1, user id = 1)
+ assert_eq!(TemplateModule::balance_count(1, 1), 1);
+ assert_eq!(TemplateModule::balance_count(2, 1), 1000);
+ assert_eq!(TemplateModule::balance_count(3, 1), 1000);
+ assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);
+ assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);
+ assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);
+ });
+}
-// // approve
-// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
-// assert_eq!(TemplateModule::approved((1, 1)).contains(&2), true);
-// });
-// }
+#[test]
+fn approve() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let nft_mode: CollectionMode = CollectionMode::NFT(2000);
+ let origin1 = Origin::signed(1);
-// #[test]
-// fn transfer_from() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ nft_mode.clone()
+ ));
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
+ assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
+ // create item
+ assert_ok!(TemplateModule::create_item(
+ origin1.clone(),
+ 1,
+ [1, 1, 1].to_vec(),
+ 1
+ ));
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
+ // approve
+ assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
+ assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);
+ });
+}
-// // create item
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
+#[test]
+fn transfer_from() {
+ new_test_ext().execute_with(|| {
+ let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+ let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+ let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ let mode: CollectionMode = CollectionMode::NFT(2000);
+ let origin1 = Origin::signed(1);
+ let origin2 = Origin::signed(2);
-// // approve
-// assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
-// assert_ok!(TemplateModule::transfer_from(origin1.clone(), 1, 1, 2));
-// });
-// }
+ assert_ok!(TemplateModule::create_collection(
+ origin1.clone(),
+ col_name1.clone(),
+ col_desc1.clone(),
+ token_prefix1.clone(),
+ mode
+ ));
-// #[test]
-// fn index_list() {
-// new_test_ext().execute_with(|| {
-// let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-// let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-// let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+ assert_eq!(TemplateModule::collection(1).owner, 1);
-// let size = 1024;
-// let origin1 = Origin::signed(1);
-// let origin2 = Origin::signed(2);
-// let origin3 = Origin::signed(3);
+ // create item
+ assert_ok!(TemplateModule::create_item(
+ origin1.clone(),
+ 1,
+ [1, 1, 1].to_vec(),
+ 1
+ ));
-// assert_ok!(TemplateModule::create_collection(
-// origin1.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin2.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
-// assert_ok!(TemplateModule::create_collection(
-// origin3.clone(),
-// col_name1.clone(),
-// col_desc1.clone(),
-// token_prefix1.clone(),
-// size
-// ));
+ // approve
+ assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
+ assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);
+ assert_ok!(TemplateModule::transfer_from(origin2.clone(), 1, 2, 1, 1, 1));
-// assert_eq!(TemplateModule::collection(1).owner, 1);
-// assert_eq!(TemplateModule::collection(2).owner, 2);
-// assert_eq!(TemplateModule::collection(3).owner, 3);
-// // create items
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 1].to_vec()
-// ));
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 1, 2].to_vec()
-// ));
-// assert_ok!(TemplateModule::create_item(
-// origin1.clone(),
-// 1,
-// [1, 2, 3].to_vec()
-// ));
-// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 3);
-// // burn one
-// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 2));
-// assert_eq!(TemplateModule::address_tokens((1, 1)).len(), 2);
-// // burn another one
-// assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 3));
-// assert_eq!(TemplateModule::address_tokens((1, 1))[0], 1);
-// });
-// }
+ // after transfer
+ assert_eq!(TemplateModule::balance_count(1, 1), 0);
+ assert_eq!(TemplateModule::balance_count(1, 2), 1);
+ });
+}
runtime/src/lib.rsdiffbeforeafterboth190 /// Version of the runtime.190 /// Version of the runtime.191 type Version = Version;191 type Version = Version;192 /// Converts a module to the index of the module in `construct_runtime!`.192 /// Converts a module to the index of the module in `construct_runtime!`.193 ///194 /// This type is being generated by `construct_runtime!`.193 /// This type is being generated by `construct_runtime!`.195 type ModuleToIndex = ModuleToIndex;194 type ModuleToIndex = ModuleToIndex;196 /// What to do if a new account is created.195 /// What to do if a new account is created.