Files
api/packages/api-derive/test/e2e/rx.spec.ts
T
Stefanie Doll fca5fb7110 Added derive e2e tests and documentation (#898)
* export IExtrinsic

* Switch to localhos & enable tests in promise.spec

* Derive.accounts docs (copy from my other branch) + code examples

* Fixed existing accounts tests and added tests for all accounts.derive methods

* e2e tests and docs/ examples for balances.all and balances.fees

* Removed emty lines below jsdoc info

* tests & documentation dor derive.chain

* Addressed comments from former PR https://github.com/polkadot-js/api/pull/869

* Removed unused import

* obseralbe -> observable

* undo keith' commit

* use correct jsdocs syntax

* Re-enable skip
2019-06-12 16:45:45 +12:00

225 lines
7.5 KiB
TypeScript

// Copyright 2017-2019 @polkadot/api-derive authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import BN from 'bn.js';
import ApiRx from '@plugnet/api/rx/Api';
import { ApiInterface$Rx } from '@plugnet/api/types';
import { AccountId, AccountIndex, Balance, BlockNumber } from '@plugnet/types';
import { WsProvider } from '@plugnet/rpc-provider';
const WS_LOCAL = 'ws://127.0.0.1:9944/';
// const WS_POC3 = 'wss://poc3-rpc.polkadot.io/';
// Dev account Alice
const ID = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';
const IX = 'F7Hs';
describe.skip('derive e2e', () => {
let api: ApiInterface$Rx;
beforeAll(() => {
jest.setTimeout(10000);
});
beforeEach(async (done) => {
api = await ApiRx.create(new WsProvider(WS_LOCAL)).toPromise();
done();
});
// These derive.accounts tests only work on localhost, not the poc-3 URL
// (and it is assuming it sent at least 1 tx)
describe('derive.accounts', () => {
describe('idAndIndex', () => {
it('looks up AccountId & AccountIndex from AccountId', async (done) => {
// @ts-ignore silence warning until we have static types here
api.derive.accounts.idAndIndex(ID).subscribe(([accountId, accountIndex]) => {
expect(accountId.toString()).toEqual(ID);
// The first emitted value for ix is undefined when passing the ID
if (accountIndex) {
expect(accountIndex.toString()).toEqual(IX);
} else {
expect(accountIndex).toEqual(undefined);
}
done();
});
});
it('looks up AccountId & AccountIndex from AccountIndex', async (done) => {
// @ts-ignore silence warning until we have static types here
api.derive.accounts.idAndIndex(IX).subscribe(([accountId, accountIndex]) => {
// The first emitted value for id is undefined when passing the IX
if (accountId) {
expect(accountId.toString()).toEqual(ID);
} else {
expect(accountId).toEqual(undefined);
}
expect(accountIndex.toString()).toEqual(IX);
done();
});
});
});
describe('indexToId', () => {
it('looks up AccountId from AccountIndex', async (done) => {
// @ts-ignore silence warning until we have static types here
api.derive.accounts.indexToId(IX).subscribe((accountId) => {
// The first emitted value for accountId is undefined when passing the IX
if (accountId) {
expect(accountId instanceof AccountId).toBe(true);
expect(accountId.toString()).toEqual(ID);
} else {
expect(accountId).toEqual(undefined);
}
done();
});
});
});
describe('idToIndex', () => {
it('looks up AccountIndex from AccountId', async (done) => {
// @ts-ignore silence warning until we have static types here
api.derive.accounts.idToIndex(ID).subscribe((accountIndex) => {
// The first emitted value for AccountIndex is undefined when passing the ID
if (accountIndex) {
expect(accountIndex instanceof AccountIndex).toBe(true);
expect(accountIndex.toString()).toEqual(IX);
} else {
expect(accountIndex).toEqual(undefined);
}
done();
});
});
});
describe('indexes', () => {
it('looks up all AccountIndexes', async (done) => {
// @ts-ignore silence warning until we have static types here
api.derive.accounts.indexes().subscribe((accountIndexes) => {
// A local dev chain should have the AccountIndex of Alice
expect(accountIndexes).toHaveProperty(
ID,
new AccountIndex(IX)
);
done();
});
});
});
});
// these only work on localhost, not the poc-3 URL
// (and it is assuming it sent at least 1 tx)
describe('derive.balances', () => {
describe('all', () => {
it('It returns an object with all relevant balance information of an account', async (done) => {
api.derive.balances.all(ID).subscribe((balances) => {
expect(balances).toEqual(expect.objectContaining({
accountId: expect.any(AccountId),
availableBalance: expect.any(Balance),
freeBalance: expect.any(Balance),
lockedBalance: expect.any(Balance),
reservedBalance: expect.any(Balance),
vestedBalance: expect.any(Balance),
votingBalance: expect.any(Balance)
}));
done();
});
});
});
describe('fees', () => {
it('fees: It returns an object with all relevant fees of type BN', async (done) => {
api.derive.balances.fees().subscribe((fees) => {
expect(fees).toEqual(expect.objectContaining({
creationFee: expect.any(BN),
existentialDeposit: expect.any(BN),
transactionBaseFee: expect.any(BN),
transactionByteFee: expect.any(BN),
transferFee: expect.any(BN)
}));
done();
});
});
});
});
describe('derive.chain', () => {
describe('bestNumber', () => {
it('Get the latest block number', async (done) => {
api.derive.chain.bestNumber().subscribe((blockNumber) => {
expect(blockNumber instanceof BlockNumber).toBe(true);
expect((blockNumber as BlockNumber).gten(0)).toBe(true);
done();
});
});
});
describe('bestNumberFinalized', () => {
it('Get the latest finalised block number', async (done) => {
api.derive.chain.bestNumberFinalized().subscribe((blockNumber) => {
expect(blockNumber instanceof BlockNumber).toBe(true);
expect((blockNumber as BlockNumber).gten(0)).toBe(true);
done();
});
});
});
describe('bestNumberLag', () => {
it('lag between finalised head and best head', async (done) => {
api.derive.chain.bestNumberLag().subscribe((numberLag) => {
expect(numberLag instanceof BlockNumber).toBe(true);
expect((numberLag as BlockNumber).gten(0)).toBe(true);
done();
});
});
});
describe('getHeader', () => {
it('gets a specific block header and extended with it\`s author', async (done) => {
api.derive.chain.getHeader().subscribe((headerExtended) => {
// WIP
expect(headerExtended).toEqual(expect.arrayContaining([]));
done();
});
});
});
describe('subscribeNewHead', () => {
it('gets an observable of the current block header and it\'s author', async (done) => {
api.derive.chain.subscribeNewHead().subscribe((headerExtended) => {
// WIP
done();
});
});
});
});
describe('derive.session', () => {
describe('sessionProgress', () => {
it('derive.session.sessionProgress', async (done) => {
api.derive.session.sessionProgress().subscribe((progress) => {
expect(progress instanceof BN).toBe(true);
done();
});
});
});
});
describe('derive.staking', () => {
describe('intentionsBalances', () => {
it('returns the intentions with balances', async (done) => {
api.derive.staking.intentionsBalances().subscribe((balances) => {
expect(Object.keys(balances as object)).not.toHaveLength(0);
done();
});
});
});
});
afterAll(() => {
jest.setTimeout(5000);
});
});