* session api.queryMulti * Make a single subscription to retrieve all session info * Adjustments * WIP * Seems mostly comprehensive, need to full test e2e * e2e tests for operations * Allow "create from empty" * skip * Remove comment * Remove ancient ?'s * Update types.ts
224 lines
7.5 KiB
TypeScript
224 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);
|
|
});
|
|
});
|