1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Refresh tests

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2022-05-31 13:07:27 +03:00
parent 1a3f7ddd02
commit 73969ed17a
2 changed files with 105 additions and 89 deletions

View File

@ -2,115 +2,126 @@
* Copyright (c) OpenLens Authors. All rights reserved. * Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information. * 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 ipcRendererInjectable from "../../app-paths/get-value-from-registered-channel/ipc-renderer/ipc-renderer.injectable";
import { getDiForUnitTesting } from "../../getDiForUnitTesting"; 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"; import appUpdateWarningInjectable from "../app-update-warning.injectable";
describe("app-update-warning", () => { describe("app-update-warning", () => {
const di = getDiForUnitTesting({ doGeneralOverrides: true }); let di: DiContainer;
let appUpdateWarning: AppUpdateWarning;
beforeEach(() => { beforeEach(() => {
di = getDiForUnitTesting({ doGeneralOverrides: true });
di.override(ipcRendererInjectable, () => ({ di.override(ipcRendererInjectable, () => ({
on: jest.fn(), on: (event: any, callback: () => void) => {
if (event === "update-available") {
callback();
}
}
} as never)); } 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", () => { describe("given AppUpdateWarning with update date set", () => {
it("returns no warning level", () => { it.skip("returns light warning level when update-downloaded event received", () => {
const appUpdateWarning = di.inject(appUpdateWarningInjectable); expect(appUpdateWarning.warningLevel).toBe("light");
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("");
}); });
it("returns no warning level when days are equal", () => { const lightDates = [
const appUpdateWarning = di.inject(appUpdateWarningInjectable); ["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", () => { describe.each(lightDates)("given AppUpdateWarning with update date set to %s", (date) => {
const appUpdateWarning = di.inject(appUpdateWarningInjectable); beforeAll(() => {
jest.useFakeTimers("modern");
jest.setSystemTime(new Date(date).getTime());
});
appUpdateWarning.downloadedUpdateDate = "2019-12-31T02:35:00"; afterAll(() => {
jest.useRealTimers();
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;
it(`returns light warning level if date is ${date}`, () => {
expect(appUpdateWarning.warningLevel).toBe("light"); expect(appUpdateWarning.warningLevel).toBe("light");
}); });
}); });
describe("when downloaded update dates are in medium warning level", () => { describe.each(mediumDates)("given AppUpdateWarning with update date set to %s", (date) => {
it.each([ beforeAll(() => {
["2020-01-26T02:36:00"], jest.useFakeTimers("modern");
["2020-01-27T00:00:00"], jest.setSystemTime(new Date(date).getTime());
["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);
appUpdateWarning.downloadedUpdateDate = updateDate; afterAll(() => {
jest.useRealTimers();
})
it(`returns medium warning level if date is ${date}`, () => {
expect(appUpdateWarning.warningLevel).toBe("medium"); expect(appUpdateWarning.warningLevel).toBe("medium");
}); });
}); });
describe("when downloaded update dates are in high warning level", () => { describe.each(highDates)("given AppUpdateWarning with update date set to %s", (date) => {
it.each([ beforeAll(() => {
["2020-01-28T02:36:00"], jest.useFakeTimers("modern");
["2020-01-29T00:00:00"], jest.setSystemTime(new Date(date).getTime());
["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);
appUpdateWarning.downloadedUpdateDate = updateDate; afterAll(() => {
jest.useRealTimers();
})
it(`returns medium warning level if date is ${date}`, () => {
expect(appUpdateWarning.warningLevel).toBe("high"); expect(appUpdateWarning.warningLevel).toBe("high");
}); });
}); });

View File

@ -24,34 +24,39 @@ export class AppUpdateWarning extends Singleton {
makeObservable(this); makeObservable(this);
dependencies.ipcRenderer.on(UpdateAvailableChannel, () => { dependencies.ipcRenderer.on(UpdateAvailableChannel, () => {
this.setUpdateAvailableDate(); this.init();
this.setWarningLevel();
this.startRefreshLevelInterval();
}); });
} }
saveDateToSessionStorage() { init() {
this.setUpdateAvailableDate();
this.saveDateToSessionStorage();
this.setWarningLevel();
this.startRefreshLevelInterval();
}
private saveDateToSessionStorage() {
if (this.updateAvailableDate) { if (this.updateAvailableDate) {
this.dependencies.sessionStorage.setItem("when-update-available", this.updateAvailableDate.toISOString()); this.dependencies.sessionStorage.setItem("when-update-available", this.updateAvailableDate.toISOString());
} }
} }
getDateFromSessionStorage() { private getDateFromSessionStorage() {
const value = this.dependencies.sessionStorage.getItem("when-update-available"); const value = this.dependencies.sessionStorage.getItem("when-update-available");
if (!value) { if (!value) {
return null; return null;
} }
const date = new Date(value); const date = new Date(value);
return isNaN(date.getTime()) ? null : date; return isNaN(date.getTime()) ? null : date;
} }
setUpdateAvailableDate() { private setUpdateAvailableDate() {
if (!this.updateAvailableDate) { if (!this.updateAvailableDate) {
this.updateAvailableDate = new Date(); this.updateAvailableDate = new Date();
this.saveDateToSessionStorage();
} }
} }
@ -74,8 +79,8 @@ export class AppUpdateWarning extends Singleton {
return 0; return 0;
} }
const today = new Date(); const today = Date.now();
const elapsedTime = today.getTime() - this.updateAvailableDate.getTime(); const elapsedTime = today - this.updateAvailableDate.getTime();
const elapsedDays = elapsedTime / (onceADay); const elapsedDays = elapsedTime / (onceADay);
return elapsedDays; return elapsedDays;