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.
* 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");
});
});

View File

@ -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;