avo-inspector
Version:
[](https://badge.fury.io/js/avo-inspector)
180 lines (179 loc) • 9.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var AvoBatcher_1 = require("../AvoBatcher");
var AvoInspector_1 = require("../AvoInspector");
var AvoNetworkCallsHandler_1 = require("../AvoNetworkCallsHandler");
var AvoSessionTracker_1 = require("../AvoSessionTracker");
var AvoStorage_1 = require("../AvoStorage");
var constants_1 = require("../__tests__/constants");
var inspectorVersion = process.env.npm_package_version || "";
jest.mock("../AvoBatcher");
jest.mock("../AvoNetworkCallsHandler");
describe("Sessions", function () {
var apiKey = constants_1.defaultOptions.apiKey, env = constants_1.defaultOptions.env, version = constants_1.defaultOptions.version, shouldLog = constants_1.defaultOptions.shouldLog;
var storage = new AvoStorage_1.AvoStorage(shouldLog);
var networkHandler = new AvoNetworkCallsHandler_1.AvoNetworkCallsHandler(apiKey, env, "", version, inspectorVersion);
var mockBatcher = new AvoBatcher_1.AvoBatcher(networkHandler);
afterEach(function () {
jest.clearAllMocks();
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.idCacheKey);
});
test("Session started on window.onload", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
inspector.enableLogging(false);
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// When
var loadEvent = document.createEvent("Event");
loadEvent.initEvent("load", false, false);
window.dispatchEvent(loadEvent);
// Then
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Session started on trackSchemaFromEvent", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
inspector.enableLogging(false);
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// When
inspector.trackSchemaFromEvent("Test event", {});
// Then
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Session started on trackSchema", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
inspector.enableLogging(false);
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// When
inspector.trackSchema("Test event", []);
// Then
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Session started on extractSchema", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
inspector.enableLogging(false);
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// When
inspector.extractSchema({});
// Then
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Inits with session tracker", function () {
// When
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
// Then
expect(inspector.sessionTracker).not.toBeNull();
});
test("Inits with timestamp 0 and a session id", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(new AvoBatcher_1.AvoBatcher(networkHandler));
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(0);
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
});
test("Starts new session when no session recorded", function () {
// Given
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
var callMoment = Date.now();
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
sessionTracker.startOrProlongSession(callMoment);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBe(prevSessionId);
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Starts new session when time between session calls is greater than time between sessions", function () {
// Given
var callMoment = Date.now();
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs - 1);
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
sessionTracker.startOrProlongSession(callMoment);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBe(prevSessionId);
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
});
test("Not starts new session when time between session calls is smaller than time between sessions", function () {
// Given
var callMoment = Date.now();
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs + 1);
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
sessionTracker.startOrProlongSession(callMoment);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).toBe(prevSessionId);
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(0);
});
test("Not starts new session when time between individual session calls is smaller than time between sessions but combined is greater", function () {
// Given
var callMoment = Date.now();
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs + 1);
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
sessionTracker.startOrProlongSession(callMoment);
sessionTracker.startOrProlongSession(callMoment + constants_1.sessionTimeMs);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment + constants_1.sessionTimeMs);
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).toBe(prevSessionId);
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(0);
});
test("Parses saved timestamp properly", function () {
// Given
var callMoment = Date.now();
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(0);
// When
sessionTracker.startOrProlongSession(callMoment);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
// When
sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
});
test("Default session length is 5 mins", function () {
// Given
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// Then
expect(sessionTracker.sessionLengthMillis).toBe(constants_1.sessionTimeMs);
});
test("Delays session init if items from last sessions are not loaded", function () {
// Given
var callMoment = Date.now();
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
AvoInspector_1.AvoInspector.avoStorage.storageImpl.storageInitialized = false;
// When
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(0);
// When
sessionTracker.startOrProlongSession(callMoment);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(0);
// When
AvoInspector_1.AvoInspector.avoStorage.storageImpl.init(true);
// Then
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
});
});