git.delta.rocks / unique-network / refs/commits / db7a4acde0a0

difftreelog

source

tests/src/refungible.test.ts7.1 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {default as usingApi} from './substrate/substrate-api';18import {IKeyringPair} from '@polkadot/types/types';19import {20  createCollectionExpectSuccess,21  getBalance,22  createMultipleItemsExpectSuccess,23  isTokenExists,24  getLastTokenId,25  getAllowance,26  approve,27  transferFrom,28  createCollection,29  createRefungibleToken,30  transfer,31  burnItem,32} from './util/helpers';3334import chai from 'chai';35import chaiAsPromised from 'chai-as-promised';36chai.use(chaiAsPromised);37const expect = chai.expect;3839let alice: IKeyringPair;40let bob: IKeyringPair;4142describe('integration test: Refungible functionality:', () => {43  before(async () => {44    await usingApi(async (api, privateKeyWrapper) => {45      alice = privateKeyWrapper('//Alice');46      bob = privateKeyWrapper('//Bob');47    });48  });4950  it('Create refungible collection and token', async () => {51    await usingApi(async api => {52      const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}});53      expect(createCollectionResult.success).to.be.true;    54      const collectionId  = createCollectionResult.collectionId;5556      const itemCountBefore = await getLastTokenId(api, collectionId);57      const result = await createRefungibleToken(api, alice, collectionId, 100n);5859      const itemCountAfter = await getLastTokenId(api, collectionId);6061      // What to expect62      // tslint:disable-next-line:no-unused-expression63      expect(result.success).to.be.true;64      expect(itemCountAfter).to.be.equal(itemCountBefore + 1);65      expect(collectionId).to.be.equal(result.collectionId);66      expect(itemCountAfter.toString()).to.be.equal(result.itemId.toString());67    });68  });6970  it('Transfer token pieces', async () => {71    await usingApi(async api => {72      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;73      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;7475      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);76      expect(await transfer(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;7778      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(40n);79      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(60n);80      await expect(transfer(api, collectionId, tokenId, alice, bob, 41n)).to.eventually.be.rejected;81    });82  });8384  it('Create multiple tokens', async () => {85    const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});86    const args = [87      {ReFungible: {pieces: 1}},88      {ReFungible: {pieces: 2}},89      {ReFungible: {pieces: 100}},90    ];91    await createMultipleItemsExpectSuccess(alice, collectionId, args);9293    await usingApi(async api => {      94      const tokenId = await getLastTokenId(api, collectionId);95      expect(tokenId).to.be.equal(3);96      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);97    });98  });99100  it('Burn some pieces', async () => {101    await usingApi(async api => {   102      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;103      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;104      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;105      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);106      expect(await burnItem(api, alice, collectionId, tokenId, 99n)).to.be.true;107      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;108      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(1n);109    });110  });111112  it('Burn all pieces', async () => {113    await usingApi(async api => {   114      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;115      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;116      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;117      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);118      expect(await burnItem(api, alice, collectionId, tokenId, 100n)).to.be.true;119      expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;120    });121  });122123  it('Burn some pieces for multiple users', async () => {124    await usingApi(async api => {   125      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;126      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;127      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;128129      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);130      expect(await transfer(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;131132      133      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(40n);134      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(60n);135      expect(await burnItem(api, alice, collectionId, tokenId, 40n)).to.be.true;136137      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(0n);138      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;139      expect(await burnItem(api, bob, collectionId, tokenId, 59n)).to.be.true;140141      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(1n);142      expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;143      expect(await burnItem(api, bob, collectionId, tokenId, 1n)).to.be.true;144      145      expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;146    });147  });148149  it('Set allowance for token', async () => {150    await usingApi(async api => {151      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;152      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;153154      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);155156      expect(await approve(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;157      expect(await getAllowance(api, collectionId, alice, bob, tokenId)).to.be.equal(60n);158159      expect(await transferFrom(api, collectionId, tokenId, bob, alice, bob,  20n)).to.be.true;160      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(80n);161      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(20n);162      expect(await getAllowance(api, collectionId, alice, bob, tokenId)).to.be.equal(40n);163    });164  });165});