solana/web3.js/test/__mocks__/node-fetch.js

65 lines
1.3 KiB
JavaScript
Raw Normal View History

2018-08-24 10:39:51 -07:00
// @flow
type RpcRequest = {
method: string;
params: Array<any>;
};
type RpcResponseError = {
message: string;
}
type RpcResponseResult = boolean | string | number;
type RpcResponse = {
error: ?RpcResponseError;
result: ?RpcResponseResult;
};
export const mockRpc: Array<[string, RpcRequest, RpcResponse]> = [];
const mock: JestMockFn<any, any> = jest.fn(
(fetchUrl, fetchOptions) => {
expect(mockRpc.length).toBeGreaterThanOrEqual(1);
const [mockUrl, mockRequest, mockResponse] = mockRpc.shift();
expect(fetchUrl).toBe(mockUrl);
expect(fetchOptions).toMatchObject({
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
});
expect(fetchOptions.body).toBeDefined();
const body = JSON.parse(fetchOptions.body);
expect(body).toMatchObject(Object.assign(
{},
{
jsonrpc: '2.0',
method: 'invalid',
params: ['invalid', 'params'],
},
mockRequest
));
const response = Object.assign(
{},
{
jsonrpc: '2.0',
id: body.id,
error: {
message: 'invalid error message',
},
result: 'invalid response',
},
mockResponse,
);
return {
text: () => {
return Promise.resolve(JSON.stringify(response));
},
};
}
);
export default mock;