fusion-plugin-rpc
Version:
Fetch data on the server and client with an RPC style interface.
76 lines (74 loc) • 9.66 kB
JavaScript
;
var _events = _interopRequireDefault(require("events"));
var _fusionCore = _interopRequireWildcard(require("fusion-core"));
var _fusionTestUtils = require("fusion-test-utils");
var _fusionPluginUniversalEvents = require("fusion-plugin-universal-events");
var _tokens = require("../tokens");
var _mock = _interopRequireDefault(require("../mock"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** 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.
*
*/
const MockPluginToken = (0, _fusionCore.createToken)('test-plugin-token');
const mockCtx = {};
function createTestFixture() {
const mockHandlers = {};
// @ts-ignore
const mockEmitter = new _events.default();
mockEmitter.from = () => mockEmitter;
const mockEmitterPlugin = (0, _fusionCore.createPlugin)({
provides: () => mockEmitter
});
const app = new _fusionCore.default('content', el => el);
app.register(_fusionPluginUniversalEvents.UniversalEventsToken, mockEmitterPlugin);
app.register(_tokens.RPCHandlersToken, mockHandlers);
app.register(MockPluginToken, _mock.default);
return app;
}
test('mock with missing handler', done => {
const app = createTestFixture();
expect.assertions(1);
(0, _fusionTestUtils.getSimulator)(app, (0, _fusionCore.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(_tokens.RPCHandlersToken, mockHandlers);
expect.assertions(2);
(0, _fusionTestUtils.getSimulator)(app, (0, _fusionCore.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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2NrUGx1Z2luVG9rZW4iLCJjcmVhdGVUb2tlbiIsIm1vY2tDdHgiLCJjcmVhdGVUZXN0Rml4dHVyZSIsIm1vY2tIYW5kbGVycyIsIm1vY2tFbWl0dGVyIiwiTW9ja0VtaXR0ZXIiLCJmcm9tIiwibW9ja0VtaXR0ZXJQbHVnaW4iLCJjcmVhdGVQbHVnaW4iLCJwcm92aWRlcyIsImFwcCIsIkFwcCIsImVsIiwicmVnaXN0ZXIiLCJVbml2ZXJzYWxFdmVudHNUb2tlbiIsIlJQQ0hhbmRsZXJzVG9rZW4iLCJSUENQbHVnaW4iLCJ0ZXN0IiwiZG9uZSIsImV4cGVjdCIsImFzc2VydGlvbnMiLCJnZXRTaW11bGF0b3IiLCJkZXBzIiwicnBjRmFjdG9yeSIsInJwYyIsInJlcXVlc3QiLCJyZWplY3RzIiwidG9UaHJvd0Vycm9yIiwiYXJncyIsInRvU3RyaWN0RXF1YWwiLCJyZXN1bHQiLCJ0b0JlIl0sInNvdXJjZXMiOlsic3JjL19fdGVzdHNfXy90ZXN0LW1vY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgTW9ja0VtaXR0ZXIgZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IEFwcCwge1xuICBjcmVhdGVQbHVnaW4sXG4gIGNyZWF0ZVRva2VuLFxuICB0eXBlIFRva2VuLFxuICB0eXBlIENvbnRleHQsXG59IGZyb20gJ2Z1c2lvbi1jb3JlJztcbmltcG9ydCB7Z2V0U2ltdWxhdG9yfSBmcm9tICdmdXNpb24tdGVzdC11dGlscyc7XG5pbXBvcnQge1VuaXZlcnNhbEV2ZW50c1Rva2VufSBmcm9tICdmdXNpb24tcGx1Z2luLXVuaXZlcnNhbC1ldmVudHMnO1xuXG5pbXBvcnQge1JQQ0hhbmRsZXJzVG9rZW59IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgUlBDUGx1Z2luIGZyb20gJy4uL21vY2snO1xuaW1wb3J0IHR5cGUge1JQQ1NlcnZpY2VUeXBlLCBJRW1pdHRlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBNb2NrUGx1Z2luVG9rZW46IFRva2VuPFJQQ1NlcnZpY2VUeXBlPiA9IGNyZWF0ZVRva2VuKCd0ZXN0LXBsdWdpbi10b2tlbicpO1xuY29uc3QgbW9ja0N0eCA9IHt9IGFzIGFueSBhcyBDb250ZXh0O1xuZnVuY3Rpb24gY3JlYXRlVGVzdEZpeHR1cmUoKSB7XG4gIGNvbnN0IG1vY2tIYW5kbGVycyA9IHt9O1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1vY2tFbWl0dGVyOiBJRW1pdHRlciA9IG5ldyBNb2NrRW1pdHRlcigpIGFzIGFueTtcbiAgbW9ja0VtaXR0ZXIuZnJvbSA9ICgpID0+IG1vY2tFbWl0dGVyO1xuICBjb25zdCBtb2NrRW1pdHRlclBsdWdpbiA9IGNyZWF0ZVBsdWdpbih7XG4gICAgcHJvdmlkZXM6ICgpID0+IG1vY2tFbWl0dGVyLFxuICB9KTtcblxuICBjb25zdCBhcHAgPSBuZXcgQXBwKCdjb250ZW50JywgKGVsKSA9PiBlbCk7XG4gIGFwcC5yZWdpc3RlcihVbml2ZXJzYWxFdmVudHNUb2tlbiwgbW9ja0VtaXR0ZXJQbHVnaW4pO1xuICBhcHAucmVnaXN0ZXIoUlBDSGFuZGxlcnNUb2tlbiwgbW9ja0hhbmRsZXJzKTtcbiAgYXBwLnJlZ2lzdGVyKE1vY2tQbHVnaW5Ub2tlbiwgUlBDUGx1Z2luKTtcbiAgcmV0dXJuIGFwcDtcbn1cblxudGVzdCgnbW9jayB3aXRoIG1pc3NpbmcgaGFuZGxlcicsIChkb25lKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RGaXh0dXJlKCk7XG5cbiAgZXhwZWN0LmFzc2VydGlvbnMoMSk7XG4gIGdldFNpbXVsYXRvcihcbiAgICBhcHAsXG4gICAgY3JlYXRlUGx1Z2luKHtcbiAgICAgIGRlcHM6IHtycGNGYWN0b3J5OiBNb2NrUGx1Z2luVG9rZW59LFxuICAgICAgcHJvdmlkZXM6IGFzeW5jIChkZXBzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJwYyA9IGRlcHMucnBjRmFjdG9yeS5mcm9tKG1vY2tDdHgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IGV4cGVjdChycGMucmVxdWVzdCgndGVzdCcpKS5yZWplY3RzLnRvVGhyb3dFcnJvcihcbiAgICAgICAgICAnTWlzc2luZyBSUEMgaGFuZGxlciBmb3IgdGVzdCdcbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSxcbiAgICB9KVxuICApO1xufSk7XG5cbnRlc3QoJ21vY2sgd2l0aCBoYW5kbGVyJywgKGRvbmUpID0+IHtcbiAgY29uc3QgbW9ja0hhbmRsZXJzID0ge1xuICAgIHRlc3Q6IChhcmdzKSA9PiB7XG4gICAgICBleHBlY3QoYXJncykudG9TdHJpY3RFcXVhbCh7dGVzdDogJ2FyZ3MnfSk7XG4gICAgICByZXR1cm4gMTA7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0Rml4dHVyZSgpO1xuICBhcHAucmVnaXN0ZXIoUlBDSGFuZGxlcnNUb2tlbiwgbW9ja0hhbmRsZXJzKTtcblxuICBleHBlY3QuYXNzZXJ0aW9ucygyKTtcbiAgZ2V0U2ltdWxhdG9yKFxuICAgIGFwcCxcbiAgICBjcmVhdGVQbHVnaW4oe1xuICAgICAgZGVwczoge3JwY0ZhY3Rvcnk6IE1vY2tQbHVnaW5Ub2tlbn0sXG4gICAgICBwcm92aWRlczogYXN5bmMgKGRlcHMpID0+IHtcbiAgICAgICAgY29uc3QgcnBjID0gZGVwcy5ycGNGYWN0b3J5LmZyb20obW9ja0N0eCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjLnJlcXVlc3QoJ3Rlc3QnLCB7dGVzdDogJ2FyZ3MnfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQp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