git.delta.rocks / unique-network / refs/commits / 6f2e0cc4002e

difftreelog

source

tests/src/transfer.test.ts8.6 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 (api) => {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(reFungibleCollectionId,83        newReFungibleTokenId, Alice, Bob, 100, 'ReFungible');84    });85  });86});8788describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {89  before(async () => {90    await usingApi(async (api: ApiPromise) => {91      Alice = privateKey('//Alice');92      Bob = privateKey('//Bob');93      Charlie = privateKey('//Charlie');94    });95  });96  it('Transfer with not existed collection_id', async () => {97    await usingApi(async (api) => {98      // nft99      const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;100      await transferExpectFail(nftCollectionCount + 1, 1, Alice, Bob, 1);101      // fungible102      const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;103      await transferExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob, 1);104      // reFungible105      const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;106      await transferExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob, 1);107    });108  });109  it('Transfer with deleted collection_id', async () => {110    // nft111    const nftCollectionId = await createCollectionExpectSuccess();112    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');113    await destroyCollectionExpectSuccess(nftCollectionId);114    await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');115    // fungible116    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});117    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');118    await destroyCollectionExpectSuccess(fungibleCollectionId);119    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');120    // reFungible121    const reFungibleCollectionId = await122      createCollectionExpectSuccess({mode: {type: 'ReFungible'}});123    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');124    await destroyCollectionExpectSuccess(reFungibleCollectionId);125    await transferExpectFail(reFungibleCollectionId,126      newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');127  });128  it('Transfer with not existed item_id', async () => {129    // nft130    const nftCollectionId = await createCollectionExpectSuccess();131    await transferExpectFail(nftCollectionId, 2, Alice, Bob, 1, 'NFT');132    // fungible133    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});134    await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible');135    // reFungible136    const reFungibleCollectionId = await137      createCollectionExpectSuccess({mode: {type: 'ReFungible'}});138    await transferExpectFail(reFungibleCollectionId,139      2, Alice, Bob, 1, 'ReFungible');140  });141  it('Transfer with deleted item_id', async () => {142    // nft143    const nftCollectionId = await createCollectionExpectSuccess();144    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');145    await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);146    await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');147    // fungible148    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});149    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');150    await burnItemExpectSuccess(Alice, fungibleCollectionId, newFungibleTokenId, 10);151    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');152    // reFungible153    const reFungibleCollectionId = await154      createCollectionExpectSuccess({mode: {type: 'ReFungible'}});155    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');156    await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1);157    await transferExpectFail(reFungibleCollectionId,158      newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');159  });160  it('Transfer with recipient that is not owner', async () => {161    // nft162    const nftCollectionId = await createCollectionExpectSuccess();163    const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');164    await transferExpectFail(nftCollectionId, newNftTokenId, Charlie, Bob, 1, 'NFT');165    // fungible166    const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});167    const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');168    await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible');169    // reFungible170    const reFungibleCollectionId = await171      createCollectionExpectSuccess({mode: {type: 'ReFungible'}});172    const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');173    await transferExpectFail(reFungibleCollectionId,174      newReFungibleTokenId, Charlie, Bob, 1, 'ReFungible');175  });176});