difftreelog
tests: approve respects OwnerCanTransfer
in: master
1 file changed
tests/src/approve.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 } 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 // nft32 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');33 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);34 // fungible35 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 // reFungible39 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 // nft52 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');53 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);54 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);55 // fungible56 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 // reFungible61 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 // nft76 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;77 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);78 // fungible79 const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;80 await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);81 // reFungible82 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 // nft92 const nftCollectionId = await createCollectionExpectSuccess();93 await destroyCollectionExpectSuccess(nftCollectionId);94 await approveExpectFail(nftCollectionId, 1, Alice, Bob);95 // fungible96 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});97 await destroyCollectionExpectSuccess(fungibleCollectionId);98 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);99 // reFungible100 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 // nft112 const nftCollectionId = await createCollectionExpectSuccess();113 await approveExpectFail(nftCollectionId, 2, Alice, Bob);114 // fungible115 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});116 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);117 // reFungible118 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 // nft130 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');131 await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);132 // fungible133 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 // reFungible137 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});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 { IKeyringPair } from '@polkadot/types/types';7import BN from 'bn.js';8import chai from 'chai';9import chaiAsPromised from 'chai-as-promised';10import privateKey from './substrate/privateKey';11import { default as usingApi } from './substrate/substrate-api';12import {13 approveExpectFail,14 approveExpectSuccess,15 createCollectionExpectSuccess,16 createFungibleItemExpectSuccess,17 createItemExpectSuccess,18 destroyCollectionExpectSuccess,19 setCollectionLimitsExpectSuccess,20 transferFromExpectSuccess,21 U128_MAX,22} from './util/helpers';2324chai.use(chaiAsPromised);25const expect = chai.expect;2627describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {28 let Alice: IKeyringPair;29 let Bob: IKeyringPair;30 let Charlie: IKeyringPair;3132 before(async () => {33 await usingApi(async (api) => {34 Alice = privateKey('//Alice');35 Bob = privateKey('//Bob');36 Charlie = privateKey('//Charlie');37 });38 });3940 it('Execute the extrinsic and check approvedList', async () => {41 await usingApi(async (api: ApiPromise) => {42 const nftCollectionId = await createCollectionExpectSuccess();43 // nft44 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');45 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob);46 // fungible47 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});48 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');49 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);50 // reFungible51 const reFungibleCollectionId =52 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});53 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');54 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);55 });56 });5758 it('Remove approval by using 0 amount', async () => {59 await usingApi(async (api: ApiPromise) => {60 const nftCollectionId = await createCollectionExpectSuccess();61 // nft62 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');63 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1);64 await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 0);65 // fungible66 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});67 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');68 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1);69 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0);70 // reFungible71 const reFungibleCollectionId =72 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});73 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');74 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1);75 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0);76 });77 });7879 it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {80 const collectionId = await createCollectionExpectSuccess();81 const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);8283 await approveExpectSuccess(collectionId, itemId, Alice, Charlie);84 });85});8687describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {88 let Alice: IKeyringPair;89 let Bob: IKeyringPair;90 let Charlie: IKeyringPair;9192 before(async () => {93 await usingApi(async (api) => {94 Alice = privateKey('//Alice');95 Bob = privateKey('//Bob');96 Charlie = privateKey('//Charlie');97 });98 });99100 it('Approve for a collection that does not exist', async () => {101 await usingApi(async (api: ApiPromise) => {102 // nft103 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;104 await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob);105 // fungible106 const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;107 await approveExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob);108 // reFungible109 const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;110 await approveExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob);111 });112 });113114 it('Approve for a collection that was destroyed', async () => {115 await usingApi(async (api: ApiPromise) => {116 // nft117 const nftCollectionId = await createCollectionExpectSuccess();118 await destroyCollectionExpectSuccess(nftCollectionId);119 await approveExpectFail(nftCollectionId, 1, Alice, Bob);120 // fungible121 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});122 await destroyCollectionExpectSuccess(fungibleCollectionId);123 await approveExpectFail(fungibleCollectionId, 1, Alice, Bob);124 // reFungible125 const reFungibleCollectionId =126 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});127 await destroyCollectionExpectSuccess(reFungibleCollectionId);128 await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob);129 });130 });131132 it('Approve transfer of a token that does not exist', async () => {133 await usingApi(async (api: ApiPromise) => {134 // nft135 const nftCollectionId = await createCollectionExpectSuccess();136 await approveExpectFail(nftCollectionId, 2, Alice, Bob);137 // fungible138 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});139 await approveExpectFail(fungibleCollectionId, 2, Alice, Bob);140 // reFungible141 const reFungibleCollectionId =142 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});143 await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob);144 });145 });146147 it('Approve using the address that does not own the approved token', async () => {148 await usingApi(async (api: ApiPromise) => {149 const nftCollectionId = await createCollectionExpectSuccess();150 // nft151 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');152 await approveExpectFail(nftCollectionId, newNftTokenId, Bob, Alice);153 // fungible154 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});155 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');156 await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice);157 // reFungible158 const reFungibleCollectionId =159 await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});160 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');161 await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice);162 });163 });164165 it('fails when called by collection owner on non-owned item when OwnerCanTransfer == false', async () => {166 const collectionId = await createCollectionExpectSuccess();167 const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Bob.address);168 await setCollectionLimitsExpectSuccess(Alice, collectionId, { OwnerCanTransfer: false });169170 await approveExpectFail(collectionId, itemId, Alice, Charlie);171 });172});