git.delta.rocks / unique-network / refs/commits / 0032fbbc5455

difftreelog

source

tests/src/util/helpers.ts4.4 KiBsourcehistory
1import chai from 'chai';2import chaiAsPromised from 'chai-as-promised';3import type { AccountId, EventRecord } from '@polkadot/types/interfaces';4import { ApiPromise, Keyring } from "@polkadot/api";5import { default as usingApi, submitTransactionAsync } from "../substrate/substrate-api";6import privateKey from '../substrate/privateKey';7import { alicesPublicKey } from "../accounts";8import { strToUTF16, utf16ToStr, hexToStr } from '../util/util';9import { IKeyringPair } from "@polkadot/types/types";10import { BigNumber } from 'bignumber.js';1112chai.use(chaiAsPromised);13const expect = chai.expect;1415type GenericResult = {16  success: boolean,17};1819type CreateCollectionResult = {20  success: boolean,21  collectionId: number22};2324export function getGenericResult(events: EventRecord[]): GenericResult {25  let result: GenericResult = {26    success: false27  }28  events.forEach(({ phase, event: { data, method, section } }) => {29    // console.log(`    ${phase}: ${section}.${method}:: ${data}`);30    if (method == 'ExtrinsicSuccess') {31      result.success = true;32    }33  });34  return result;35}3637function getCreateCollectionResult(events: EventRecord[]): CreateCollectionResult {38  let success = false;39  let collectionId: number = 0;40  events.forEach(({ phase, event: { data, method, section } }) => {41    // console.log(`    ${phase}: ${section}.${method}:: ${data}`);42    if (method == 'ExtrinsicSuccess') {43      success = true;44    } else if ((section == 'nft') && (method == 'Created')) {45      collectionId = parseInt(data[0].toString());46    }47  });48  let result: CreateCollectionResult = {49    success,50    collectionId51  }52  return result;53}5455export async function createCollectionExpectSuccess(name: string, description: string, tokenPrefix: string, mode: string) {56  await usingApi(async (api) => {57    // Get number of collections before the transaction58    const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());5960    // Run the CreateCollection transaction61    const alicePrivateKey = privateKey('//Alice');62    const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), mode);63    const events = await submitTransactionAsync(alicePrivateKey, tx);64    const result = getCreateCollectionResult(events);6566    // Get number of collections after the transaction67    const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());6869    // Get the collection 70    const collection: any = (await api.query.nft.collection(result.collectionId)).toJSON();7172    // What to expect73    expect(result.success).to.be.true;74    expect(result.collectionId).to.be.equal(BcollectionCount);75    expect(collection).to.be.not.null;76    expect(BcollectionCount).to.be.equal(AcollectionCount+1, 'Error: NFT collection NOT created.');77    expect(collection.Owner).to.be.equal(alicesPublicKey);78    expect(utf16ToStr(collection.Name)).to.be.equal(name);79    expect(utf16ToStr(collection.Description)).to.be.equal(description);80    expect(hexToStr(collection.TokenPrefix)).to.be.equal(tokenPrefix);81  });82}83  84export async function createCollectionExpectFailure(name: string, description: string, tokenPrefix: string, mode: string) {85  await usingApi(async (api) => {86    // Get number of collections before the transaction87    const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());8889    // Run the CreateCollection transaction90    const alicePrivateKey = privateKey('//Alice');91    const tx = api.tx.nft.createCollection(name, description, tokenPrefix, mode);92    const events = await submitTransactionAsync(alicePrivateKey, tx);93    const result = getCreateCollectionResult(events);9495    // Get number of collections after the transaction96    const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());9798    // What to expect99    expect(result.success).to.be.false;100    expect(BcollectionCount).to.be.equal(AcollectionCount, 'Error: Collection with incorrect data created.');101  });102}103  104export async function findUnusedAddress(api: ApiPromise): Promise<IKeyringPair> {105  let bal = new BigNumber(0);106  let unused;107  do {108    const randomSeed = 'seed' +  Math.floor(Math.random() * Math.floor(10000));109    const keyring = new Keyring({ type: 'sr25519' });110    unused = keyring.addFromUri(`//${randomSeed}`);111    bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString());112  } while (bal.toFixed() != '0');113  return unused; 114}