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

difftreelog

CreateItem* tests fixes

kryadinskii2022-05-19parent: #69adc40.patch.diff
in: master

4 files changed

modifiedtests/src/createItem.test.tsdiffbeforeafterboth
--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -23,13 +23,14 @@
   createItemExpectSuccess,
   addCollectionAdminExpectSuccess,
   createCollectionWithPropsExpectSuccess,
+  createItemWithPropsExpectSuccess,
 } from './util/helpers';
 
 const expect = chai.expect;
 let alice: IKeyringPair;
 let bob: IKeyringPair;
 
-describe('integration test: ext. createItem():', () => {
+describe('integration test: ext. ():', () => {
   before(async () => {
     await usingApi(async () => {
       const keyring = new Keyring({type: 'sr25519'});
@@ -75,28 +76,25 @@
   it('Set property Admin', async () => {
     const createMode = 'NFT';
     const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode}, 
-      properties: [{key: 'key1', value: 'val1'}], 
-      propPerm:   [{key: 'key1', mutable: true, collectionAdmin: true, tokenOwner: false}]});
+      propPerm:   [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});
     
-    await createItemExpectSuccess(alice, newCollectionID, createMode);
+    await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'k', value: 't2'}]);
   });
 
   it('Set property AdminConst', async () => {
     const createMode = 'NFT';
     const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode}, 
-      properties: [{key: 'key1', value: 'val1'}], 
-      propPerm:   [{key: 'key1', mutable: false, collectionAdmin: true, tokenOwner: false}]});
+      propPerm:   [{key: 'key1', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});
     
-    await createItemExpectSuccess(alice, newCollectionID, createMode);
+    await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'key1', value: 'val1'}]);
   });
 
   it('Set property itemOwnerOrAdmin', async () => {
     const createMode = 'NFT';
-    const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode}, 
-      properties: [{key: 'key1', value: 'val1'}], 
-      propPerm:   [{key: 'key1', mutable: true, collectionAdmin: true, tokenOwner: true}]});
+    const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode},
+      propPerm:   [{key: 'key1', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});
     
-    await createItemExpectSuccess(alice, newCollectionID, createMode);
+    await createItemWithPropsExpectSuccess(alice, newCollectionID, createMode, [{key: 'key1', value: 'val1'}]);
   });
 });
 
@@ -129,7 +127,7 @@
     await usingApi(async api => {
       const createMode = 'NFT';
       const newCollectionID = await createCollectionWithPropsExpectSuccess({mode: {type: createMode}, 
-        propPerm:   [{key: 'key1', mutable: false, collectionAdmin: false, tokenOwner: false}]});
+        propPerm:   [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: false}}]});
 
       const token = await createItemExpectSuccess(alice, newCollectionID, 'NFT');
       await addCollectionAdminExpectSuccess(alice, newCollectionID, bob.address);
@@ -144,7 +142,7 @@
 
   it('User doesnt have editing rights', async () => {
     await usingApi(async api => {
-      const newCollectionID = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'key1', mutable: true, collectionAdmin: false, tokenOwner: false}]});
+      const newCollectionID = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
       const token = await createItemExpectSuccess(alice, newCollectionID, 'NFT');
 
       await expect(executeTransaction(
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -34,6 +34,7 @@
   getCreatedCollectionCount,
   createCollectionWithPropsExpectSuccess,
   getCreateItemsResult,
+  createMultipleItemsWithPropsExpectSuccess
 } from './util/helpers';
 
 chai.use(chaiAsPromised);
@@ -133,25 +134,18 @@
 
   it('Create  0x31, 0x32, 0x33 items in active NFT with property Admin', async () => {
     await usingApi(async (api: ApiPromise) => {
-      const collectionId = await createCollectionExpectSuccess();
+      const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
-      const args = [{Nft: {const_data: '0x31'}},
-        {Nft: {const_data: '0x32'}},
-        {Nft: {const_data: '0x33'}}];
-      const createMultipleItemsTx = api.tx.unique
-        .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
-      await submitTransactionAsync(alice, createMultipleItemsTx);
+      const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},
+        {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},
+        {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];
+
+      await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);
       const itemsListIndexAfter = await getLastTokenId(api, collectionId);
       expect(itemsListIndexAfter).to.be.equal(3);
-
-      await expect(executeTransaction(
-        api,
-        alice,
-        api.tx.unique.setPropertyPermissions(collectionId, [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]),
-      )).to.not.be.rejected;
 
       expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));
       expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));
