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:
parent
1a3f7ddd02
commit
73969ed17a
@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user