UNPKG

avo-inspector

Version:

[![npm version](https://badge.fury.io/js/avo-inspector.svg)](https://badge.fury.io/js/avo-inspector)

180 lines (179 loc) 9.39 kB
"use strict"; 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); }); });