@@ -165,26 +159,20 @@
 
   it('Create  0x31, 0x32, 0x33 items in active NFT with property AdminConst', async () => {
     await usingApi(async (api: ApiPromise) => {
-      const collectionId = await createCollectionExpectSuccess();
+      const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
-      const args = [{Nft: {const_data: '0x31'}},
-        {Nft: {const_data: '0x32'}},
-        {Nft: {const_data: '0x33'}}];
-      const createMultipleItemsTx = api.tx.unique
-        .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
-      await submitTransactionAsync(alice, createMultipleItemsTx);
+      await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+      const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},
+        {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},
+        {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];
+
+      await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);
       const itemsListIndexAfter = await getLastTokenId(api, collectionId);
       expect(itemsListIndexAfter).to.be.equal(3);
 
-      await expect(executeTransaction(
-        api,
-        alice,
-        api.tx.unique.setPropertyPermissions(collectionId, [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]),
-      )).to.not.be.rejected;
-
       expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));
       expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));
       expect(await getTokenOwner(api, collectionId, 3)).to.be.deep.equal(normalizeAccountId(alice.address));
@@ -197,25 +185,18 @@
 
   it('Create  0x31, 0x32, 0x33 items in active NFT with property itemOwnerOrAdmin', async () => {
     await usingApi(async (api: ApiPromise) => {
-      const collectionId = await createCollectionExpectSuccess();
+      const collectionId = await createCollectionWithPropsExpectSuccess({propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
-      const args = [{Nft: {const_data: '0x31'}},
-        {Nft: {const_data: '0x32'}},
-        {Nft: {const_data: '0x33'}}];
-      const createMultipleItemsTx = api.tx.unique
-        .createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
-      await submitTransactionAsync(alice, createMultipleItemsTx);
+      const args = [{Nft: {const_data: '0x31', properties: [{key: 'k', value: 'v1'}]}},
+        {Nft: {const_data: '0x32', properties: [{key: 'k', value: 'v2'}]}},
+        {Nft: {const_data: '0x33', properties: [{key: 'k', value: 'v3'}]}}];
+
+      await createMultipleItemsWithPropsExpectSuccess(alice, collectionId, args);
       const itemsListIndexAfter = await getLastTokenId(api, collectionId);
       expect(itemsListIndexAfter).to.be.equal(3);
-
-      await expect(executeTransaction(
-        api,
-        alice,
-        api.tx.unique.setPropertyPermissions(collectionId, [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]),
-      )).to.not.be.rejected;
 
       expect(await getTokenOwner(api, collectionId, 1)).to.be.deep.equal(normalizeAccountId(alice.address));
       expect(await getTokenOwner(api, collectionId, 2)).to.be.deep.equal(normalizeAccountId(alice.address));
@@ -451,7 +432,7 @@
   it('No editing rights', async () => {
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
-        propPerm:   [{key: 'key1', mutable: true, collectionAdmin: false, tokenOwner: false}]});
+        propPerm:   [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -479,7 +460,7 @@
   it('User doesnt have editing rights', async () => {
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
-        propPerm:   [{key: 'key1', mutable: false, collectionAdmin: false, tokenOwner: false}]});
+        propPerm:   [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -530,7 +511,7 @@
   it('Adding more than 64 prps', async () => {
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
-        propPerm:   [{key: 'key1', mutable: true, collectionAdmin: true, tokenOwner: false}]});
+        propPerm:   [{key: 'key1', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -565,7 +546,7 @@
   it('Trying to add bigger property than allowed', async () => {
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
-        propPerm:   [{key: 'key1', mutable: true, collectionAdmin: false, tokenOwner: false}]});
+        propPerm:   [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
       expect(itemsListIndexBefore).to.be.equal(0);
       const args = [{Nft: {const_data: '0x31'}},
modifiedtests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth
48 });48 });
49 });49 });
5050
51 it('createMultipleItemsEx with property Admin', async () => {51 it.only('createMultipleItemsEx with property Admin', async () => {
52 const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});52 const collection = await createCollectionWithPropsExpectSuccess({mode: {type: 'NFT'}, propPerm: [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]});
53 const alice = privateKey('//Alice');53 const alice = privateKey('//Alice');
54 const bob = privateKey('//Bob');54 const bob = privateKey('//Bob');
55 const charlie = privateKey('//Charlie');55 const charlie = privateKey('//Charlie');
56 await usingApi(async (api) => {56 await usingApi(async (api) => {
57 const data = [57 const data = [
58 {58 {
59 owner: {substrate: alice.address},59 owner: {substrate: alice.address},
60 constData: '0x0000',60 constData: '0x1111',
61 properties: [{key: 'k', value: 'v1'}],
61 }, {62 }, {
62 owner: {substrate: bob.address},63 owner: {substrate: bob.address},
63 constData: '0x2222',64 constData: '0x2222',
65 properties: [{key: 'k', value: 'v2'}],
64 }, {66 }, {
65 owner: {substrate: charlie.address},67 owner: {substrate: charlie.address},
66 constData: '0x4444',68 constData: '0x4444',
69 properties: [{key: 'k', value: 'v3'}],
67 },70 },
68 ];71 ];
69
70 await expect(executeTransaction(
71 api,
72 alice,
73 api.tx.unique.setPropertyPermissions(collection, [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: false}}]),
74 )).to.not.be.rejected;
7572
76 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {73 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
77 NFT: data,74 NFT: data,
78 }));75 }));
79 const tokens = await api.query.nonfungible.tokenData.entries(collection);76 for (let i = 1; i < 4; i++) {
80 const json = tokens.map(([, token]) => token.toJSON());
81 expect(json).to.be.deep.equal(data);77 expect(await api.rpc.unique.tokenProperties(collection, i)).not.to.be.empty;
78 }
82 });79 });
83 });80 });
8481
85 it('createMultipleItemsEx with property AdminConst', async () => {82 it('createMultipleItemsEx with property AdminConst', async () => {
86 const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});83 const collection = await createCollectionWithPropsExpectSuccess({mode: {type: 'NFT'}, propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]});
87 const alice = privateKey('//Alice');84 const alice = privateKey('//Alice');
88 const bob = privateKey('//Bob');85 const bob = privateKey('//Bob');
89 const charlie = privateKey('//Charlie');86 const charlie = privateKey('//Charlie');
92 {89 {
93 owner: {substrate: alice.address},90 owner: {substrate: alice.address},
94 constData: '0x0000',91 constData: '0x0000',
92 properties: [{key: 'k', value: 'v1'}],
95 }, {93 }, {
96 owner: {substrate: bob.address},94 owner: {substrate: bob.address},
97 constData: '0x2222',95 constData: '0x2222',
96 properties: [{key: 'k', value: 'v2'}],
98 }, {97 }, {
99 owner: {substrate: charlie.address},98 owner: {substrate: charlie.address},
100 constData: '0x4444',99 constData: '0x4444',
100 properties: [{key: 'k', value: 'v3'}],
101 },101 },
102 ];102 ];
103 await expect(executeTransaction(
104 api,
105 alice,
106 api.tx.unique.setPropertyPermissions(collection, [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}}]),
107 )).to.not.be.rejected;
108103
109 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {104 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
110 NFT: data,105 NFT: data,
111 }));106 }));
112
113
114 const tokens = await api.query.nonfungible.tokenData.entries(collection);107 for (let i = 1; i < 4; i++) {
115 const json = tokens.map(([, token]) => token.toJSON());
116 expect(json).to.be.deep.equal(data);108 expect(await api.rpc.unique.tokenProperties(collection, i)).not.to.be.empty;
109 }
117 });110 });
118 });111 });
119112
120 it('createMultipleItemsEx with property itemOwnerOrAdmin', async () => {113 it('createMultipleItemsEx with property itemOwnerOrAdmin', async () => {
121 const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});114 const collection = await createCollectionWithPropsExpectSuccess({mode: {type: 'NFT'}, propPerm: [{key: 'k', permission: {mutable: false, collectionAdmin: true, tokenOwner: true}}]});
122 const alice = privateKey('//Alice');115 const alice = privateKey('//Alice');
123 const bob = privateKey('//Bob');116 const bob = privateKey('//Bob');
124 const charlie = privateKey('//Charlie');117 const charlie = privateKey('//Charlie');
127 {120 {
128 owner: {substrate: alice.address},121 owner: {substrate: alice.address},
129 constData: '0x0000',122 constData: '0x0000',
123 properties: [{key: 'k', value: 'v1'}],
130 }, {124 }, {
131 owner: {substrate: bob.address},125 owner: {substrate: bob.address},
132 constData: '0x2222',126 constData: '0x2222',
127 properties: [{key: 'k', value: 'v2'}],
133 }, {128 }, {
134 owner: {substrate: charlie.address},129 owner: {substrate: charlie.address},
135 constData: '0x4444',130 constData: '0x4444',
131 properties: [{key: 'k', value: 'v3'}],
136 },132 },
137 ];133 ];
138 await expect(executeTransaction(
139 api,
140 alice,
141 api.tx.unique.setPropertyPermissions(collection, [{key: 'k', permission: {mutable: true, collectionAdmin: true, tokenOwner: true}}]),
142 )).to.not.be.rejected;
143134
144 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {135 await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
145 NFT: data,136 NFT: data,
146 }));137 }));
147
148
149 const tokens = await api.query.nonfungible.tokenData.entries(collection);138 for (let i = 1; i < 4; i++) {
150 const json = tokens.map(([, token]) => token.toJSON());
151 expect(json).to.be.deep.equal(data);139 expect(await api.rpc.unique.tokenProperties(collection, i)).not.to.be.empty;
140 }
152 });141 });
153 });142 });
154143
155 it('No editing rights', async () => {144 it('No editing rights', async () => {
156 const collection = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],145 const collection = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
157 propPerm: [{key: 'key1', mutable: true, collectionAdmin: false, tokenOwner: false}]});146 propPerm: [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
158 const alice = privateKey('//Alice');147 const alice = privateKey('//Alice');
159 const bob = privateKey('//Bob');148 const bob = privateKey('//Bob');
160 const charlie = privateKey('//Charlie');149 const charlie = privateKey('//Charlie');
188177
189 it('User doesnt have editing rights', async () => {178 it('User doesnt have editing rights', async () => {
190 const collection = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],179 const collection = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
191 propPerm: [{key: 'key1', mutable: false, collectionAdmin: false, tokenOwner: false}]});180 propPerm: [{key: 'key1', permission: {mutable: false, collectionAdmin: false, tokenOwner: false}}]});
192 const alice = privateKey('//Alice');181 const alice = privateKey('//Alice');
193 const bob = privateKey('//Bob');182 const bob = privateKey('//Bob');
194 const charlie = privateKey('//Charlie');183 const charlie = privateKey('//Charlie');
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -27,7 +27,7 @@
 import privateKey from '../substrate/privateKey';
 import {default as usingApi, executeTransaction, submitTransactionAsync, submitTransactionExpectFailAsync} from '../substrate/substrate-api';
 import {hexToStr, strToUTF16, utf16ToStr} from './util';
-import {UpDataStructsRpcCollection} from '@polkadot/types/lookup';
+import {UpDataStructsRpcCollection, UpDataStructsCreateItemData} from '@polkadot/types/lookup';
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -295,13 +295,17 @@
   value: any,
 };
 
