1import {getApiConnection} from '../substrate/substrate-api';2import {expectTxFailure} from './util/helpers';3import {NftIdTuple, getChildren} from './util/fetch';4import {burnNft, createCollection, sendNft, mintNft} from './util/tx';56import chai from 'chai';7import chaiAsPromised from 'chai-as-promised';8import {requirePallets, Pallets} from '../deprecated-helpers/helpers';910chai.use(chaiAsPromised);11const expect = chai.expect;1213describe('integration test: burn nft', () => {14 const Alice = '//Alice';15 const Bob = '//Bob';1617 let api: any;18 before(async function() {19 api = await getApiConnection();20 await requirePallets(this, [Pallets.RmrkCore]);21 });222324 it('burn nft', async () => {25 await createCollection(26 api,27 Alice,28 'test-metadata',29 null,30 'test-symbol',31 ).then(async (collectionId) => {32 const nftId = await mintNft(33 api,34 Alice,35 Alice,36 collectionId,37 'nft-metadata',38 );39 await burnNft(api, Alice, collectionId, nftId);40 });41 });4243 it('burn nft with children', async () => {44 const collectionId = await createCollection(45 api,46 Alice,47 'test-metadata',48 null,49 'test-symbol',50 );5152 const parentNftId = await mintNft(53 api,54 Alice,55 Alice,56 collectionId,57 'nft-metadata',58 );5960 const childNftId = await mintNft(61 api,62 Alice,63 Alice,64 collectionId,65 'nft-metadata',66 );6768 const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];6970 await sendNft(api, 'sent', Alice, collectionId, childNftId, newOwnerNFT);7172 const childrenBefore = await getChildren(api, collectionId, parentNftId);73 expect(childrenBefore.length === 1, 'Error: parent NFT should have children')74 .to.be.true;7576 const child = childrenBefore[0];77 expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id')78 .to.be.true;7980 expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id')81 .to.be.true;8283 await burnNft(api, Alice, collectionId, parentNftId);8485 const childrenAfter = await getChildren(api, collectionId, parentNftId);8687 expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true;88 });8990 it('burn child nft', async () => {91 const collectionId = await createCollection(92 api,93 Alice,94 'test-metadata',95 null,96 'test-symbol',97 );9899 const parentNftId = await mintNft(100 api,101 Alice,102 Alice,103 collectionId,104 'nft-metadata',105 );106107 const childNftId = await mintNft(108 api,109 Alice,110 Alice,111 collectionId,112 'nft-metadata',113 );114115 const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];116117 await sendNft(api, 'sent', Alice, collectionId, childNftId, newOwnerNFT);118119 const childrenBefore = await getChildren(api, collectionId, parentNftId);120 expect(childrenBefore.length === 1, 'Error: parent NFT should have children')121 .to.be.true;122123 const child = childrenBefore[0];124 expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id')125 .to.be.true;126127 expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id')128 .to.be.true;129130 await burnNft(api, Alice, collectionId, childNftId);131132 const childrenAfter = await getChildren(api, collectionId, parentNftId);133134 expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true;135 });136137 it('[negative] burn non-existing NFT', async () => {138 await createCollection(139 api,140 Alice,141 'test-metadata',142 null,143 'test-symbol',144 ).then(async (collectionId) => {145 const tx = burnNft(api, Alice, collectionId, 99999);146 await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);147 });148 });149150 it('[negative] burn not an owner NFT user', async () => {151 await createCollection(152 api,153 Alice,154 'test-metadata',155 null,156 'test-symbol',157 ).then(async (collectionId) => {158 const nftId = await mintNft(159 api,160 Alice,161 Alice,162 collectionId,163 'nft-metadata',164 );165 const tx = burnNft(api, Bob, collectionId, nftId);166 await expectTxFailure(/rmrkCore\.NoPermission/, tx);167 });168 });169170 after(() => {171 api.disconnect();172 });173});