fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
71 lines (70 loc) • 8.34 kB
JavaScript
/** 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+IHtcbiAgICAgICAgY29uc3QgcnBjID0gZGVwcy5ycGNGYWN0b3J5LmZyb20obW9ja0N0eCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjLnJlcXVlc3QoJ3Rlc3QnLCB7dGVzdDogJ2FyZ3MnfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQp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