12345import { 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 30 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 37 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 42 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 50 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 64 const nftCollectionId = await createCollectionExpectSuccess();65 await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);6667 await transferFromExpectFail(nftCollectionId + 1, 1, Bob, Alice, Charlie, 1);6869 70 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 75 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 82 await destroyCollectionExpectSuccess(nftCollectionId);83 await destroyCollectionExpectSuccess(fungibleCollectionId);84 await destroyCollectionExpectSuccess(reFungibleCollectionId);85 });86 });8788 899091929394 9596979899100 101102103104105106 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 112 const nftCollectionId = await createCollectionExpectSuccess();113 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');114115 await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1);116117 118 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 122 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 129 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 141 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 148 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 153 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 161 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 174 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 181 expect(e).to.be.exist;182 }183184 185186 187 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 194 expect(e).to.be.exist;195 }196 197 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 205 expect(e).to.be.exist;206 }207 208 await destroyCollectionExpectSuccess(nftCollectionId);209 await destroyCollectionExpectSuccess(fungibleCollectionId);210 await destroyCollectionExpectSuccess(reFungibleCollectionId);211 });212 });213});