|
|
@ -3,76 +3,68 @@ import JsonRpc, {ErrorCodes} from './JsonRpc';
|
|
|
|
const defer = (ms: number, val?: any) =>
|
|
|
|
const defer = (ms: number, val?: any) =>
|
|
|
|
new Promise(resolve => setTimeout(() => resolve(val), ms));
|
|
|
|
new Promise(resolve => setTimeout(() => resolve(val), ms));
|
|
|
|
|
|
|
|
|
|
|
|
it('handles requests', async () => {
|
|
|
|
describe('handling requests', () => {
|
|
|
|
const rpc = new JsonRpc({
|
|
|
|
let rpc: any;
|
|
|
|
methods: {
|
|
|
|
const buildRequest = (method: string, params?: any[] | object) => ({
|
|
|
|
hello: () => 'goodbye',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const request = {
|
|
|
|
|
|
|
|
id: 123,
|
|
|
|
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
|
|
|
|
method: 'hello',
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const response = await (rpc as any).handleRequest(request);
|
|
|
|
|
|
|
|
expect(response).toEqual({
|
|
|
|
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
id: 123,
|
|
|
|
id: 123,
|
|
|
|
result: 'goodbye',
|
|
|
|
method,
|
|
|
|
|
|
|
|
params,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
it('waits on promise results', async () => {
|
|
|
|
beforeEach(() => {
|
|
|
|
const rpc = new JsonRpc({
|
|
|
|
rpc = new JsonRpc({
|
|
|
|
methods: {
|
|
|
|
methods: {
|
|
|
|
|
|
|
|
hello: (name: string) => `goodbye ${name}`,
|
|
|
|
|
|
|
|
canVote: (voter: {age: number}) => voter.age > 18,
|
|
|
|
deferred: () => Promise.resolve('deferredResult'),
|
|
|
|
deferred: () => Promise.resolve('deferredResult'),
|
|
|
|
|
|
|
|
blowUp: () => {
|
|
|
|
|
|
|
|
throw Error('BOOM!');
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const request = {
|
|
|
|
it('handles array params', async () => {
|
|
|
|
id: 123,
|
|
|
|
const request = buildRequest('hello', ['Alice']);
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
const response = await rpc.handleRequest(request);
|
|
|
|
method: 'deferred',
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const response = await (rpc as any).handleRequest(request);
|
|
|
|
expect(response.jsonrpc).toEqual('2.0');
|
|
|
|
expect(response.result).toEqual('deferredResult');
|
|
|
|
expect(response.id).toEqual(request.id);
|
|
|
|
});
|
|
|
|
expect(response.result).toEqual('goodbye Alice');
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
it('errors on missing method', async () => {
|
|
|
|
it('handles object params', async () => {
|
|
|
|
const rpc = new JsonRpc();
|
|
|
|
const request = buildRequest('canVote', {age: 22});
|
|
|
|
|
|
|
|
const response = await rpc.handleRequest(request);
|
|
|
|
|
|
|
|
|
|
|
|
const request = {
|
|
|
|
expect(response.jsonrpc).toEqual('2.0');
|
|
|
|
id: 123,
|
|
|
|
expect(response.id).toEqual(request.id);
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
expect(response.result).toEqual(true);
|
|
|
|
method: 'missing',
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const response = await (rpc as any).handleRequest(request);
|
|
|
|
it('waits on promise results', async () => {
|
|
|
|
expect(response.id).toEqual(123);
|
|
|
|
const request = buildRequest('deferred');
|
|
|
|
expect(response.error.code).toEqual(ErrorCodes.MethodNotFound);
|
|
|
|
const response = await rpc.handleRequest(request);
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
it('errors on throwing method', async () => {
|
|
|
|
expect(response.result).toEqual('deferredResult');
|
|
|
|
const rpc = new JsonRpc({
|
|
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
|
|
blowUp: () => {
|
|
|
|
|
|
|
|
throw Error('BOOM!');
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const request = {
|
|
|
|
it('errors on missing method', async () => {
|
|
|
|
id: 123,
|
|
|
|
const request = buildRequest('missing');
|
|
|
|
jsonrpc: '2.0',
|
|
|
|
const response = await rpc.handleRequest(request);
|
|
|
|
method: 'blowUp',
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const response = await (rpc as any).handleRequest(request);
|
|
|
|
expect(response.id).toEqual(request.id);
|
|
|
|
expect(response.id).toEqual(123);
|
|
|
|
expect(response.error.code).toEqual(ErrorCodes.MethodNotFound);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
it('errors on throwing method', async () => {
|
|
|
|
|
|
|
|
const request = buildRequest('blowUp');
|
|
|
|
|
|
|
|
const response = await rpc.handleRequest(request);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
expect(response.id).toEqual(request.id);
|
|
|
|
expect(response.error.code).toEqual(ErrorCodes.InternalError);
|
|
|
|
expect(response.error.code).toEqual(ErrorCodes.InternalError);
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe('mounted', () => {
|
|
|
|
describe('mounted', () => {
|
|
|
|