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 } 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: {type: 'Fungible', decimalPoints: 0}});33 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');34 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);35 36 const reFungibleCollectionId =37 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});38 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');39 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);40 });41 });4243 it('Remove approval by using 0 amount', async () => {44 await usingApi(async (api: ApiPromise) => {45 const Alice = privateKey('//Alice');46 const Bob = privateKey('//Bob');47 const nftCollectionId = await createCollectionExpectSuccess();48 49 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');50 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);51 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);52 53 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});54 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');55 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);56 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);57 58 const reFungibleCollectionId =59 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});60 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');61 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);62 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);63 });64 });65});6667describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {68 it('Approve for a collection that does not exist', async () => {69 await usingApi(async (api: ApiPromise) => {70 const Alice = privateKey('//Alice');71 const Bob = privateKey('//Bob');72 73 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;74 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);75 76 const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;77 await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);78 79 const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;80 await approveExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob);81 });82 });8384 it('Approve for a collection that was destroyed', async () => {85 await usingApi(async (api: ApiPromise) => {86 const Alice = privateKey('//Alice');87 const Bob = privateKey('//Bob');88 89 const nftCollectionId = await createCollectionExpectSuccess();90 await destroyCollectionExpectSuccess(nftCollectionId);91 await approveExpectFail(nftCollectionId, 1, Alice, Bob);92 93 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});94 await destroyCollectionExpectSuccess(fungibleCollectionId);95 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);96 97 const reFungibleCollectionId =98 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});99 await destroyCollectionExpectSuccess(reFungibleCollectionId);100 await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);101 });102 });103104 it('Approve transfer of a token that does not exist', async () => {105 await usingApi(async (api: ApiPromise) => {106 const Alice = privateKey('//Alice');107 const Bob = privateKey('//Bob');108 109 const nftCollectionId = await createCollectionExpectSuccess();110 await approveExpectFail(nftCollectionId, 2, Alice, Bob);111 112 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});113 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);114 115 const reFungibleCollectionId =116 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});117 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);118 });119 });120121 it('Approve using the address that does not own the approved token', async () => {122 await usingApi(async (api: ApiPromise) => {123 const Alice = privateKey('//Alice');124 const Bob = privateKey('//Bob');125 const nftCollectionId = await createCollectionExpectSuccess();126 127 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');128 await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);129 130 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});131 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');132 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);133 134 const reFungibleCollectionId =135 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});136 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');137 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);138 });139 });140});