avo-inspector
Version:
[](https://badge.fury.io/js/avo-inspector)
133 lines (132 loc) • 7.09 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var AvoGuid_1 = require("../AvoGuid");
var AvoInstallationId_1 = require("../AvoInstallationId");
var AvoNetworkCallsHandler_1 = require("../AvoNetworkCallsHandler");
var AvoSessionTracker_1 = require("../AvoSessionTracker");
var xhr_1 = require("../__mocks__/xhr");
var constants_1 = require("./constants");
var inspectorVersion = process.env.npm_package_version || "";
describe("NetworkCallsHandler", function () {
var apiKey = constants_1.defaultOptions.apiKey, env = constants_1.defaultOptions.env, version = constants_1.defaultOptions.version;
var appName = "";
var networkHandler;
var baseBody;
var customCallback = jest.fn();
var now = new Date();
beforeAll(function () {
// @ts-ignore
jest.spyOn(global, "Date").mockImplementation(function () { return now; });
jest
.spyOn(AvoInstallationId_1.AvoInstallationId, "getInstallationId")
.mockImplementation(function () { return constants_1.mockedReturns.INSTALLATION_ID; });
jest
.spyOn(AvoGuid_1.default, "newGuid")
.mockImplementation(function () { return constants_1.mockedReturns.GUID; });
jest
.spyOn(AvoSessionTracker_1.AvoSessionTracker, "sessionId", "get")
.mockImplementation(function () { return constants_1.mockedReturns.SESSION_ID; });
networkHandler = new AvoNetworkCallsHandler_1.AvoNetworkCallsHandler(apiKey, env, "", version, inspectorVersion);
baseBody = {
apiKey: apiKey,
appName: appName,
appVersion: version,
libVersion: inspectorVersion,
env: env,
libPlatform: "web",
messageId: constants_1.mockedReturns.GUID,
trackingId: constants_1.mockedReturns.INSTALLATION_ID,
createdAt: new Date().toISOString(),
sessionId: constants_1.mockedReturns.SESSION_ID,
samplingRate: 1.0,
};
});
afterEach(function () {
jest.clearAllMocks();
});
test("bodyForSessionStartedCall returns base body + session started body used for session started", function () {
var body = networkHandler.bodyForSessionStartedCall();
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "sessionStarted" }));
});
test("bodyForEventSchemaCall returns base body + event schema used for event sending from non avo functions", function () {
var eventName = "event name";
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
var body = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, null, null);
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "event", eventName: eventName, eventProperties: eventProperties, avoFunction: false, eventId: null, eventHash: null }));
});
test("bodyForEventSchemaCall returns base body + event schema used for event sending from avo functions", function () {
var eventName = "event name";
var eventId = "event id";
var eventHash = "event hash";
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
var body = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, eventId, eventHash);
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "event", eventName: eventName, eventProperties: eventProperties, avoFunction: true, eventId: eventId, eventHash: eventHash }));
});
test("POST request is not sent if event list is empty", function () {
var events = [];
networkHandler.callInspectorWithBatchBody(events, customCallback);
expect(xhr_1.default.open).not.toBeCalled();
});
test("callInspectorWithBatchBody sends POST request", function () {
var eventName = "event name";
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
var eventBody = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, null, null);
var events = [sessionStartedBody, eventBody];
networkHandler.callInspectorWithBatchBody(events, customCallback);
expect(xhr_1.default.open).toBeCalledTimes(1);
expect(xhr_1.default.open).toBeCalledWith("POST", constants_1.trackingEndpoint, true);
expect(xhr_1.default.setRequestHeader).toBeCalledWith("Content-Type", "text/plain");
expect(xhr_1.default.send).toBeCalledTimes(1);
expect(xhr_1.default.send).toBeCalledWith(JSON.stringify(events));
xhr_1.default.onload();
expect(customCallback).toBeCalledTimes(1);
expect(customCallback).toBeCalledWith(null);
});
test("Custom callback is called when 200 OK", function () {
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
var events = [sessionStartedBody];
networkHandler.callInspectorWithBatchBody(events, customCallback);
xhr_1.default.onload();
expect(customCallback).toBeCalledTimes(1);
expect(customCallback).toBeCalledWith(null);
});
test("Custom callback is called with error when not 200 OK", function () {
var xhrErrorMock = require("../__mocks__/xhrError").default;
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
var events = [sessionStartedBody];
networkHandler.callInspectorWithBatchBody(events, customCallback);
xhrErrorMock.onload();
expect(customCallback).toBeCalledTimes(1);
expect(customCallback).toBeCalledWith("Error 400: Bad Request");
});
test("Custom callback is called onerror", function () {
var xhrErrorMock = require("../__mocks__/xhrError").default;
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
var events = [sessionStartedBody];
networkHandler.callInspectorWithBatchBody(events, customCallback);
xhrErrorMock.onerror();
expect(customCallback).toBeCalledTimes(1);
expect(customCallback).toBeCalledWith(constants_1.requestMsg.ERROR);
});
test("Custom callback is called ontimeout", function () {
var xhrErrorMock = require("../__mocks__/xhrError").default;
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
var events = [sessionStartedBody];
networkHandler.callInspectorWithBatchBody(events, customCallback);
xhrErrorMock.ontimeout();
expect(customCallback).toBeCalledTimes(1);
expect(customCallback).toBeCalledWith(constants_1.requestMsg.TIMEOUT);
});
});