difftreelog
transferFrom tests
in: master
3 files changed
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -7,7 +7,7 @@
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,
@@ -29,11 +29,12 @@
const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);
// 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);
// 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);
@@ -54,12 +55,13 @@
await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);
await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);
// 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, 1);
await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);
// 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, 1);
await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);
@@ -81,10 +83,11 @@
const nftCollectionId = await createCollectionExpectSuccess();
await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);
// fungible
- const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);
// reFungible
- const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});
+ const reFungibleCollectionId =
+ await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);
// garbage collection :-D
await destroyCollectionExpectSuccess(nftCollectionId);
@@ -102,11 +105,12 @@
await destroyCollectionExpectSuccess(nftCollectionId);
await approveExpectFail(nftCollectionId, 1, Alice, Bob);
// fungible
- const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await destroyCollectionExpectSuccess(fungibleCollectionId);
await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);
// reFungible
- const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});
+ const reFungibleCollectionId =
+ await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
await destroyCollectionExpectSuccess(reFungibleCollectionId);
await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);
});
@@ -120,10 +124,11 @@
const nftCollectionId = await createCollectionExpectSuccess();
await approveExpectFail(nftCollectionId, 2, Alice, Bob);
// fungible
- const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);
// reFungible
- const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});
+ const reFungibleCollectionId =
+ await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);
// garbage collection :-D
await destroyCollectionExpectSuccess(nftCollectionId);
@@ -141,11 +146,12 @@
const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');
await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);
// fungible
- const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});
+ const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');
await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);
// reFungible
- const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});
+ const reFungibleCollectionId =
+ await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});
const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');
await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);
tests/src/transferFrom.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 approveExpectSuccess,13 createCollectionExpectSuccess,14 createItemExpectSuccess,15 destroyCollectionExpectSuccess,16 transferFromExpectSuccess,17} from './util/helpers';18import {IKeyringPair} from "@polkadot/types/types";1920chai.use(chaiAsPromised);21const expect = chai.expect;2223describe('Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {24 it('Execute the extrinsic and check nftItemList - owner of token', async () => {25 await usingApi(async (api: ApiPromise) => {26 const Alice = privateKey('//Alice');27 const Bob = privateKey('//Bob');28 const Charlie = privateKey('//CHARLIE');29 const nftCollectionId = await createCollectionExpectSuccess();30 console.log('nftCollectionId', nftCollectionId);31 const collectionInfo = await api.query.nft.collection(nftCollectionId);32 console.log('collectionInfo', collectionInfo);33 // nft34 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');35 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);3637 await transferFromExpectSuccess(nftCollectionId, newNftTokenId, Alice, Charlie, 1, 'NFT');3839 // fungible40 /*const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});41 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');42 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);43 // reFungible44 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});45 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');46 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);*/4748 // garbage collection :-D49 await destroyCollectionExpectSuccess(nftCollectionId);50 // await destroyCollectionExpectSuccess(fungibleCollectionId);51 // await destroyCollectionExpectSuccess(reFungibleCollectionId);52 });53 });54});5556describe('Negative Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {57 it('transferFrom for a collection that does not exist', async () => {58 await usingApi(async (api: ApiPromise) => {5960 });61 });6263 it('transferFrom for a collection that was destroyed', async () => {64 await usingApi(async (api: ApiPromise) => {6566 });67 });6869 it('transferFrom a token that does not exist', async () => {70 await usingApi(async (api: ApiPromise) => {7172 });73 });7475 it('transferFrom a token that was deleted', async () => {76 await usingApi(async (api: ApiPromise) => {7778 });79 });8081 it('transferFrom for not approved address', async () => {82 await usingApi(async (api: ApiPromise) => {8384 });85 });8687 it('transferFrom incorrect token count', async () => {88 await usingApi(async (api: ApiPromise) => {8990 });91 });9293 it('execute transferFrom from account that is not owner of collection', async () => {94 await usingApi(async (api: ApiPromise) => {9596 });97 });98});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 chai from 'chai';7import chaiAsPromised from 'chai-as-promised';8import privateKey from './substrate/privateKey';9import { default as usingApi } from './substrate/substrate-api';10import {11 approveExpectFail,12 approveExpectSuccess,13 createCollectionExpectSuccess,14 createItemExpectSuccess,15 destroyCollectionExpectSuccess,16 transferFromExpectFail,17 transferFromExpectSuccess,18} from './util/helpers';1920chai.use(chaiAsPromised);21const expect = chai.expect;2223describe('Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {24 it('Execute the extrinsic and check nftItemList - owner of token', async () => {25 await usingApi(async (api: ApiPromise) => {26 const Alice = privateKey('//Alice');27 const Bob = privateKey('//Bob');28 const Charlie = privateKey('//CHARLIE');29 // nft30 const nftCollectionId = await createCollectionExpectSuccess();31 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');32 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);3334 await transferFromExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1, 'NFT');3536 // fungible37 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});38 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');39 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);40 await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible');41 // reFungible42 const reFungibleCollectionId = await43 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});44 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');45 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);46 await transferFromExpectSuccess(reFungibleCollectionId,47 newReFungibleTokenId, Bob, Alice, Charlie, 1, 'ReFungible');4849 // garbage collection :-D50 await destroyCollectionExpectSuccess(nftCollectionId);51 await destroyCollectionExpectSuccess(fungibleCollectionId);52 await destroyCollectionExpectSuccess(reFungibleCollectionId);53 });54 });55});5657describe('Negative Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {58 it('transferFrom for a collection that does not exist', async () => {59 await usingApi(async (api: ApiPromise) => {60 const Alice = privateKey('//Alice');61 const Bob = privateKey('//Bob');62 const Charlie = privateKey('//CHARLIE');63 // nft64 const nftCollectionId = await createCollectionExpectSuccess();65 await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);6667 await transferFromExpectFail(nftCollectionId + 1, 1, Bob, Alice, Charlie, 1);6869 // fungible70 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});71 await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);7273 await transferFromExpectFail(fungibleCollectionId + 1, 1, Bob, Alice, Charlie, 1);74 // reFungible75 const reFungibleCollectionId = await76 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});77 await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);7879 await transferFromExpectFail(reFungibleCollectionId + 1, 1, Bob, Alice, Charlie, 1);8081 // garbage collection :-D82 await destroyCollectionExpectSuccess(nftCollectionId);83 await destroyCollectionExpectSuccess(fungibleCollectionId);84 await destroyCollectionExpectSuccess(reFungibleCollectionId);85 });86 });8788 /* it('transferFrom for a collection that was destroyed', async () => {89 await usingApi(async (api: ApiPromise) => {90 this test copies approve negative test91 });92 }); */9394 /* it('transferFrom a token that does not exist', async () => {95 await usingApi(async (api: ApiPromise) => {96 this test copies approve negative test97 });98 }); */99100 /* it('transferFrom a token that was deleted', async () => {101 await usingApi(async (api: ApiPromise) => {102 this test copies approve negative test103 });104 }); */105106 it('transferFrom for not approved address', async () => {107 await usingApi(async (api: ApiPromise) => {108 const Alice = privateKey('//Alice');109 const Bob = privateKey('//Bob');110 const Charlie = privateKey('//CHARLIE');111 // nft112 const nftCollectionId = await createCollectionExpectSuccess();113 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');114115 await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);116117 // fungible118 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});119 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');120 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1);121 // reFungible122 const reFungibleCollectionId = await123 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});124 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');125 await transferFromExpectFail(reFungibleCollectionId,126 newReFungibleTokenId, Bob, Alice, Charlie, 1);127128 // garbage collection :-D129 await destroyCollectionExpectSuccess(nftCollectionId);130 await destroyCollectionExpectSuccess(fungibleCollectionId);131 await destroyCollectionExpectSuccess(reFungibleCollectionId);132 });133 });134135 it('transferFrom incorrect token count', async () => {136 await usingApi(async (api: ApiPromise) => {137 const Alice = privateKey('//Alice');138 const Bob = privateKey('//Bob');139 const Charlie = privateKey('//CHARLIE');140 // nft141 const nftCollectionId = await createCollectionExpectSuccess();142 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');143 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);144145 await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 2);146147 // fungible148 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});149 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');150 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);151 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2);152 // reFungible153 const reFungibleCollectionId = await154 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});155 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');156 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);157 await transferFromExpectFail(reFungibleCollectionId,158 newReFungibleTokenId, Bob, Alice, Charlie, 2);159160 // garbage collection :-D161 await destroyCollectionExpectSuccess(nftCollectionId);162 await destroyCollectionExpectSuccess(fungibleCollectionId);163 await destroyCollectionExpectSuccess(reFungibleCollectionId);164 });165 });166167 it('execute transferFrom from account that is not owner of collection', async () => {168 await usingApi(async (api: ApiPromise) => {169 const Alice = privateKey('//Alice');170 const Bob = privateKey('//Bob');171 const Charlie = privateKey('//CHARLIE');172 const Dave = privateKey('//DAVE');173 // nft174 const nftCollectionId = await createCollectionExpectSuccess();175 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');176 try {177 await approveExpectFail(nftCollectionId, newNftTokenId, Dave, Bob);178 await transferFromExpectFail(nftCollectionId, newNftTokenId, Dave, Alice, Charlie, 1);179 } catch (e) {180 // tslint:disable-next-line:no-unused-expression181 expect(e).to.be.exist;182 }183184 // await transferFromExpectFail(nftCollectionId, newNftTokenId, Dave, Alice, Charlie, 1);185186 // fungible187 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});188 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');189 try {190 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Bob);191 await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Dave, Alice, Charlie, 1);192 } catch (e) {193 // tslint:disable-next-line:no-unused-expression194 expect(e).to.be.exist;195 }196 // reFungible197 const reFungibleCollectionId = await198 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});199 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');200 try {201 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob);202 await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Alice, Charlie, 1);203 } catch (e) {204 // tslint:disable-next-line:no-unused-expression205 expect(e).to.be.exist;206 }207 // garbage collection :-D208 await destroyCollectionExpectSuccess(nftCollectionId);209 await destroyCollectionExpectSuccess(fungibleCollectionId);210 await destroyCollectionExpectSuccess(reFungibleCollectionId);211 });212 });213});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) => {