git.delta.rocks / unique-network / refs/commits / 35ede417a4d0

difftreelog

source

tests/src/burnItem.test.ts12.0 KiBsourcehistory
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';7import { Keyring } from '@polkadot/api';8import { IKeyringPair } from '@polkadot/types/types';9import { 10  createCollectionExpectSuccess, 11  createItemExpectSuccess,12  getGenericResult,13  destroyCollectionExpectSuccess,14  normalizeAccountId,15  addCollectionAdminExpectSuccess,16} from './util/helpers';1718import chai from 'chai';19import chaiAsPromised from 'chai-as-promised';20chai.use(chaiAsPromised);21const expect = chai.expect;2223let alice: IKeyringPair;24let bob: IKeyringPair;2526describe('integration test: ext. burnItem():', () => {27  before(async () => {28    await usingApi(async () => {29      const keyring = new Keyring({ type: 'sr25519' });30      alice = keyring.addFromUri('//Alice');31      bob = keyring.addFromUri('//Bob');32    });33  });3435  it('Burn item in NFT collection', async () => {36    const createMode = 'NFT';37    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});38    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);3940    await usingApi(async (api) => {41      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);42      const events = await submitTransactionAsync(alice, tx);43      const result = getGenericResult(events);44      // Get the item45      const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();46      // What to expect47      // tslint:disable-next-line:no-unused-expression48      expect(result.success).to.be.true;49      // tslint:disable-next-line:no-unused-expression50      expect(item).to.be.null;51    });52  });5354  it('Burn item in Fungible collection', async () => {55    const createMode = 'Fungible';56    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});57    await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens58    const tokenId = 0; // ignored5960    await usingApi(async (api) => {61      // Destroy 1 of 1062      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 1);63      const events = await submitTransactionAsync(alice, tx);64      const result = getGenericResult(events);65  66      // Get alice balance 67      const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();68 69      // What to expect70      expect(result.success).to.be.true;71      expect(balance).to.be.not.null;72      expect(balance.Value).to.be.equal(9);73    });74  });7576  it('Burn item in ReFungible collection', async () => {77    const createMode = 'ReFungible';78    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});79    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);8081    await usingApi(async (api) => {82      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 1);83      const events = await submitTransactionAsync(alice, tx);84      const result = getGenericResult(events);85  86      // Get alice balance 87      const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();88      89      // What to expect90      expect(result.success).to.be.true;91      expect(balance).to.be.null;92    });93  });9495  it('Burn owned portion of item in ReFungible collection', async () => {96    const createMode = 'ReFungible';97    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});98    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);99100    await usingApi(async (api) => {101      // Transfer 1/100 of the token to Bob102      const transfertx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 1);103      const events1 = await submitTransactionAsync(alice, transfertx);104      const result1 = getGenericResult(events1);105106      // Get balances107      const balanceBefore: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();108109      // Bob burns his portion110      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(bob.address), 0);111      const events2 = await submitTransactionAsync(bob, tx);112      const result2 = getGenericResult(events2);113114      // Get balances 115      const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();116      // console.log(balance);117      118      // What to expect before burning119      expect(result1.success).to.be.true;120      expect(balanceBefore).to.be.not.null;121      expect(balanceBefore.Owner.length).to.be.equal(2);122      expect(balanceBefore.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address));123      expect(balanceBefore.Owner[0].Fraction).to.be.equal(99);124      expect(balanceBefore.Owner[1].Owner).to.be.deep.equal(normalizeAccountId(bob.address));125      expect(balanceBefore.Owner[1].Fraction).to.be.equal(1);126127      // What to expect after burning128      expect(result2.success).to.be.true;129      expect(balance).to.be.not.null;130      expect(balance.Owner.length).to.be.equal(1);131      expect(balance.Owner[0].Fraction).to.be.equal(99);132      expect(balance.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address));133    });134135  });136137});138139describe('integration test: ext. burnItem() with admin permissions:', () => {140  before(async () => {141    await usingApi(async () => {142      const keyring = new Keyring({ type: 'sr25519' });143      alice = keyring.addFromUri('//Alice');144      bob = keyring.addFromUri('//Bob');145    });146  });147148  it('Burn item in NFT collection', async () => {149    const createMode = 'NFT';150    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});151    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);152    await addCollectionAdminExpectSuccess(alice, collectionId, bob);153154    await usingApi(async (api) => {155      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);156      const events = await submitTransactionAsync(bob, tx);157      const result = getGenericResult(events);158      // Get the item159      const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();160      // What to expect161      // tslint:disable-next-line:no-unused-expression162      expect(result.success).to.be.true;163      // tslint:disable-next-line:no-unused-expression164      expect(item).to.be.null;165    });166  });167168169  it('Burn item in Fungible collection', async () => {170    const createMode = 'Fungible';171    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});172    await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens173    await addCollectionAdminExpectSuccess(alice, collectionId, bob);174    const tokenId = 0; // ignored175176    await usingApi(async (api) => {177      // Destroy 1 of 10178      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 1);179      const events = await submitTransactionAsync(bob, tx);180      const result = getGenericResult(events);181  182      // Get alice balance 183      const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();184 185      // What to expect186      expect(result.success).to.be.true;187      expect(balance).to.be.not.null;188      expect(balance.Value).to.be.equal(9);189    });190  });191  192  it('Burn item in ReFungible collection', async () => {193    const createMode = 'ReFungible';194    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});195    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);196    await addCollectionAdminExpectSuccess(alice, collectionId, bob);197198    await usingApi(async (api) => {199      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 1);200      const events = await submitTransactionAsync(bob, tx);201      const result = getGenericResult(events);202      // Get alice balance 203      const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON();204      205      // What to expect206      expect(result.success).to.be.true;207      expect(balance).to.be.null;208    });209  });210});211212describe('Negative integration test: ext. burnItem():', () => {213  before(async () => {214    await usingApi(async () => {215      const keyring = new Keyring({ type: 'sr25519' });216      alice = keyring.addFromUri('//Alice');217      bob = keyring.addFromUri('//Bob');218    });219  });220221  it('Burn a token in a destroyed collection', async () => {222    const createMode = 'NFT';223    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});224    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);225    await destroyCollectionExpectSuccess(collectionId);226227    await usingApi(async (api) => {228      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);229      const badTransaction = async function () { 230        await submitTransactionExpectFailAsync(alice, tx);231      };232      await expect(badTransaction()).to.be.rejected;233    });234235  });236237  it('Burn a token that was never created', async () => {238    const createMode = 'NFT';239    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});240    const tokenId = 10;241242    await usingApi(async (api) => {243      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);244      const badTransaction = async function () { 245        await submitTransactionExpectFailAsync(alice, tx);246      };247      await expect(badTransaction()).to.be.rejected;248    });249250  });251252  it('Burn a token using the address that does not own it', async () => {253    const createMode = 'NFT';254    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});255    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);256257    await usingApi(async (api) => {258      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);259      const badTransaction = async function () { 260        await submitTransactionExpectFailAsync(bob, tx);261      };262      await expect(badTransaction()).to.be.rejected;263    });264265  });266267  it('Transfer a burned a token', async () => {268    const createMode = 'NFT';269    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }});270    const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);271272    await usingApi(async (api) => {273274      const burntx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 0);275      const events1 = await submitTransactionAsync(alice, burntx);276      const result1 = getGenericResult(events1);277      expect(result1.success).to.be.true;278  279      const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 0);280      const badTransaction = async function () { 281        await submitTransactionExpectFailAsync(alice, tx);282      };283      await expect(badTransaction()).to.be.rejected;284    });285286  });287288  it('Burn more than owned in Fungible collection', async () => {289    const createMode = 'Fungible';290    const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0 }});291    // Helper creates 10 fungible tokens292    await createItemExpectSuccess(alice, collectionId, createMode);293    const tokenId = 0; // ignored294295    await usingApi(async (api) => {296      // Destroy 11 of 10297      const tx = api.tx.nft.burnItem(collectionId, tokenId, normalizeAccountId(alice.address), 11);298      const badTransaction = async function () { 299        await submitTransactionExpectFailAsync(alice, tx);300      };301      await expect(badTransaction()).to.be.rejected;302      303      // Get alice balance 304      const balance: any = (await api.query.nft.fungibleItemList(collectionId, alice.address)).toJSON();305 306      // What to expect307      expect(balance).to.be.not.null;308      expect(balance.Value).to.be.equal(10);309    });310311  });312313});