UNPKG

1.53 kBPlain TextView Raw
1// Copyright 2017-2018 @polkadot/api-provider authors & contributors
2// This software may be modified and distributed under the terms
3// of the ISC license. See the LICENSE file for details.
4
5import { MockState, MockState$Db, MockState$Subscriptions } from './types';
6
7import E3 from 'eventemitter3';
8import interfaces from '@polkadot/jsonrpc/index';
9import u8aToHex from '@polkadot/util/u8a/toHex';
10import logger from '@polkadot/util/logger';
11
12const l = logger('api-mock');
13
14const SUBSCRIPTIONS: string[] = Array.prototype.concat.apply(
15 [], Object.values(interfaces).map((area) =>
16 Object
17 .values(area.methods)
18 .filter((method) =>
19 method.isSubscription
20 )
21 .map(({ method, section }) =>
22 `${section}_${method}`
23 )
24 )
25);
26
27const REQUESTS = {
28 'state_getStorage': (storage: MockState$Db, params: Array<any>): string => {
29 return u8aToHex(
30 storage[(params[0] as string)]
31 );
32 },
33 'system_chain': (): string => 'mockChain',
34 'system_name': (): string => 'mockClient',
35 'system_version': (): string => '9.8.7'
36};
37
38export default function state (): MockState {
39 const db = {};
40 const subscriptions: MockState$Subscriptions = SUBSCRIPTIONS.reduce((subs, name) => {
41 subs[name] = {
42 callbacks: {},
43 lastValue: null
44 };
45
46 return subs;
47 }, ({} as MockState$Subscriptions));
48
49 return {
50 emitter: new E3.EventEmitter(),
51 l,
52 requests: Object.assign({}, REQUESTS),
53 db,
54 subscriptionId: 0,
55 subscriptionMap: {},
56 subscriptions
57 };
58}