1234567891011121314151617import {IKeyringPair} from '@polkadot/types/types';18import {expect, itSub, Pallets, usingPlaygrounds} from './util/playgrounds';1920let donor: IKeyringPair;21let alice: IKeyringPair;22let bob: IKeyringPair;2324describe('integration test: ext. burnItem():', () => {25 before(async () => {26 await usingPlaygrounds(async (helper, privateKey) => {27 donor = privateKey('//Alice');28 [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);29 });30 });3132 itSub('Burn item in NFT collection', async ({helper}) => {33 const collection = await helper.nft.mintCollection(alice);34 const token = await collection.mintToken(alice);3536 await token.burn(alice);37 expect(await token.isExist()).to.be.false;38 });3940 itSub('Burn item in Fungible collection', async ({helper}) => {41 const collection = await helper.ft.mintCollection(alice, {}, 10);42 await collection.mint(alice, 10n);4344 await collection.burnTokens(alice, 1n);45 expect(await collection.getBalance({Substrate: alice.address})).to.eq(9n);46 });4748 itSub.ifWithPallets('Burn item in ReFungible collection', [Pallets.ReFungible], async function({helper}) {49 const collection = await helper.rft.mintCollection(alice);50 const token = await collection.mintToken(alice, 100n);5152 await token.burn(alice, 90n);53 expect(await token.getBalance({Substrate: alice.address})).to.eq(10n);5455 await token.burn(alice, 10n);56 expect(await token.getBalance({Substrate: alice.address})).to.eq(0n);57 });5859 itSub.ifWithPallets('Burn owned portion of item in ReFungible collection', [Pallets.ReFungible], async function({helper}) {60 const collection = await helper.rft.mintCollection(alice);61 const token = await collection.mintToken(alice, 100n);6263 await token.transfer(alice, {Substrate: bob.address}, 1n);6465 expect(await token.getBalance({Substrate: alice.address})).to.eq(99n);66 expect(await token.getBalance({Substrate: bob.address})).to.eq(1n);6768 await token.burn(bob, 1n);6970 expect(await token.getBalance({Substrate: alice.address})).to.eq(99n);71 expect(await token.getBalance({Substrate: bob.address})).to.eq(0n);72 });73});7475describe('integration test: ext. burnItem() with admin permissions:', () => {76 before(async () => {77 await usingPlaygrounds(async (helper, privateKey) => {78 donor = privateKey('//Alice');79 [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);80 });81 });8283 itSub('Burn item in NFT collection', async ({helper}) => {84 const collection = await helper.nft.mintCollection(alice);85 await collection.setLimits(alice, {ownerCanTransfer: true});86 await collection.addAdmin(alice, {Substrate: bob.address});87 const token = await collection.mintToken(alice);8889 await token.burnFrom(bob, {Substrate: alice.address});90 expect(await token.isExist()).to.be.false;91 });9293 itSub('Burn item in Fungible collection', async ({helper}) => {94 const collection = await helper.ft.mintCollection(alice, {}, 0);95 await collection.setLimits(alice, {ownerCanTransfer: true});96 await collection.addAdmin(alice, {Substrate: bob.address});97 await collection.mint(alice, 10n);9899 await collection.burnTokensFrom(bob, {Substrate: alice.address}, 1n);100 expect(await collection.getBalance({Substrate: alice.address})).to.eq(9n);101 });102103 itSub.ifWithPallets('Burn item in ReFungible collection', [Pallets.ReFungible], async function({helper}) {104 const collection = await helper.rft.mintCollection(alice);105 await collection.setLimits(alice, {ownerCanTransfer: true});106 await collection.addAdmin(alice, {Substrate: bob.address});107 const token = await collection.mintToken(alice, 100n);108109 await token.burnFrom(bob, {Substrate: alice.address}, 100n);110 expect(await token.isExist()).to.be.false;111 });112});113114describe('Negative integration test: ext. burnItem():', () => {115 before(async () => {116 await usingPlaygrounds(async (helper, privateKey) => {117 donor = privateKey('//Alice');118 [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);119 });120 });121122 itSub('Burn a token that was never created', async ({helper}) => {123 const collection = await helper.nft.mintCollection(alice);124 await expect(collection.burnToken(alice, 10)).to.be.rejectedWith('common.TokenNotFound');125 });126127 itSub('Burn a token using the address that does not own it', async ({helper}) => {128 const collection = await helper.nft.mintCollection(alice);129 const token = await collection.mintToken(alice);130131 await expect(token.burn(bob)).to.be.rejectedWith('common.NoPermission');132 });133134 itSub('Transfer a burned token', async ({helper}) => {135 const collection = await helper.nft.mintCollection(alice);136 const token = await collection.mintToken(alice);137 await token.burn(alice);138139 await expect(token.transfer(alice, {Substrate: bob.address})).to.be.rejectedWith('common.TokenNotFound');140 });141142 itSub('Burn more than owned in Fungible collection', async ({helper}) => {143 const collection = await helper.ft.mintCollection(alice, {}, 0);144 await collection.mint(alice, 10n);145146 await expect(collection.burnTokens(alice, 11n)).to.be.rejectedWith('common.TokenValueTooLow');147 expect(await collection.getBalance({Substrate: alice.address})).to.eq(10n);148 });149});