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

difftreelog

transferFrom tests

kpozdnikin2021-01-18parent: #f8c3f30.patch.diff
in: master

3 files changed

modifiedtests/src/approve.test.tsdiffbeforeafterboth
before · tests/src/approve.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//5import { ApiPromise } from '@polkadot/api';6import BN from 'bn.js';7import chai from 'chai';8import chaiAsPromised from 'chai-as-promised';9import privateKey from './substrate/privateKey';10import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';11import {12  approveExpectFail,13  approveExpectSuccess,14  createCollectionExpectSuccess,15  createItemExpectSuccess,16  destroyCollectionExpectSuccess,17} from './util/helpers';1819chai.use(chaiAsPromised);20const expect = chai.expect;2122describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {23  it('Execute the extrinsic and check approvedList', async () => {24    await usingApi(async (api: ApiPromise) => {25      const Alice = privateKey('//Alice');26      const Bob = privateKey('//Bob');27      const nftCollectionId = await createCollectionExpectSuccess();28      // nft29      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');30      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);31      // fungible32      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});33      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');34      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);35      // reFungible36      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});37      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');38      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);3940      // garbage collection :-D41      await destroyCollectionExpectSuccess(nftCollectionId);42      await destroyCollectionExpectSuccess(fungibleCollectionId);43      await destroyCollectionExpectSuccess(reFungibleCollectionId);44    });45  });4647  it('Remove approval by using 0 amount', async () => {48    await usingApi(async (api: ApiPromise) => {49      const Alice = privateKey('//Alice');50      const Bob = privateKey('//Bob');51      const nftCollectionId = await createCollectionExpectSuccess();52      // nft53      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');54      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);55      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);56      // fungible57      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});58      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');59      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);60      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);61      // reFungible62      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});63      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');64      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);65      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);6667      // garbage collection :-D68      await destroyCollectionExpectSuccess(nftCollectionId);69      await destroyCollectionExpectSuccess(fungibleCollectionId);70      await destroyCollectionExpectSuccess(reFungibleCollectionId);71    });72  });73});7475describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {76  it('Approve for a collection that does not exist', async () => {77    await usingApi(async (api: ApiPromise) => {78      const Alice = privateKey('//Alice');79      const Bob = privateKey('//Bob');80      // nft81      const nftCollectionId = await createCollectionExpectSuccess();82      await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);83      // fungible84      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});85      await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);86      // reFungible87      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});88      await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);89      // garbage collection :-D90      await destroyCollectionExpectSuccess(nftCollectionId);91      await destroyCollectionExpectSuccess(fungibleCollectionId);92      await destroyCollectionExpectSuccess(reFungibleCollectionId);93    });94  });9596  it('Approve for a collection that was destroyed', async () => {97    await usingApi(async (api: ApiPromise) => {98      const Alice = privateKey('//Alice');99      const Bob = privateKey('//Bob');100      // nft101      const nftCollectionId = await createCollectionExpectSuccess();102      await destroyCollectionExpectSuccess(nftCollectionId);103      await approveExpectFail(nftCollectionId, 1, Alice, Bob);104      // fungible105      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});106      await destroyCollectionExpectSuccess(fungibleCollectionId);107      await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);108      // reFungible109      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});110      await destroyCollectionExpectSuccess(reFungibleCollectionId);111      await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);112    });113  });114115  it('Approve transfer of a token that does not exist', async () => {116    await usingApi(async (api: ApiPromise) => {117      const Alice = privateKey('//Alice');118      const Bob = privateKey('//Bob');119      // nft120      const nftCollectionId = await createCollectionExpectSuccess();121      await approveExpectFail(nftCollectionId, 2, Alice, Bob);122      // fungible123      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});124      await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);125      // reFungible126      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});127      await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);128      // garbage collection :-D129      await destroyCollectionExpectSuccess(nftCollectionId);130      await destroyCollectionExpectSuccess(fungibleCollectionId);131      await destroyCollectionExpectSuccess(reFungibleCollectionId);132    });133  });134135  it('Approve using the address that does not own the approved token', async () => {136    await usingApi(async (api: ApiPromise) => {137      const Alice = privateKey('//Alice');138      const Bob = privateKey('//Bob');139      const nftCollectionId = await createCollectionExpectSuccess();140      // nft141      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');142      await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);143      // fungible144      const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});145      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');146      await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);147      // reFungible148      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});149      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');150      await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);151152      // garbage collection :-D153      await destroyCollectionExpectSuccess(nftCollectionId);154      await destroyCollectionExpectSuccess(fungibleCollectionId);155      await destroyCollectionExpectSuccess(reFungibleCollectionId);156    });157  });158});
after · tests/src/approve.test.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//5import { ApiPromise } from '@polkadot/api';6import BN from 'bn.js';7import chai from 'chai';8import chaiAsPromised from 'chai-as-promised';9import privateKey from './substrate/privateKey';10import { default as usingApi } from './substrate/substrate-api';11import {12  approveExpectFail,13  approveExpectSuccess,14  createCollectionExpectSuccess,15  createItemExpectSuccess,16  destroyCollectionExpectSuccess,17} from './util/helpers';1819chai.use(chaiAsPromised);20const expect = chai.expect;2122describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {23  it('Execute the extrinsic and check approvedList', async () => {24    await usingApi(async (api: ApiPromise) => {25      const Alice = privateKey('//Alice');26      const Bob = privateKey('//Bob');27      const nftCollectionId = await createCollectionExpectSuccess();28      // nft29      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');30      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);31      // fungible32      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});33      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');34      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);35      // reFungible36      const reFungibleCollectionId =37        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});38      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');39      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);4041      // garbage collection :-D42      await destroyCollectionExpectSuccess(nftCollectionId);43      await destroyCollectionExpectSuccess(fungibleCollectionId);44      await destroyCollectionExpectSuccess(reFungibleCollectionId);45    });46  });4748  it('Remove approval by using 0 amount', async () => {49    await usingApi(async (api: ApiPromise) => {50      const Alice = privateKey('//Alice');51      const Bob = privateKey('//Bob');52      const nftCollectionId = await createCollectionExpectSuccess();53      // nft54      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');55      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);56      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);57      // fungible58      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});59      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');60      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);61      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);62      // reFungible63      const reFungibleCollectionId =64        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});65      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');66      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);67      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);6869      // garbage collection :-D70      await destroyCollectionExpectSuccess(nftCollectionId);71      await destroyCollectionExpectSuccess(fungibleCollectionId);72      await destroyCollectionExpectSuccess(reFungibleCollectionId);73    });74  });75});7677describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {78  it('Approve for a collection that does not exist', async () => {79    await usingApi(async (api: ApiPromise) => {80      const Alice = privateKey('//Alice');81      const Bob = privateKey('//Bob');82      // nft83      const nftCollectionId = await createCollectionExpectSuccess();84      await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);85      // fungible86      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});87      await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);88      // reFungible89      const reFungibleCollectionId =90        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});91      await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);92      // garbage collection :-D93      await destroyCollectionExpectSuccess(nftCollectionId);94      await destroyCollectionExpectSuccess(fungibleCollectionId);95      await destroyCollectionExpectSuccess(reFungibleCollectionId);96    });97  });9899  it('Approve for a collection that was destroyed', async () => {100    await usingApi(async (api: ApiPromise) => {101      const Alice = privateKey('//Alice');102      const Bob = privateKey('//Bob');103      // nft104      const nftCollectionId = await createCollectionExpectSuccess();105      await destroyCollectionExpectSuccess(nftCollectionId);106      await approveExpectFail(nftCollectionId, 1, Alice, Bob);107      // fungible108      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});109      await destroyCollectionExpectSuccess(fungibleCollectionId);110      await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);111      // reFungible112      const reFungibleCollectionId =113        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});114      await destroyCollectionExpectSuccess(reFungibleCollectionId);115      await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);116    });117  });118119  it('Approve transfer of a token that does not exist', async () => {120    await usingApi(async (api: ApiPromise) => {121      const Alice = privateKey('//Alice');122      const Bob = privateKey('//Bob');123      // nft124      const nftCollectionId = await createCollectionExpectSuccess();125      await approveExpectFail(nftCollectionId, 2, Alice, Bob);126      // fungible127      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});128      await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);129      // reFungible130      const reFungibleCollectionId =131        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});132      await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);133      // garbage collection :-D134      await destroyCollectionExpectSuccess(nftCollectionId);135      await destroyCollectionExpectSuccess(fungibleCollectionId);136      await destroyCollectionExpectSuccess(reFungibleCollectionId);137    });138  });139140  it('Approve using the address that does not own the approved token', async () => {141    await usingApi(async (api: ApiPromise) => {142      const Alice = privateKey('//Alice');143      const Bob = privateKey('//Bob');144      const nftCollectionId = await createCollectionExpectSuccess();145      // nft146      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');147      await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);148      // fungible149      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});150      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');151      await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);152      // reFungible153      const reFungibleCollectionId =154        await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});155      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');156      await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);157158      // garbage collection :-D159      await destroyCollectionExpectSuccess(nftCollectionId);160      await destroyCollectionExpectSuccess(fungibleCollectionId);161      await destroyCollectionExpectSuccess(reFungibleCollectionId);162    });163  });164});
modifiedtests/src/transferFrom.test.tsdiffbeforeafterboth
--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -3,19 +3,19 @@
 // file 'LICENSE', which is part of this source code package.
 //
 import { ApiPromise } from '@polkadot/api';