-type PropertyPermission = {
-  key: any,
+type Permission = {
   mutable: boolean;
   collectionAdmin: boolean;
   tokenOwner: boolean;
 }
 
+type PropertyPermission = {
+  key: any;
+  permission: Permission;
+}
+
 export type CreateCollectionParams = {
   mode: CollectionMode,
   name: string,
@@ -1123,6 +1127,65 @@
   });
 }
 
+export async function createMultipleItemsWithPropsExpectSuccess(sender: IKeyringPair, collectionId: number, itemsData: any, owner: CrossAccountId | string = sender.address) {
+  await usingApi(async (api) => {
+    const to = normalizeAccountId(owner);
+    const tx = api.tx.unique.createMultipleItems(collectionId, to, itemsData);
+
+    const events = await submitTransactionAsync(sender, tx);
+    const result = getCreateItemsResult(events);
+
+    for (let res of result) {
+      expect(await api.rpc.unique.tokenProperties(collectionId, res.itemId)).not.to.be.empty;
+    }
+  });
+}
+
+export async function createItemWithPropsExpectSuccess(sender: IKeyringPair, collectionId: number, createMode: string, props:  Array<Property>, owner: CrossAccountId | string = sender.address) {
+  let newItemId = 0;
+  await usingApi(async (api) => {
+    const to = normalizeAccountId(owner);
+    const itemCountBefore = await getLastTokenId(api, collectionId);
+    const itemBalanceBefore = await getBalance(api, collectionId, to, newItemId);
+
+    let tx;
+    if (createMode === 'Fungible') {
+      const createData = {fungible: {value: 10}};
+      tx = api.tx.unique.createItem(collectionId, to, createData as any);
+    } else if (createMode === 'ReFungible') {
+      const createData = {refungible: {const_data: [], pieces: 100}};
+      tx = api.tx.unique.createItem(collectionId, to, createData as any);
+    } else {
+      const data = api.createType('UpDataStructsCreateItemData', { NFT: { constData: 'test', properties: props}});
+      tx = api.tx.unique.createItem(collectionId, to, data as UpDataStructsCreateItemData);
+    }
+
+    const events = await submitTransactionAsync(sender, tx);
+    const result = getCreateItemResult(events);
+
+    const itemCountAfter = await getLastTokenId(api, collectionId);
+    const itemBalanceAfter = await getBalance(api, collectionId, to, newItemId);
+
+    if (createMode === 'NFT') {
+      expect(await api.rpc.unique.tokenProperties(collectionId, result.itemId)).not.to.be.empty;
+    }
+
+    // What to expect
+    // tslint:disable-next-line:no-unused-expression
+    expect(result.success).to.be.true;
+    if (createMode === 'Fungible') {
+      expect(itemBalanceAfter - itemBalanceBefore).to.be.equal(10n);
+    } else {
+      expect(itemCountAfter).to.be.equal(itemCountBefore + 1);
+    }
+    expect(collectionId).to.be.equal(result.collectionId);
+    expect(itemCountAfter.toString()).to.be.equal(result.itemId.toString());
+    expect(to).to.be.deep.equal(result.recipient);
+    newItemId = result.itemId;
+  });
+  return newItemId;
+}
+
 export async function createItemExpectSuccess(sender: IKeyringPair, collectionId: number, createMode: string, owner: CrossAccountId | string = sender.address) {
   let newItemId = 0;
   await usingApi(async (api) => {