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

difftreelog

fix(refungible-pallet) fixed wrong amount in ItemCreated event

Grigoriy Simonov2022-08-04parent: #3203150.patch.diff
in: master

4 files changed

modifiedpallets/fungible/src/lib.rsdiffbeforeafterboth
393 })393 })
394 .ok_or(ArithmeticError::Overflow)?;394 .ok_or(ArithmeticError::Overflow)?;
395
396 let mut balances = data;
397 for (k, v) in balances.iter_mut() {
398 *v = <Balance<T>>::get((collection.id, &k))
399 .checked_add(*v)
400 .ok_or(ArithmeticError::Overflow)?;
401 }
402395
403 for (to, _) in balances.iter() {396 for (to, _) in data.iter() {
404 <PalletStructure<T>>::check_nesting(397 <PalletStructure<T>>::check_nesting(
405 sender.clone(),398 sender.clone(),
406 to,399 to,
413 // =========406 // =========
414407
415 <TotalSupply<T>>::insert(collection.id, total_supply);408 <TotalSupply<T>>::insert(collection.id, total_supply);
416 for (user, amount) in balances {409 for (user, amount) in data {
410 let updated_balance = <Balance<T>>::get((collection.id, &user))
411 .checked_add(amount)
412 .ok_or(ArithmeticError::Overflow)?;
417 <Balance<T>>::insert((collection.id, &user), amount);413 <Balance<T>>::insert((collection.id, &user), updated_balance);
418 <PalletStructure<T>>::nest_if_sent_to_token_unchecked(414 <PalletStructure<T>>::nest_if_sent_to_token_unchecked(
419 &user,415 &user,
420 collection.id,416 collection.id,
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -560,10 +560,7 @@
 		<Pallet<T>>::create_item(
 			self,
 			&caller,
-			CreateItemData::<T> {
-				users,
-				properties,
-			},
+			CreateItemData::<T> { users, properties },
 			&budget,
 		)
 		.map_err(dispatch_to_evm::<T>)?;
modifiedtests/src/createItem.test.tsdiffbeforeafterboth
--- a/tests/src/createItem.test.ts
+++ b/tests/src/createItem.test.ts
@@ -14,7 +14,7 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-import {default as usingApi} from './substrate/substrate-api';
+import {default as usingApi, executeTransaction} from './substrate/substrate-api';
 import chai from 'chai';
 import {IKeyringPair} from '@polkadot/types/types';
 import {
@@ -26,6 +26,9 @@
   createItemWithPropsExpectFailure,
   createCollection,
   transferExpectSuccess,
+  itApi,
+  normalizeAccountId,
+  getCreateItemResult,
 } from './util/helpers';
 
 const expect = chai.expect;
@@ -50,6 +53,32 @@
     const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
     await createItemExpectSuccess(alice, newCollectionID, createMode);
   });
+  itApi('Check events on create new item in Fungible collection', async ({api}) => {
+    const createMode = 'Fungible';
+    
+    const newCollectionID = (await createCollection(api, alice, {mode: {type: createMode, decimalPoints: 0}})).collectionId;
+    
+    const to = normalizeAccountId(alice);
+    {
+      const createData = {fungible: {value: 100}};
+      const tx = api.tx.unique.createItem(newCollectionID, to, createData as any);
+      const events = await executeTransaction(api, alice, tx);
+      const result = getCreateItemResult(events);
+      expect(result.amount).to.be.equal(100);
+      expect(result.collectionId).to.be.equal(newCollectionID);
+      expect(result.recipient).to.be.deep.equal(to);
+    }
+    {
+      const createData = {fungible: {value: 50}};
+      const tx = api.tx.unique.createItem(newCollectionID, to, createData as any);
+      const events = await executeTransaction(api, alice, tx);
+      const result = getCreateItemResult(events);
+      expect(result.amount).to.be.equal(50);
+      expect(result.collectionId).to.be.equal(newCollectionID);
+      expect(result.recipient).to.be.deep.equal(to);
+    }
+
+  });
   it('Create new item in ReFungible collection', async () => {
     const createMode = 'ReFungible';
     const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -248,22 +248,23 @@
 }
 
 export function getCreateItemResult(events: EventRecord[]): CreateItemResult {
-  const genericResult = getGenericResult<[number, number, CrossAccountId?]>(events, 'common', 'ItemCreated', (data) => [
-    parseInt(data[0].toString(), 10),
-    parseInt(data[1].toString(), 10),
-    normalizeAccountId(data[2].toJSON() as any),
-  ]);
-
-  if (genericResult.data == null) genericResult.data = [0, 0];
-
-  const result: CreateItemResult = {
-    success: genericResult.success,
-    collectionId: genericResult.data[0],
-    itemId: genericResult.data[1],
-    recipient: genericResult.data![2],
-  };
+  const genericResult = getGenericResult(events, 'common', 'ItemCreated', (data) => data.map(function(value) { return value.toJSON(); }));
   
-  return result;
+  if (genericResult.data == null) 
+    return {
+      success: genericResult.success,
+      collectionId: 0,
+      itemId: 0,
+      amount: 0,
+    };
+  else 
+    return {
+      success: genericResult.success,
+      collectionId: genericResult.data[0] as number,
+      itemId: genericResult.data[1] as number,
+      recipient: normalizeAccountId(genericResult.data![2] as any),
+      amount: genericResult.data[3] as number,
+    };
 }
 
 export function getDestroyItemsResult(events: EventRecord[]): DestroyItemResult[] {
@@ -1699,3 +1700,14 @@
 
   return result.success;
 }
+
+export async function itApi(name: string, cb: (apis: { api: ApiPromise, privateKeyWrapper: (account: string) => IKeyringPair }) => any, opts: { only?: boolean, skip?: boolean } = {}) {
+  let i: any = it;
+  if (opts.only) i = i.only;
+  else if (opts.skip) i = i.skip;
+  i(name, async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      await cb({api, privateKeyWrapper});
+    });
+  });
+}