UNPKG

fusion-plugin-rpc

Version:

Fetch data on the server and client with an RPC style interface.

71 lines (70 loc) 8.34 kB
/** Copyright (c) 2018 Uber Technologies, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ import MockEmitter from 'events'; import App, { createPlugin, createToken } from 'fusion-core'; import { getSimulator } from 'fusion-test-utils'; import { UniversalEventsToken } from 'fusion-plugin-universal-events'; import { RPCHandlersToken } from '../tokens'; import RPCPlugin from '../mock'; const MockPluginToken = createToken('test-plugin-token'); const mockCtx = {}; function createTestFixture() { const mockHandlers = {}; // @ts-ignore const mockEmitter = new MockEmitter(); mockEmitter.from = () => mockEmitter; const mockEmitterPlugin = createPlugin({ provides: () => mockEmitter }); const app = new App('content', el => el); app.register(UniversalEventsToken, mockEmitterPlugin); app.register(RPCHandlersToken, mockHandlers); app.register(MockPluginToken, RPCPlugin); return app; } test('mock with missing handler', done => { const app = createTestFixture(); expect.assertions(1); getSimulator(app, createPlugin({ deps: { rpcFactory: MockPluginToken }, provides: async deps => { const rpc = deps.rpcFactory.from(mockCtx); // @ts-ignore await expect(rpc.request('test')).rejects.toThrowError('Missing RPC handler for test'); done(); } })); }); test('mock with handler', done => { const mockHandlers = { test: args => { expect(args).toStrictEqual({ test: 'args' }); return 10; } }; const app = createTestFixture(); app.register(RPCHandlersToken, mockHandlers); expect.assertions(2); getSimulator(app, createPlugin({ deps: { rpcFactory: MockPluginToken }, provides: async deps => { const rpc = deps.rpcFactory.from(mockCtx); const result = await rpc.request('test', { test: 'args' }); expect(result).toBe(10); done(); } })); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2NrRW1pdHRlciIsIkFwcCIsImNyZWF0ZVBsdWdpbiIsImNyZWF0ZVRva2VuIiwiZ2V0U2ltdWxhdG9yIiwiVW5pdmVyc2FsRXZlbnRzVG9rZW4iLCJSUENIYW5kbGVyc1Rva2VuIiwiUlBDUGx1Z2luIiwiTW9ja1BsdWdpblRva2VuIiwibW9ja0N0eCIsImNyZWF0ZVRlc3RGaXh0dXJlIiwibW9ja0hhbmRsZXJzIiwibW9ja0VtaXR0ZXIiLCJmcm9tIiwibW9ja0VtaXR0ZXJQbHVnaW4iLCJwcm92aWRlcyIsImFwcCIsImVsIiwicmVnaXN0ZXIiLCJ0ZXN0IiwiZG9uZSIsImV4cGVjdCIsImFzc2VydGlvbnMiLCJkZXBzIiwicnBjRmFjdG9yeSIsInJwYyIsInJlcXVlc3QiLCJyZWplY3RzIiwidG9UaHJvd0Vycm9yIiwiYXJncyIsInRvU3RyaWN0RXF1YWwiLCJyZXN1bHQiLCJ0b0JlIl0sInNvdXJjZXMiOlsic3JjL19fdGVzdHNfXy90ZXN0LW1vY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgTW9ja0VtaXR0ZXIgZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IEFwcCwge1xuICBjcmVhdGVQbHVnaW4sXG4gIGNyZWF0ZVRva2VuLFxuICB0eXBlIFRva2VuLFxuICB0eXBlIENvbnRleHQsXG59IGZyb20gJ2Z1c2lvbi1jb3JlJztcbmltcG9ydCB7Z2V0U2ltdWxhdG9yfSBmcm9tICdmdXNpb24tdGVzdC11dGlscyc7XG5pbXBvcnQge1VuaXZlcnNhbEV2ZW50c1Rva2VufSBmcm9tICdmdXNpb24tcGx1Z2luLXVuaXZlcnNhbC1ldmVudHMnO1xuXG5pbXBvcnQge1JQQ0hhbmRsZXJzVG9rZW59IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgUlBDUGx1Z2luIGZyb20gJy4uL21vY2snO1xuaW1wb3J0IHR5cGUge1JQQ1NlcnZpY2VUeXBlLCBJRW1pdHRlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBNb2NrUGx1Z2luVG9rZW46IFRva2VuPFJQQ1NlcnZpY2VUeXBlPiA9IGNyZWF0ZVRva2VuKCd0ZXN0LXBsdWdpbi10b2tlbicpO1xuY29uc3QgbW9ja0N0eCA9IHt9IGFzIGFueSBhcyBDb250ZXh0O1xuZnVuY3Rpb24gY3JlYXRlVGVzdEZpeHR1cmUoKSB7XG4gIGNvbnN0IG1vY2tIYW5kbGVycyA9IHt9O1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1vY2tFbWl0dGVyOiBJRW1pdHRlciA9IG5ldyBNb2NrRW1pdHRlcigpIGFzIGFueTtcbiAgbW9ja0VtaXR0ZXIuZnJvbSA9ICgpID0+IG1vY2tFbWl0dGVyO1xuICBjb25zdCBtb2NrRW1pdHRlclBsdWdpbiA9IGNyZWF0ZVBsdWdpbih7XG4gICAgcHJvdmlkZXM6ICgpID0+IG1vY2tFbWl0dGVyLFxuICB9KTtcblxuICBjb25zdCBhcHAgPSBuZXcgQXBwKCdjb250ZW50JywgKGVsKSA9PiBlbCk7XG4gIGFwcC5yZWdpc3RlcihVbml2ZXJzYWxFdmVudHNUb2tlbiwgbW9ja0VtaXR0ZXJQbHVnaW4pO1xuICBhcHAucmVnaXN0ZXIoUlBDSGFuZGxlcnNUb2tlbiwgbW9ja0hhbmRsZXJzKTtcbiAgYXBwLnJlZ2lzdGVyKE1vY2tQbHVnaW5Ub2tlbiwgUlBDUGx1Z2luKTtcbiAgcmV0dXJuIGFwcDtcbn1cblxudGVzdCgnbW9jayB3aXRoIG1pc3NpbmcgaGFuZGxlcicsIChkb25lKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RGaXh0dXJlKCk7XG5cbiAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG4gIGdldFNpbXVsYXRvcihcbiAgICBhcHAsXG4gICAgY3JlYXRlUGx1Z2luKHtcbiAgICAgIGRlcHM6IHtycGNGYWN0b3J5OiBNb2NrUGx1Z2luVG9rZW59LFxuICAgICAgcHJvdmlkZXM6IGFzeW5jIChkZXBzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJwYyA9IGRlcHMucnBjRmFjdG9yeS5mcm9tKG1vY2tDdHgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IGV4cGVjdChycGMucmVxdWVzdCgndGVzdCcpKS5yZWplY3RzLnRvVGhyb3dFcnJvcihcbiAgICAgICAgICAnTWlzc2luZyBSUEMgaGFuZGxlciBmb3IgdGVzdCdcbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSxcbiAgICB9KVxuICApO1xufSk7XG5cbnRlc3QoJ21vY2sgd2l0aCBoYW5kbGVyJywgKGRvbmUpID0+IHtcbiAgY29uc3QgbW9ja0hhbmRsZXJzID0ge1xuICAgIHRlc3Q6IChhcmdzKSA9PiB7XG4gICAgICBleHBlY3QoYXJncykudG9TdHJpY3RFcXVhbCh7dGVzdDogJ2FyZ3MnfSk7XG4gICAgICByZXR1cm4gMTA7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0Rml4dHVyZSgpO1xuICBhcHAucmVnaXN0ZXIoUlBDSGFuZGxlcnNUb2tlbiwgbW9ja0hhbmRsZXJzKTtcblxuICBleHBlY3QuYXNzZXJ0aW9ucygyKTtcbiAgZ2V0U2ltdWxhdG9yKFxuICAgIGFwcCxcbiAgICBjcmVhdGVQbHVnaW4oe1xuICAgICAgZGVwczoge3JwY0ZhY3Rvcnk6IE1vY2tQbHVnaW5Ub2tlbn0sXG4gICAgICBwcm92aWRlczogYXN5bmMgKGRlcHMpID0+IHtcbiAgICAgICAgY29uc3QgcnBjID0gZGVwcy5ycGNGYWN0b3J5LmZyb20obW9ja0N0eCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjLnJlcXVlc3QoJ3Rlc3QnLCB7dGVzdDogJ2FyZ3MnfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMTApO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LFxuICAgIH0pXG4gICk7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU9BLFdBQVcsTUFBTSxRQUFRO0FBRWhDLE9BQU9DLEdBQUcsSUFDUkMsWUFBWSxFQUNaQyxXQUFXLFFBR04sYUFBYTtBQUNwQixTQUFRQyxZQUFZLFFBQU8sbUJBQW1CO0FBQzlDLFNBQVFDLG9CQUFvQixRQUFPLGdDQUFnQztBQUVuRSxTQUFRQyxnQkFBZ0IsUUFBTyxXQUFXO0FBQzFDLE9BQU9DLFNBQVMsTUFBTSxTQUFTO0FBRy9CLE1BQU1DLGVBQXNDLEdBQUdMLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztBQUMvRSxNQUFNTSxPQUFPLEdBQUcsQ0FBQyxDQUFtQjtBQUNwQyxTQUFTQyxpQkFBaUIsR0FBRztFQUMzQixNQUFNQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCO0VBQ0EsTUFBTUMsV0FBcUIsR0FBRyxJQUFJWixXQUFXLEVBQVM7RUFDdERZLFdBQVcsQ0FBQ0MsSUFBSSxHQUFHLE1BQU1ELFdBQVc7RUFDcEMsTUFBTUUsaUJBQWlCLEdBQUdaLFlBQVksQ0FBQztJQUNyQ2EsUUFBUSxFQUFFLE1BQU1IO0VBQ2xCLENBQUMsQ0FBQztFQUVGLE1BQU1JLEdBQUcsR0FBRyxJQUFJZixHQUFHLENBQUMsU0FBUyxFQUFHZ0IsRUFBRSxJQUFLQSxFQUFFLENBQUM7RUFDMUNELEdBQUcsQ0FBQ0UsUUFBUSxDQUFDYixvQkFBb0IsRUFBRVMsaUJBQWlCLENBQUM7RUFDckRFLEdBQUcsQ0FBQ0UsUUFBUSxDQUFDWixnQkFBZ0IsRUFBRUssWUFBWSxDQUFDO0VBQzVDSyxHQUFHLENBQUNFLFFBQVEsQ0FBQ1YsZUFBZSxFQUFFRCxTQUFTLENBQUM7RUFDeEMsT0FBT1MsR0FBRztBQUNaO0FBRUFHLElBQUksQ0FBQywyQkFBMkIsRUFBR0MsSUFBSSxJQUFLO0VBQzFDLE1BQU1KLEdBQUcsR0FBR04saUJBQWlCLEVBQUU7RUFFL0JXLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUNwQmxCLFlBQVksQ0FDVlksR0FBRyxFQUNIZCxZQUFZLENBQUM7SUFDWHFCLElBQUksRUFBRTtNQUFDQyxVQUFVLEVBQUVoQjtJQUFlLENBQUM7SUFDbkNPLFFBQVEsRUFBRSxNQUFPUSxJQUFJLElBQUs7TUFDeEIsTUFBTUUsR0FBRyxHQUFHRixJQUFJLENBQUNDLFVBQVUsQ0FBQ1gsSUFBSSxDQUFDSixPQUFPLENBQUM7TUFDekM7TUFDQSxNQUFNWSxNQUFNLENBQUNJLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQ0MsWUFBWSxDQUNwRCw4QkFBOEIsQ0FDL0I7TUFDRFIsSUFBSSxFQUFFO0lBQ1I7RUFDRixDQUFDLENBQUMsQ0FDSDtBQUNILENBQUMsQ0FBQztBQUVGRCxJQUFJLENBQUMsbUJBQW1CLEVBQUdDLElBQUksSUFBSztFQUNsQyxNQUFNVCxZQUFZLEdBQUc7SUFDbkJRLElBQUksRUFBR1UsSUFBSSxJQUFLO01BQ2RSLE1BQU0sQ0FBQ1EsSUFBSSxDQUFDLENBQUNDLGFBQWEsQ0FBQztRQUFDWCxJQUFJLEVBQUU7TUFBTSxDQUFDLENBQUM7TUFDMUMsT0FBTyxFQUFFO0lBQ1g7RUFDRixDQUFDO0VBRUQsTUFBTUgsR0FBRyxHQUFHTixpQkFBaUIsRUFBRTtFQUMvQk0sR0FBRyxDQUFDRSxRQUFRLENBQUNaLGdCQUFnQixFQUFFSyxZQUFZLENBQUM7RUFFNUNVLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUNwQmxCLFlBQVksQ0FDVlksR0FBRyxFQUNIZCxZQUFZLENBQUM7SUFDWHFCLElBQUksRUFBRTtNQUFDQyxVQUFVLEVBQUVoQjtJQUFlLENBQUM7SUFDbkNPLFFBQVEsRUFBRSxNQUFPUSxJQUFJLElBQUs7TUFDeEIsTUFBTUUsR0FBRyxHQUFHRixJQUFJLENBQUNDLFVBQVUsQ0FBQ1gsSUFBSSxDQUFDSixPQUFPLENBQUM7TUFFekMsTUFBTXNCLE1BQU0sR0FBRyxNQUFNTixHQUFHLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFBQ1AsSUFBSSxFQUFFO01BQU0sQ0FBQyxDQUFDO01BQ3hERSxNQUFNLENBQUNVLE1BQU0sQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO01BQ3ZCWixJQUFJLEVBQUU7SUFDUjtFQUNGLENBQUMsQ0FBQyxDQUNIO0FBQ0gsQ0FBQyxDQUFDIn0=