@hubspot/api-client
Version:
NodeJS v3 [HubSpot API](https://developers.hubspot.com/docs/api/overview) SDK(Client) files
142 lines • 7.16 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const send_1 = require("../../codegen/events/send");
const http_1 = require("../../codegen/events/send/http/http");
const rxjsStub_1 = require("../../codegen/events/send/rxjsStub");
const ObservableAPI_1 = require("../../codegen/events/send/types/ObservableAPI");
class MockResponseBody {
text() {
return __awaiter(this, void 0, void 0, function* () {
return '';
});
}
binary() {
return __awaiter(this, void 0, void 0, function* () {
return Buffer.from('');
});
}
}
const mockHttpApi = {
send(requestContext) {
void requestContext;
return (0, rxjsStub_1.from)(Promise.resolve(new http_1.ResponseContext(204, { 'content-type': 'application/json' }, new MockResponseBody())));
},
};
const createTrackingMiddleware = (name, trace) => ({
pre(requestContext) {
return __awaiter(this, void 0, void 0, function* () {
trace.push(`pre:${name}`);
return requestContext;
});
},
post(responseContext) {
return __awaiter(this, void 0, void 0, function* () {
trace.push(`post:${name}`);
return responseContext;
});
},
});
const createObservableTrackingMiddleware = (name, trace) => ({
pre(requestContext) {
trace.push(`pre:${name}`);
return (0, rxjsStub_1.from)(Promise.resolve(requestContext));
},
post(responseContext) {
trace.push(`post:${name}`);
return (0, rxjsStub_1.from)(Promise.resolve(responseContext));
},
});
describe('Middleware merge strategy', () => {
it('runs global middleware when call middleware is not provided', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const globalMiddleware = createTrackingMiddleware('global', trace);
const api = new send_1.BatchApi((0, send_1.createConfiguration)({
promiseMiddleware: [globalMiddleware],
httpApi: mockHttpApi,
}));
yield api.send({ inputs: [] });
expect(trace).toEqual(['pre:global', 'post:global']);
}));
it('replaces global middleware by default when call middleware is provided', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const globalMiddleware = createTrackingMiddleware('global', trace);
const callMiddleware = createTrackingMiddleware('call', trace);
const api = new send_1.BatchApi((0, send_1.createConfiguration)({
promiseMiddleware: [globalMiddleware],
httpApi: mockHttpApi,
}));
yield api.send({ inputs: [] }, { middleware: [callMiddleware] });
expect(trace).toEqual(['pre:call', 'post:call']);
}));
it('appends call middleware after global middleware when strategy is append', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const globalMiddleware = createTrackingMiddleware('global', trace);
const callMiddleware = createTrackingMiddleware('call', trace);
const api = new send_1.BatchApi((0, send_1.createConfiguration)({
promiseMiddleware: [globalMiddleware],
httpApi: mockHttpApi,
}));
yield api.send({ inputs: [] }, {
middleware: [callMiddleware],
middlewareMergeStrategy: 'append',
});
expect(trace).toEqual(['pre:global', 'pre:call', 'post:call', 'post:global']);
}));
it('prepends call middleware before global middleware when strategy is prepend', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const globalMiddleware = createTrackingMiddleware('global', trace);
const callMiddleware = createTrackingMiddleware('call', trace);
const api = new send_1.BatchApi((0, send_1.createConfiguration)({
promiseMiddleware: [globalMiddleware],
httpApi: mockHttpApi,
}));
yield api.send({ inputs: [] }, {
middleware: [callMiddleware],
middlewareMergeStrategy: 'prepend',
});
expect(trace).toEqual(['pre:call', 'pre:global', 'post:global', 'post:call']);
}));
it('does not mutate call middleware array order across requests', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const firstCallMiddleware = createTrackingMiddleware('call-first', trace);
const secondCallMiddleware = createTrackingMiddleware('call-second', trace);
const callMiddleware = [firstCallMiddleware, secondCallMiddleware];
const api = new send_1.BatchApi((0, send_1.createConfiguration)({
promiseMiddleware: [],
httpApi: mockHttpApi,
}));
yield api.send({ inputs: [] }, { middleware: callMiddleware });
expect(trace).toEqual(['pre:call-first', 'pre:call-second', 'post:call-second', 'post:call-first']);
expect(callMiddleware).toEqual([firstCallMiddleware, secondCallMiddleware]);
trace.length = 0;
yield api.send({ inputs: [] }, { middleware: callMiddleware });
expect(trace).toEqual(['pre:call-first', 'pre:call-second', 'post:call-second', 'post:call-first']);
}));
it('does not mutate observable call middleware order across requests', () => __awaiter(void 0, void 0, void 0, function* () {
const trace = [];
const firstCallMiddleware = createObservableTrackingMiddleware('call-first', trace);
const secondCallMiddleware = createObservableTrackingMiddleware('call-second', trace);
const callMiddleware = [firstCallMiddleware, secondCallMiddleware];
const configuration = (0, send_1.createConfiguration)({
middleware: [],
httpApi: mockHttpApi,
});
const api = new ObservableAPI_1.ObservableBatchApi(configuration);
yield api.send({ inputs: [] }, { middleware: callMiddleware }).toPromise();
expect(trace).toEqual(['pre:call-first', 'pre:call-second', 'post:call-second', 'post:call-first']);
expect(callMiddleware).toEqual([firstCallMiddleware, secondCallMiddleware]);
trace.length = 0;
yield api.send({ inputs: [] }, { middleware: callMiddleware }).toPromise();
expect(trace).toEqual(['pre:call-first', 'pre:call-second', 'post:call-second', 'post:call-first']);
}));
});
//# sourceMappingURL=middlewareMergeStrategy.spec.js.map