-import BN from 'bn.js';
 import chai from 'chai';
 import chaiAsPromised from 'chai-as-promised';
 import privateKey from './substrate/privateKey';
-import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
+import { default as usingApi } from './substrate/substrate-api';
 import {
+  approveExpectFail,
   approveExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectSuccess,
   destroyCollectionExpectSuccess,
+  transferFromExpectFail,
   transferFromExpectSuccess,
 } from './util/helpers';
-import {IKeyringPair} from "@polkadot/types/types";
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -26,29 +26,30 @@
       const Alice = privateKey('//Alice');
       const Bob = privateKey('//Bob');
       const Charlie = privateKey('//CHARLIE');
+      // nft
       const nftCollectionId = await createCollectionExpectSuccess();
-      console.log('nftCollectionId', nftCollectionId);
-      const collectionInfo = await api.query.nft.collection(nftCollectionId);
-      console.log('collectionInfo', collectionInfo);
-      // nft
       const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
       await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
 
-      await transferFromExpectSuccess(nftCollectionId, newNftTokenId, Alice, Charlie, 1, 'NFT');
+      await transferFromExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1, 'NFT');
 
       // fungible
-      /*const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});
+      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
       const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
       await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
+      await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible');
       // reFungible
-      const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});
+      const reFungibleCollectionId = await
+        createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
       const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
-      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);*/
+      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
+      await transferFromExpectSuccess(reFungibleCollectionId,
+        newReFungibleTokenId, Bob, Alice, Charlie, 1, 'ReFungible');
 
       // garbage collection :-D
       await destroyCollectionExpectSuccess(nftCollectionId);
