12345import { 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 29 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');30 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);31 32 const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});33 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');34 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);35 36 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});37 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');38 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);3940 41 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 53 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');54 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);55 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);56 57 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 62 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 68 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 81 const nftCollectionId = await createCollectionExpectSuccess();82 await approveExpectFail(nftCollectionId + 1, 1, Alice, Bob);83 84 const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});85 await approveExpectFail(fungibleCollectionId + 1, 1, Alice, Bob);86 87 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});88 await approveExpectFail(reFungibleCollectionId + 1, 1, Alice, Bob);89 90 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 101 const nftCollectionId = await createCollectionExpectSuccess();102 await destroyCollectionExpectSuccess(nftCollectionId);103 await approveExpectFail(nftCollectionId, 1, Alice, Bob);104 105 const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});106 await destroyCollectionExpectSuccess(fungibleCollectionId);107 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);108 109 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 120 const nftCollectionId = await createCollectionExpectSuccess();121 await approveExpectFail(nftCollectionId, 2, Alice, Bob);122 123 const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});124 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);125 126 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});127 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);128 129 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 141 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');142 await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);143 144 const fungibleCollectionId = await createCollectionExpectSuccess({mode: 'Fungible'});145 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');146 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);147 148 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: 'ReFungible'});149 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');150 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);151152 153 await destroyCollectionExpectSuccess(nftCollectionId);154 await destroyCollectionExpectSuccess(fungibleCollectionId);155 await destroyCollectionExpectSuccess(reFungibleCollectionId);156 });157 });158});