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

difftreelog

source

tests/src/transfer.test.ts8.8 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 { ApiPromise } from '@polkadot/api';7import { IKeyringPair } from '@polkadot/types/types';8import { expect } from 'chai';9import { alicesPublicKey, bobsPublicKey } from './accounts';10import getBalance from './substrate/get-balance';11import privateKey from './substrate/privateKey';12import { default as usingApi, submitTransactionAsync } from './substrate/substrate-api';13import {14  burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess,15  destroyCollectionExpectSuccess,16  findUnusedAddress,17  getCreateCollectionResult,18  getCreateItemResult,19  transferExpectFail,20  transferExpectSuccess,21} from './util/helpers';2223let Alice: IKeyringPair;24let Bob: IKeyringPair;25let Charlie: IKeyringPair;2627describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {28  it('Balance transfers and check balance', async () => {29    await usingApi(async (api: ApiPromise) => {30      const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);3132      const alicePrivateKey = privateKey('//Alice');3334      const transfer = api.tx.balances.transfer(bobsPublicKey, 1n);35      const events = await submitTransactionAsync(alicePrivateKey, transfer);36      const result = getCreateItemResult(events);37      // tslint:disable-next-line:no-unused-expression38      expect(result.success).to.be.true;3940      const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);4142      // tslint:disable-next-line:no-unused-expression43      expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;44      // tslint:disable-next-line:no-unused-expression45      expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;46    });47  });4849  it('Inability to pay fees error message is correct', async () => {50    await usingApi(async (api) => {51      // Find unused address52      const pk = await findUnusedAddress(api);5354      const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);55      // const events = await submitTransactionAsync(pk, badTransfer);56      const badTransaction = async () => {57        const events = await submitTransactionAsync(pk, badTransfer);58        const result = getCreateCollectionResult(events);59        // tslint:disable-next-line:no-unused-expression60        expect(result.success).to.be.false;61      };62      expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees , e.g. account balance too low');63    });64  });6566  it('User can transfer owned token', async () => {67    await usingApi(async () => {68      const Alice = privateKey('//Alice');69      const Bob = privateKey('//Bob');70      // nft71      const nftCollectionId = await createCollectionExpectSuccess();72      const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');73      await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');74      // fungible75      const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});76      const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');77      await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');78      // reFungible79      const reFungibleCollectionId = await80      createCollectionExpectSuccess({mode: {type: 'ReFungible'}});81      const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');82      await transferExpectSuccess(83        reFungibleCollectionId,84        newReFungibleTokenId,85        Alice,86        Bob,87        100,88        'ReFungible',89      );90    });91  });92});9394describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {95  before(async () => {96    await usingApi(async () => {97      Alice = privateKey('//Alice');98      Bob = privateKey('//Bob');99      Charlie = privateKey('//Charlie');100    });101  });102  it('Transfer with not existed collection_id', async () => {103    await usingApi(async (api) => {104      // nft105      const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;106      await transferExpectFail(nftCollectionCount + 1, 1, Alice, Bob, 1);107      // fungible108      const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;109      await transferExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob, 1);110      // reFungible111      const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;112      await transferExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob, 1);113    });114  });115  it('Transfer with deleted collection_id', async () => {116    // nft117    const nftCollectionId = await createCollectionExpectSuccess();118    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');119    await destroyCollectionExpectSuccess(nftCollectionId);120    await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');121    // fungible122    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});123    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');124    await destroyCollectionExpectSuccess(fungibleCollectionId);125    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');126    // reFungible127    const reFungibleCollectionId = await128    createCollectionExpectSuccess({mode: {type: 'ReFungible'}});129    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');130    await destroyCollectionExpectSuccess(reFungibleCollectionId);131    await transferExpectFail(132      reFungibleCollectionId,133      newReFungibleTokenId,134      Alice,135      Bob,136      1,137      'ReFungible',138    );139  });140  it('Transfer with not existed item_id', async () => {141    // nft142    const nftCollectionId = await createCollectionExpectSuccess();143    await transferExpectFail(nftCollectionId, 2, Alice, Bob, 1, 'NFT');144    // fungible145    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});146    await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible');147    // reFungible148    const reFungibleCollectionId = await149    createCollectionExpectSuccess({mode: {type: 'ReFungible'}});150    await transferExpectFail(151      reFungibleCollectionId,152      2,153      Alice,154      Bob,155      1,156      'ReFungible',157    );158  });159  it('Transfer with deleted item_id', async () => {160    // nft161    const nftCollectionId = await createCollectionExpectSuccess();162    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');163    await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);164    await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');165    // fungible166    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});167    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');168    await burnItemExpectSuccess(Alice, fungibleCollectionId, newFungibleTokenId, 10);169    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');170    // reFungible171    const reFungibleCollectionId = await172    createCollectionExpectSuccess({mode: {type: 'ReFungible'}});173    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');174    await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1);175    await transferExpectFail(176      reFungibleCollectionId,177      newReFungibleTokenId,178      Alice,179      Bob,180      1,181      'ReFungible',182    );183  });184  it('Transfer with recipient that is not owner', async () => {185    // nft186    const nftCollectionId = await createCollectionExpectSuccess();187    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');188    await transferExpectFail(nftCollectionId, newNftTokenId, Charlie, Bob, 1, 'NFT');189    // fungible190    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});191    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');192    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible');193    // reFungible194    const reFungibleCollectionId = await195    createCollectionExpectSuccess({mode: {type: 'ReFungible'}});196    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');197    await transferExpectFail(198      reFungibleCollectionId,199      newReFungibleTokenId,200      Charlie,201      Bob,202      1,203      'ReFungible',204    );205  });206});