-      // await destroyCollectionExpectSuccess(fungibleCollectionId);
-      // await destroyCollectionExpectSuccess(reFungibleCollectionId);
+      await destroyCollectionExpectSuccess(fungibleCollectionId);
+      await destroyCollectionExpectSuccess(reFungibleCollectionId);
     });
   });
 });
@@ -56,43 +57,157 @@
 describe('Negative Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {
   it('transferFrom for a collection that does not exist', async () => {
     await usingApi(async (api: ApiPromise) => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+      const Charlie = privateKey('//CHARLIE');
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);
+
+      await transferFromExpectFail(nftCollectionId + 1, 1, Bob, Alice, Charlie, 1);
+
+      // fungible
+      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+      await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);
+
+      await transferFromExpectFail(fungibleCollectionId + 1, 1, Bob, Alice, Charlie, 1);
+      // reFungible
+      const reFungibleCollectionId = await
+        createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
+      await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);
 
+      await transferFromExpectFail(reFungibleCollectionId + 1, 1, Bob, Alice, Charlie, 1);
+
+      // garbage collection :-D
+      await destroyCollectionExpectSuccess(nftCollectionId);
+      await destroyCollectionExpectSuccess(fungibleCollectionId);
+      await destroyCollectionExpectSuccess(reFungibleCollectionId);
     });
   });
 
