1 |
|
2 | import mapObject from 'just-map-object';
|
3 | import isEqual from 'just-compare';
|
4 | import ResponseError from './response-error';
|
5 | import {type HandlerType} from './tokens';
|
6 |
|
7 | export type RpcResponse = Object | ResponseError;
|
8 | export type RpcResponseMap = Array<{
|
9 | args: Array<*>,
|
10 | response: RpcResponse,
|
11 | }>;
|
12 | export type RpcFixtureT = {[string]: RpcResponseMap | RpcResponse};
|
13 | type OnMockRpcCallbackT = (
|
14 | handler: string,
|
15 | args: Array<*>,
|
16 | response: RpcResponse
|
17 | ) => void;
|
18 |
|
19 | const getMockRpcHandlers = (
|
20 | fixtures: Array<RpcFixtureT>,
|
21 | onMockRpc?: OnMockRpcCallbackT
|
22 | ): HandlerType =>
|
23 | fixtures.reduce(
|
24 | (rpcHandlers, fixture) => ({
|
25 | ...rpcHandlers,
|
26 | ...mapObject(fixture, (rpcId, responseDetails) => async (...args) => {
|
27 | const response = Array.isArray(responseDetails)
|
28 | ? responseDetails.filter(item => isEqual(item.args, args))[0].response
|
29 | : responseDetails;
|
30 |
|
31 | onMockRpc && onMockRpc(rpcId, args, response);
|
32 |
|
33 | if (response instanceof Error) {
|
34 | throw response;
|
35 | }
|
36 |
|
37 | return response;
|
38 | }),
|
39 | }),
|
40 | {}
|
41 | );
|
42 |
|
43 | export default getMockRpcHandlers;
|