UNPKG

1.13 kBJavaScriptView Raw
1// @flow
2import mapObject from 'just-map-object';
3import isEqual from 'just-compare';
4import ResponseError from './response-error';
5import {type HandlerType} from './tokens';
6
7export type RpcResponse = Object | ResponseError;
8export type RpcResponseMap = Array<{
9 args: Array<*>,
10 response: RpcResponse,
11}>;
12export type RpcFixtureT = {[string]: RpcResponseMap | RpcResponse};
13type OnMockRpcCallbackT = (
14 handler: string,
15 args: Array<*>,
16 response: RpcResponse
17) => void;
18
19const 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
43export default getMockRpcHandlers;