123456import { ApiPromise } from '@polkadot/api';7import { expect } from 'chai';8import { alicesPublicKey, bobsPublicKey } from './accounts';9import getBalance from './substrate/get-balance';10import privateKey from './substrate/privateKey';11import {default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api';12import {13 approveExpectSuccess,14 createCollectionExpectSuccess, createItemExpectSuccess,15 findUnusedAddress,16 getCreateCollectionResult,17 getCreateItemResult,18 transferExpectSuccess,19} from './util/helpers';2021describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {22 it('Balance transfers and check balance', async () => {23 await usingApi(async (api: ApiPromise) => {24 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);2526 const alicePrivateKey = privateKey('//Alice');2728 const transfer = api.tx.balances.transfer(bobsPublicKey, 1n);29 const events = await submitTransactionAsync(alicePrivateKey, transfer);30 const result = getCreateItemResult(events);31 32 expect(result.success).to.be.true;3334 const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);3536 37 expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;38 39 expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;40 });41 });4243 it('Inability to pay fees error message is correct', async () => {44 await usingApi(async (api) => {45 46 const pk = await findUnusedAddress(api);4748 const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);49 50 const badTransaction = async () => {51 const events = await submitTransactionAsync(pk, badTransfer);52 const result = getCreateCollectionResult(events);53 54 expect(result.success).to.be.false;55 };56 expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees , e.g. account balance too low');57 });58 });5960 it('Create collection, balance transfers and check balance', async () => {61 const Alice = privateKey('//Alice');62 const Bob = privateKey('//Bob');63 const Charlie = privateKey('//CHARLIE');64 65 const nftCollectionId = await createCollectionExpectSuccess();66 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');6768 await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');6970 71 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});72 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');73 await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob);74 await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');75 76 const reFungibleCollectionId = await77 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});78 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');79 await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob);80 await transferExpectSuccess(reFungibleCollectionId,81 newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');82 });83});8485describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {86 it('Transfer with not existed collection_id', async () => {8788 });89 it('Transfer with deleted collection_id', async () => {9091 });92 it('Transfer with not existed item_id', async () => {9394 });95 it('Transfer with deleted item_id', async () => {9697 });98 it('Transfer with recipient that is not owner', async () => {99100 });101});