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

difftreelog

source

tests/src/util/helpers.ts4.5 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): Promise<number> {56  let collectionId: number = 0;57  await usingApi(async (api) => {58    // Get number of collections before the transaction59    const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());6061    // Run the CreateCollection transaction62    const alicePrivateKey = privateKey('//Alice');63    const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), mode);64    const events = await submitTransactionAsync(alicePrivateKey, tx);65    const result = getCreateCollectionResult(events);6667    // Get number of collections after the transaction68    const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());6970    // Get the collection 71    const collection: any = (await api.query.nft.collection(result.collectionId)).toJSON();7273    // What to expect74    expect(result.success).to.be.true;75    expect(result.collectionId).to.be.equal(BcollectionCount);76    expect(collection).to.be.not.null;77    expect(BcollectionCount).to.be.equal(AcollectionCount+1, 'Error: NFT collection NOT created.');78    expect(collection.Owner).to.be.equal(alicesPublicKey);79    expect(utf16ToStr(collection.Name)).to.be.equal(name);80    expect(utf16ToStr(collection.Description)).to.be.equal(description);81    expect(hexToStr(collection.TokenPrefix)).to.be.equal(tokenPrefix);8283    collectionId = result.collectionId;84  });8586  return collectionId;87}88  89export async function createCollectionExpectFailure(name: string, description: string, tokenPrefix: string, mode: string) {90  await usingApi(async (api) => {91    // Get number of collections before the transaction92    const AcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());9394    // Run the CreateCollection transaction95    const alicePrivateKey = privateKey('//Alice');96    const tx = api.tx.nft.createCollection(name, description, tokenPrefix, mode);97    const events = await submitTransactionAsync(alicePrivateKey, tx);98    const result = getCreateCollectionResult(events);99100    // Get number of collections after the transaction101    const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString());102103    // What to expect104    expect(result.success).to.be.false;105    expect(BcollectionCount).to.be.equal(AcollectionCount, 'Error: Collection with incorrect data created.');106  });107}108  109export async function findUnusedAddress(api: ApiPromise): Promise<IKeyringPair> {110  let bal = new BigNumber(0);111  let unused;112  do {113    const randomSeed = 'seed' +  Math.floor(Math.random() * Math.floor(10000));114    const keyring = new Keyring({ type: 'sr25519' });115    unused = keyring.addFromUri(`//${randomSeed}`);116    bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString());117  } while (bal.toFixed() != '0');118  return unused; 119}