-  it('transferFrom for a collection that was destroyed', async () => {
+  /* it('transferFrom for a collection that was destroyed', async () => {
     await usingApi(async (api: ApiPromise) => {
-
+      this test copies approve negative test
     });
-  });
+  }); */
 
-  it('transferFrom a token that does not exist', async () => {
+  /* it('transferFrom a token that does not exist', async () => {
     await usingApi(async (api: ApiPromise) => {
-
+      this test copies approve negative test
     });
-  });
+  }); */
 
-  it('transferFrom a token that was deleted', async () => {
+  /* it('transferFrom a token that was deleted', async () => {
     await usingApi(async (api: ApiPromise) => {
-
+      this test copies approve negative test
     });
-  });
+  }); */
 
   it('transferFrom for not approved address', async () => {
     await usingApi(async (api: ApiPromise) => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+      const Charlie = privateKey('//CHARLIE');
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
 
+      await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);
+
+      // fungible
+      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
+      await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);
+      // reFungible
+      const reFungibleCollectionId = await
+        createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
+      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+      await transferFromExpectFail(reFungibleCollectionId,
+        newReFungibleTokenId, Bob, Alice, Charlie, 1);
+
+      // garbage collection :-D
+      await destroyCollectionExpectSuccess(nftCollectionId);
+      await destroyCollectionExpectSuccess(fungibleCollectionId);
+      await destroyCollectionExpectSuccess(reFungibleCollectionId);
     });
   });
 
   it('transferFrom incorrect token count', async () => {
     await usingApi(async (api: ApiPromise) => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+      const Charlie = privateKey('//CHARLIE');
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
+
+      await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 2);
+
+      // fungible
+      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
+      await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);
+      await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2);
+      // reFungible
+      const reFungibleCollectionId = await
+        createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
+      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+      await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);
+      await transferFromExpectFail(reFungibleCollectionId,
+        newReFungibleTokenId, Bob, Alice, Charlie, 2);
 
+      // garbage collection :-D
+      await destroyCollectionExpectSuccess(nftCollectionId);
+      await destroyCollectionExpectSuccess(fungibleCollectionId);
+      await destroyCollectionExpectSuccess(reFungibleCollectionId);
     });
   });
 
   it('execute transferFrom from account that is not owner of collection', async () => {
     await usingApi(async (api: ApiPromise) => {
+      const Alice = privateKey('//Alice');
+      const Bob = privateKey('//Bob');
+      const Charlie = privateKey('//CHARLIE');
+      const Dave = privateKey('//DAVE');
+      // nft
+      const nftCollectionId = await createCollectionExpectSuccess();
+      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
+      try {
+        await approveExpectFail(nftCollectionId, newNftTokenId, Dave, Bob);
+        await transferFromExpectFail(nftCollectionId, newNftTokenId, Dave, Alice, Charlie, 1);
+      } catch (e) {
+        // tslint:disable-next-line:no-unused-expression
+        expect(e).to.be.exist;
+      }
 
+      // await transferFromExpectFail(nftCollectionId, newNftTokenId, Dave, Alice, Charlie, 1);
+
+      // fungible
+      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
+      try {
+        await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Bob);
+        await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Alice, Charlie, 1);
+      } catch (e) {
+        // tslint:disable-next-line:no-unused-expression
+        expect(e).to.be.exist;
+      }
+      // reFungible
+      const reFungibleCollectionId = await
+        createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
+      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
+      try {
+        await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob);
+        await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Alice, Charlie, 1);
+      } catch (e) {
+        // tslint:disable-next-line:no-unused-expression
+        expect(e).to.be.exist;
+      }
+      // garbage collection :-D
+      await destroyCollectionExpectSuccess(nftCollectionId);
+      await destroyCollectionExpectSuccess(fungibleCollectionId);
+      await destroyCollectionExpectSuccess(reFungibleCollectionId);
     });
   });
 });
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -36,12 +36,27 @@
   itemId: number;
 }
 
