@v4fire/core
Version:
V4Fire core library
259 lines (258 loc) • 8.57 kB
JavaScript
"use strict";
var _data = _interopRequireWildcard(require("../../../../../core/data"));
var _composition = require("../../../../../core/request/engines/composition");
var _server = require("../../../../../core/request/engines/composition/test/server");
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; }
describe('core/request/engines/composition with provider', () => {
let server;
beforeAll(async () => {
server = await (0, _server.createServer)(5000);
});
beforeEach(() => {
server.clearHandles();
});
afterAll(() => {
server.destroy();
});
it('should invoke the decoder with correct data', async () => {
var _class, _class2, _class3;
server.handles.json1.response(200, {
test: 1
});
server.handles.json2.response(200, {
test: 2
});
let TestProviderDecoder1 = (0, _data.provider)(_class = class TestProviderDecoder1 extends _data.default {
baseGetURL = server.url('/json/1');
}) || _class;
let TestProviderDecoder2 = (0, _data.provider)(_class2 = class TestProviderDecoder2 extends _data.default {
baseGetURL = server.url('/json/2');
}) || _class2;
const request1 = () => new TestProviderDecoder1().get({
query: 1
}),
request2 = () => new TestProviderDecoder2().get({
notQuery: 2
});
let CompositionProviderDecoder = (0, _data.provider)(_class3 = class CompositionProviderDecoder extends _data.default {
static request = _data.default.request({
engine: (0, _composition.compositionEngine)([{
request: request1,
as: 'request1'
}, {
request: request2,
as: 'request2'
}])
});
static decoders = {
get: [result => ({
wrapper: result
})]
};
}) || _class3;
const dp = new CompositionProviderDecoder();
expect(await dp.get().data).toEqual({
wrapper: {
request1: {
test: 1
},
request2: {
test: 2
}
}
});
});
it('should clear the cache for all providers', async () => {
var _class4, _class5, _class6;
server.handles.json1.responseOnce(200, {
test: 1
}).responseOnce(200, {
json1: 'json1'
});
server.handles.json2.responseOnce(200, {
test: 2
}).responseOnce(200, {
json2: 'json2'
});
let TestProviderDropCache1 = (0, _data.provider)(_class4 = class TestProviderDropCache1 extends _data.default {
static request = _data.default.request({
cacheStrategy: 'queue',
cacheTTL: 20 .seconds()
});
baseGetURL = server.url('/json/1');
}) || _class4;
let TestProviderDropCache2 = (0, _data.provider)(_class5 = class TestProviderDropCache2 extends _data.default {
static request = _data.default.request({
cacheStrategy: 'queue',
cacheTTL: 20 .seconds()
});
baseGetURL = server.url('/json/2');
}) || _class5;
const provider1 = new TestProviderDropCache1(),
provider2 = new TestProviderDropCache2();
const request1 = () => provider1.get(),
request2 = () => provider2.get();
let CompositionProviderDropCache = (0, _data.provider)(_class6 = class CompositionProviderDropCache extends _data.default {
static request = _data.default.request({
engine: (0, _composition.compositionEngine)([{
request: request1,
as: 'request1'
}, {
request: request2,
as: 'request2'
}])
});
}) || _class6;
const dp = new CompositionProviderDropCache();
expect(await dp.get().data).toEqual({
request1: {
test: 1
},
request2: {
test: 2
}
});
dp.dropCache();
expect(await dp.get().data).toEqual({
request1: {
json1: 'json1'
},
request2: {
json2: 'json2'
}
});
});
it('should provide the constructor options of the Provider to the request', async () => {
var _class7, _class8, _class9;
server.handles.json1.response(200, {
test: 1
});
server.handles.json2.response(200, {
test: 2
});
let TestProviderOptions1 = (0, _data.provider)(_class7 = class TestProviderOptions1 extends _data.default {
baseGetURL = server.url('/json/1');
}) || _class7;
let TestProviderOptions2 = (0, _data.provider)(_class8 = class TestProviderOptions2 extends _data.default {
baseGetURL = server.url('/json/2');
}) || _class8;
let args1, args2;
const request1 = arg => {
args1 = arg.providerOptions;
return new TestProviderOptions1().get();
};
const request2 = arg => {
args2 = arg.providerOptions;
return new TestProviderOptions2().get();
};
let CompositionProviderOptions1 = (0, _data.provider)(_class9 = class CompositionProviderOptions1 extends _data.default {
static request = _data.default.request({
engine: (0, _composition.compositionEngine)([{
request: request1,
as: 'request1'
}, {
request: request2,
as: 'request2'
}])
});
}) || _class9;
const dp = new CompositionProviderOptions1({
remoteState: {
state: 1
}
});
expect(await dp.get().data).toEqual({
request1: {
test: 1
},
request2: {
test: 2
}
});
expect(args1).toMatchObject({
remoteState: {
state: 1
}
});
expect(args2).toMatchObject({
remoteState: {
state: 1
}
});
});
it('should properly cache provider instances', async () => {
var _class10, _class11, _class12;
server.handles.json1.responseOnce(200, {
test: 1
}).response(200, {
test: 2
});
server.handles.json2.responseOnce(200, {
foo: 2
}).responseOnce(200, {
foo: 3
}).responseOnce(200, {
foo: 4
});
let TestProviderInstance1 = (0, _data.provider)(_class10 = class TestProviderInstance1 extends _data.default {
static request = _data.default.request({
cacheStrategy: 'queue'
});
baseGetURL = server.url('/json/1');
}) || _class10;
let TestProviderInstance2 = (0, _data.provider)(_class11 = class TestProviderInstance2 extends _data.default {
static request = _data.default.request({
cacheStrategy: 'queue'
});
baseGetURL = server.url('/json/2');
}) || _class11;
let i = 2;
const request1 = () => new TestProviderInstance1().get({
query: 1
}),
request2 = () => new TestProviderInstance2().get({
notQuery: i++
});
const engine = (0, _composition.compositionEngine)([{
request: request1,
as: 'val1'
}, {
request: request2,
as: 'val2'
}]);
let CompositionProviderBound = (0, _data.provider)(_class12 = class CompositionProviderBound extends _data.default {
static request = _data.default.request({
engine
});
}) || _class12;
const dp = new CompositionProviderBound();
const data1 = await dp.get().data,
data2 = await dp.get().data,
data3 = await dp.get().data;
expect(data1).toEqual({
val1: {
test: 1
},
val2: {
foo: 2
}
});
expect(data2).toEqual({
val1: {
test: 1
},
val2: {
foo: 3
}
});
expect(data3).toEqual({
val1: {
test: 1
},
val2: {
foo: 4
}
});
});
});