1 |
|
2 |
|
3 |
|
4 |
|
5 | import { MockState, MockState$Db, MockState$Subscriptions } from './types';
|
6 |
|
7 | import E3 from 'eventemitter3';
|
8 | import interfaces from '@polkadot/jsonrpc/index';
|
9 | import u8aToHex from '@polkadot/util/u8a/toHex';
|
10 | import logger from '@polkadot/util/logger';
|
11 |
|
12 | const l = logger('api-mock');
|
13 |
|
14 | const 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 |
|
27 | const 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 |
|
38 | export 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 | }
|