84 lines
1.7 KiB
TypeScript
84 lines
1.7 KiB
TypeScript
// Copyright 2017-2018 @polkadot/api-provider authors & contributors
|
|
// This software may be modified and distributed under the terms
|
|
// of the ISC license. See the LICENSE file for details.
|
|
|
|
import { Server } from 'mock-socket';
|
|
|
|
const TEST_WS_URL = 'ws://localhost:9955';
|
|
|
|
let server: Server;
|
|
|
|
type ErrorDef = {
|
|
id: number,
|
|
error: {
|
|
code: number,
|
|
message: string
|
|
}
|
|
};
|
|
|
|
type ReplyDef = {
|
|
id: number,
|
|
reply: {
|
|
result: any
|
|
}
|
|
};
|
|
|
|
function createError ({ id, error: { code, message } }: ErrorDef) {
|
|
return {
|
|
id,
|
|
jsonrpc: '2.0',
|
|
error: {
|
|
code,
|
|
message
|
|
}
|
|
};
|
|
}
|
|
|
|
function createReply ({ id, reply: { result } }: ReplyDef) {
|
|
return {
|
|
id,
|
|
jsonrpc: '2.0',
|
|
result
|
|
};
|
|
}
|
|
|
|
function mockWs (requests: Array<{ method: string }>) {
|
|
server = new Server(TEST_WS_URL);
|
|
|
|
let requestCount = 0;
|
|
const scope: { body: { [index: string]: {} }, requests: number, server: Server, done: any } = {
|
|
body: {},
|
|
requests: 0,
|
|
server,
|
|
done: () =>
|
|
server.stop(() => {
|
|
// ignore
|
|
})
|
|
};
|
|
|
|
server.on('connection', (socket) => {
|
|
// @ts-ignore definitions are wrong, this is 'on', not 'onmessage'
|
|
socket.on('message', (body: {}) => {
|
|
const request = requests[requestCount];
|
|
// @ts-ignore Yes, SHOULD be fixed, this is a mess
|
|
const response = request.error
|
|
// @ts-ignore Yes, SHOULD be fixed, this is a mess
|
|
? createError(request)
|
|
// @ts-ignore Yes, SHOULD be fixed, this is a mess
|
|
: createReply(request);
|
|
|
|
scope.body[request.method] = body;
|
|
requestCount++;
|
|
|
|
socket.send(JSON.stringify(response));
|
|
});
|
|
});
|
|
|
|
return scope;
|
|
}
|
|
|
|
export {
|
|
TEST_WS_URL,
|
|
mockWs
|
|
};
|