import { strict as assert } from 'assert'; import { obj as createThoughStream } from 'through2'; import createMetaRPCHandler from './createMetaRPCHandler'; describe('createMetaRPCHandler', function () { it('can call the api when handler receives a JSON-RPC request', function (done) { const api = { foo: (param1) => { assert.strictEqual(param1, 'bar'); done(); }, }; const streamTest = createThoughStream(); const handler = createMetaRPCHandler(api, streamTest); handler({ id: 1, method: 'foo', params: ['bar'], }); }); it('can write the response to the outstream when api callback is called', function (done) { const api = { foo: (param1, cb) => { assert.strictEqual(param1, 'bar'); cb(null, 'foobarbaz'); }, }; const streamTest = createThoughStream(); const handler = createMetaRPCHandler(api, streamTest); handler({ id: 1, method: 'foo', params: ['bar'], }); streamTest.on('data', (data) => { assert.strictEqual(data.result, 'foobarbaz'); streamTest.end(); done(); }); }); it('can write the error to the outstream when api callback is called with an error', function (done) { const api = { foo: (param1, cb) => { assert.strictEqual(param1, 'bar'); cb(new Error('foo-error')); }, }; const streamTest = createThoughStream(); const handler = createMetaRPCHandler(api, streamTest); handler({ id: 1, method: 'foo', params: ['bar'], }); streamTest.on('data', (data) => { assert.strictEqual(data.error.message, 'foo-error'); streamTest.end(); done(); }); }); it('can not throw an error for writing an error after end', function (done) { const api = { foo: (param1, cb) => { assert.strictEqual(param1, 'bar'); cb(new Error('foo-error')); }, }; const streamTest = createThoughStream(); const handler = createMetaRPCHandler(api, streamTest); streamTest.end(); handler({ id: 1, method: 'foo', params: ['bar'], }); done(); }); it('can not throw an error for write after end', function (done) { const api = { foo: (param1, cb) => { assert.strictEqual(param1, 'bar'); cb(undefined, { foo: 'bar', }); }, }; const streamTest = createThoughStream(); const handler = createMetaRPCHandler(api, streamTest); streamTest.end(); handler({ id: 1, method: 'foo', params: ['bar'], }); done(); }); });