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 createFungibleItemExpectSuccess,16 createItemExpectSuccess,17 destroyCollectionExpectSuccess,18 transferFromExpectSuccess,19 U128_MAX,20} from './util/helpers';2122chai.use(chaiAsPromised);23const expect = chai.expect;2425describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {26 it('Execute the extrinsic and check approvedList', async () => {27 await usingApi(async (api: ApiPromise) => {28 const Alice = privateKey('//Alice');29 const Bob = privateKey('//Bob');30 const nftCollectionId = await createCollectionExpectSuccess();31 32 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');33 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);34 35 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});36 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');37 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);38 39 const reFungibleCollectionId =40 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});41 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');42 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);43 });44 });4546 it('Remove approval by using 0 amount', async () => {47 await usingApi(async (api: ApiPromise) => {48 const Alice = privateKey('//Alice');49 const Bob = privateKey('//Bob');50 const nftCollectionId = await createCollectionExpectSuccess();51 52 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');53 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);54 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);55 56 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});57 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');58 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);59 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);60 61 const reFungibleCollectionId =62 await createCollectionExpectSuccess({mode: {type: '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);66 });67 });68});6970describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {71 it('Approve for a collection that does not exist', async () => {72 await usingApi(async (api: ApiPromise) => {73 const Alice = privateKey('//Alice');74 const Bob = privateKey('//Bob');75 76 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;77 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);78 79 const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;80 await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);81 82 const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;83 await approveExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob);84 });85 });8687 it('Approve for a collection that was destroyed', async () => {88 await usingApi(async (api: ApiPromise) => {89 const Alice = privateKey('//Alice');90 const Bob = privateKey('//Bob');91 92 const nftCollectionId = await createCollectionExpectSuccess();93 await destroyCollectionExpectSuccess(nftCollectionId);94 await approveExpectFail(nftCollectionId, 1, Alice, Bob);95 96 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});97 await destroyCollectionExpectSuccess(fungibleCollectionId);98 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);99 100 const reFungibleCollectionId =101 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});102 await destroyCollectionExpectSuccess(reFungibleCollectionId);103 await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);104 });105 });106107 it('Approve transfer of a token that does not exist', async () => {108 await usingApi(async (api: ApiPromise) => {109 const Alice = privateKey('//Alice');110 const Bob = privateKey('//Bob');111 112 const nftCollectionId = await createCollectionExpectSuccess();113 await approveExpectFail(nftCollectionId, 2, Alice, Bob);114 115 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});116 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);117 118 const reFungibleCollectionId =119 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});120 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);121 });122 });123124 it('Approve using the address that does not own the approved token', async () => {125 await usingApi(async (api: ApiPromise) => {126 const Alice = privateKey('//Alice');127 const Bob = privateKey('//Bob');128 const nftCollectionId = await createCollectionExpectSuccess();129 130 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');131 await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);132 133 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});134 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');135 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);136 137 const reFungibleCollectionId =138 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});139 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');140 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);141 });142 });143});