+interface IReFungibleOwner {
+  Fraction: BN;
+  Owner: number[];
+}
+
 interface ITokenDataType {
   Owner: number[];
   ConstData: number[];
   VariableData: number[];
 }
 
+interface IFungibleTokenDataType {
+  Value: BN;
+}
+
+interface IReFungibleTokenDataType {
+  Owner: IReFungibleOwner[];
+  ConstData: number[];
+  VariableData: number[];
+}
+
 export function getGenericResult(events: EventRecord[]): GenericResult {
   const result: GenericResult = {
     success: false,
@@ -394,9 +409,18 @@
 }
 
 export async function
-transferFromExpectSuccess(collectionId: number, tokenId: number, accountFrom: IKeyringPair,
-                          accountTo: IKeyringPair, value: number = 1, type: string = 'NFT') {
+transferFromExpectSuccess(collectionId: number,
+                          tokenId: number,
+                          accountApproved: IKeyringPair,
+                          accountFrom: IKeyringPair,
+                          accountTo: IKeyringPair,
+                          value: number = 1,
+                          type: string = 'NFT') {
   await usingApi(async (api: ApiPromise) => {
+    let balanceBefore = new BN(0);
+    if (type === 'Fungible') {
+      balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN;
+    }
     const transferFromTx = await api.tx.nft.transferFrom(
       accountFrom.address, accountTo.address, collectionId, tokenId, value);
     const events = await submitTransactionAsync(accountFrom, transferFromTx);
@@ -404,21 +428,40 @@
     // tslint:disable-next-line:no-unused-expression
     expect(result.success).to.be.true;
     if (type === 'NFT') {
-      const nftItemData = api.query.nft.nftItemList(collectionId, tokenId) as unknown as ITokenDataType;
-      console.log('NFT data', nftItemData);
+      const nftItemData = await api.query.nft.nftItemList(collectionId, tokenId) as unknown as ITokenDataType;
+      expect(nftItemData.Owner.toString()).to.be.equal(accountTo.address);
     }
     if (type === 'Fungible') {
-      const nftItemData = api.query.nft.fungibleItemList(collectionId, tokenId) as unknown as ITokenDataType;
-      console.log('Fungible data', nftItemData);
+      const balanceAfter = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN;
+      expect(balanceAfter.sub(balanceBefore).toNumber()).to.be.equal(value);
     }
     if (type === 'ReFungible') {
-      const nftItemData = api.query.nft.reFungibleItemList(collectionId, tokenId) as unknown as ITokenDataType;
-      console.log('reFungibleItemList data', nftItemData);
+      const nftItemData =
+        await api.query.nft.reFungibleItemList(collectionId, tokenId) as unknown as IReFungibleTokenDataType;
+      expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(accountTo.address);
+      expect(nftItemData.Owner[0].Fraction.toNumber()).to.be.equal(value);
     }
   });
 }
 
 export async function
+transferFromExpectFail(collectionId: number,
+                       tokenId: number,
+                       accountApproved: IKeyringPair,
+                       accountFrom: IKeyringPair,
+                       accountTo: IKeyringPair,
+                       value: number = 1) {
+  await usingApi(async (api: ApiPromise) => {
+    const transferFromTx = await api.tx.nft.transferFrom(
+      accountFrom.address, accountTo.address, collectionId, tokenId, value);
+    const events = await expect(submitTransactionExpectFailAsync(accountApproved, transferFromTx)).to.be.rejected;
+    const result = getCreateCollectionResult(events);
+    // tslint:disable-next-line:no-unused-expression
+    expect(result.success).to.be.false;
+  });
+}
+
+export async function
 approveExpectFail(collectionId: number,
                   tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number = 1) {
   await usingApi(async (api: ApiPromise) => {