difftreelog
transferFrom tests
in: master
3 files changed
tests/src/approve.test.tsdiffbeforeafterboth1//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});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});tests/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);
});
});
});
tests/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) => {