From 73969ed17ab1c365955df8836e8f260f535f93fe Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Tue, 31 May 2022 13:07:27 +0300 Subject: [PATCH] Refresh tests Signed-off-by: Alex Andreev --- .../__tests__/app-update-warning.test.ts | 167 ++++++++++-------- .../app-update-warning/app-update-warning.ts | 27 +-- 2 files changed, 105 insertions(+), 89 deletions(-) diff --git a/src/renderer/app-update-warning/__tests__/app-update-warning.test.ts b/src/renderer/app-update-warning/__tests__/app-update-warning.test.ts index 3cffb98423..4e50ce7645 100644 --- a/src/renderer/app-update-warning/__tests__/app-update-warning.test.ts +++ b/src/renderer/app-update-warning/__tests__/app-update-warning.test.ts @@ -2,115 +2,126 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { DiContainer } from "@ogre-tools/injectable"; import ipcRendererInjectable from "../../app-paths/get-value-from-registered-channel/ipc-renderer/ipc-renderer.injectable"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; -import appPublishDateInjectable from "../app-publish-date.injectable"; +import sessionStorageInjectable from "../../utils/session-storage.injectable"; +import type { AppUpdateWarning } from "../app-update-warning"; import appUpdateWarningInjectable from "../app-update-warning.injectable"; describe("app-update-warning", () => { - const di = getDiForUnitTesting({ doGeneralOverrides: true }); + let di: DiContainer; + let appUpdateWarning: AppUpdateWarning; beforeEach(() => { + di = getDiForUnitTesting({ doGeneralOverrides: true }); + di.override(ipcRendererInjectable, () => ({ - on: jest.fn(), + on: (event: any, callback: () => void) => { + if (event === "update-available") { + callback(); + } + } } as never)); - di.override(appPublishDateInjectable, () => "2020-01-01T02:35:00"); + di.override(sessionStorageInjectable, () => ({ + setItem: jest.fn(), + getItem: () => "2022-05-30T05:30:00.000Z", + length: 0, + key: jest.fn(), + removeItem: jest.fn(), + clear: jest.fn(), + }) as never); + + appUpdateWarning = di.inject(appUpdateWarningInjectable); + + appUpdateWarning.init(); }); - describe("given AppUpdateWarning without release date and update date", () => { - it("returns no warning level", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); - - expect(appUpdateWarning.warningLevel).toBe(""); - }); - }); - - describe("given AppUpdateWarning with release date and various update dates", () => { - it("returns no warning level if no update date passed", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); - - expect(appUpdateWarning.warningLevel).toBe(""); + describe("given AppUpdateWarning with update date set", () => { + it.skip("returns light warning level when update-downloaded event received", () => { + expect(appUpdateWarning.warningLevel).toBe("light"); }); - it("returns no warning level when days are equal", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); + const lightDates = [ + ["2022-05-31T05:31:00.000Z"], + ["2022-06-01T05:31:00.000Z"], + ["2022-06-02T05:31:00.000Z"], + ["2022-06-03T05:31:00.000Z"], + ["2022-06-04T05:31:00.000Z"], + ["2022-06-05T05:31:00.000Z"], + ["2022-06-06T05:31:00.000Z"], + ["2022-06-07T05:31:00.000Z"], + ["2022-06-08T05:31:00.000Z"], + ["2022-06-09T05:31:00.000Z"], + ["2022-06-10T05:31:00.000Z"], + ["2022-06-11T05:31:00.000Z"], + ["2022-06-12T05:31:00.000Z"], + ["2022-06-13T05:31:00.000Z"], + ["2022-06-14T05:31:00.000Z"], + ["2022-06-15T05:31:00.000Z"], + ["2022-06-16T05:31:00.000Z"], + ["2022-06-17T05:31:00.000Z"], + ["2022-06-18T05:31:00.000Z"], + ["2022-06-19T04:31:00.000Z"], + ]; - appUpdateWarning.downloadedUpdateDate = "2020-01-01T05:00:00"; + const mediumDates = [ + ["2022-06-19T05:31:00.000Z"], + ["2022-06-20T05:31:00.000Z"], + ["2022-06-21T05:31:00.000Z"], + ["2022-06-22T05:31:00.000Z"], + ["2022-06-23T05:31:00.000Z"], + ["2022-06-24T04:31:00.000Z"], + ]; - expect(appUpdateWarning.warningLevel).toBe(""); - }); + const highDates = [ + ["2022-06-24T05:31:00.000Z"], + ["2022-06-25T05:31:00.000Z"], + ["2027-05-28T05:31:00.000Z"], + ]; - it("returns no warning level when update date is before release date", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); + describe.each(lightDates)("given AppUpdateWarning with update date set to %s", (date) => { + beforeAll(() => { + jest.useFakeTimers("modern"); + jest.setSystemTime(new Date(date).getTime()); + }); - appUpdateWarning.downloadedUpdateDate = "2019-12-31T02:35:00"; - - expect(appUpdateWarning.warningLevel).toBe(""); - }); - - it("returns no warning level when update date is 10 days after release date", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); - - appUpdateWarning.downloadedUpdateDate = "2020-01-11T02:35:00"; - - expect(appUpdateWarning.warningLevel).toBe(""); - }); - - it("returns no warning level when update date is 19 days after release date", () => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); - - appUpdateWarning.downloadedUpdateDate = "2020-01-20T02:35:00"; - - expect(appUpdateWarning.warningLevel).toBe(""); - }); - - describe("when downloaded update dates are in light warning level", () => { - it.each([ - ["2020-01-21T02:35:01"], - ["2020-01-22T00:00:00"], - ["2020-01-23T00:00:00"], - ["2020-01-24T00:00:00"], - ["2020-01-25T00:00:00"], - ["2020-01-26T00:00:00"], - ["2020-01-26T02:34:00"], - ])("returns light warning level when update date is %s", (updateDate) => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); - - appUpdateWarning.downloadedUpdateDate = updateDate; + afterAll(() => { + jest.useRealTimers(); + }) + it(`returns light warning level if date is ${date}`, () => { expect(appUpdateWarning.warningLevel).toBe("light"); }); }); - describe("when downloaded update dates are in medium warning level", () => { - it.each([ - ["2020-01-26T02:36:00"], - ["2020-01-27T00:00:00"], - ["2020-01-27T12:22:00"], - ["2020-01-28T00:00:00"], - ["2020-01-28T02:34:00"], - ])("returns medium warning level when update date is %s", (updateDate) => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); + describe.each(mediumDates)("given AppUpdateWarning with update date set to %s", (date) => { + beforeAll(() => { + jest.useFakeTimers("modern"); + jest.setSystemTime(new Date(date).getTime()); + }); - appUpdateWarning.downloadedUpdateDate = updateDate; + afterAll(() => { + jest.useRealTimers(); + }) + it(`returns medium warning level if date is ${date}`, () => { expect(appUpdateWarning.warningLevel).toBe("medium"); }); }); - describe("when downloaded update dates are in high warning level", () => { - it.each([ - ["2020-01-28T02:36:00"], - ["2020-01-29T00:00:00"], - ["2020-01-29T14:59:00"], - ["2020-01-30T00:00:00"], - ["2022-05-10T02:34:00"], - ])("returns medium warning level when update date is %s", (updateDate) => { - const appUpdateWarning = di.inject(appUpdateWarningInjectable); + describe.each(highDates)("given AppUpdateWarning with update date set to %s", (date) => { + beforeAll(() => { + jest.useFakeTimers("modern"); + jest.setSystemTime(new Date(date).getTime()); + }); - appUpdateWarning.downloadedUpdateDate = updateDate; + afterAll(() => { + jest.useRealTimers(); + }) + it(`returns medium warning level if date is ${date}`, () => { expect(appUpdateWarning.warningLevel).toBe("high"); }); }); diff --git a/src/renderer/app-update-warning/app-update-warning.ts b/src/renderer/app-update-warning/app-update-warning.ts index c8586a4417..2ccf0381fd 100644 --- a/src/renderer/app-update-warning/app-update-warning.ts +++ b/src/renderer/app-update-warning/app-update-warning.ts @@ -24,34 +24,39 @@ export class AppUpdateWarning extends Singleton { makeObservable(this); dependencies.ipcRenderer.on(UpdateAvailableChannel, () => { - this.setUpdateAvailableDate(); - this.setWarningLevel(); - this.startRefreshLevelInterval(); + this.init(); }); } - saveDateToSessionStorage() { + init() { + this.setUpdateAvailableDate(); + this.saveDateToSessionStorage(); + this.setWarningLevel(); + this.startRefreshLevelInterval(); + } + + private saveDateToSessionStorage() { if (this.updateAvailableDate) { this.dependencies.sessionStorage.setItem("when-update-available", this.updateAvailableDate.toISOString()); } } - getDateFromSessionStorage() { + private getDateFromSessionStorage() { const value = this.dependencies.sessionStorage.getItem("when-update-available"); if (!value) { return null; } - + const date = new Date(value); - + return isNaN(date.getTime()) ? null : date; } - setUpdateAvailableDate() { + private setUpdateAvailableDate() { if (!this.updateAvailableDate) { this.updateAvailableDate = new Date(); - this.saveDateToSessionStorage(); + } } @@ -74,8 +79,8 @@ export class AppUpdateWarning extends Singleton { return 0; } - const today = new Date(); - const elapsedTime = today.getTime() - this.updateAvailableDate.getTime(); + const today = Date.now(); + const elapsedTime = today - this.updateAvailableDate.getTime(); const elapsedDays = elapsedTime / (onceADay); return elapsedDays;