diff --git a/packages/core/src/settings/updateStatus.test.ts b/packages/core/src/settings/updateStatus.test.ts index a7d52bb1ed..7c990e306a 100644 --- a/packages/core/src/settings/updateStatus.test.ts +++ b/packages/core/src/settings/updateStatus.test.ts @@ -45,6 +45,41 @@ describe("deriveUpdateStatus", () => { }); }); + it("reports an available update with a version", () => { + expect( + deriveUpdateStatus({ + checking: false, + available: true, + availableVersion: "1.2.3", + }), + ).toEqual({ + message: "Update 1.2.3 available", + type: "success", + checking: false, + }); + }); + + it("reports an available update without a version", () => { + expect(deriveUpdateStatus({ checking: false, available: true })).toEqual({ + message: "Update available", + type: "success", + checking: false, + }); + }); + + it("reports a check error", () => { + expect( + deriveUpdateStatus({ + checking: false, + error: "Update check timed out. Please try again.", + }), + ).toEqual({ + message: "Update check timed out. Please try again.", + type: "error", + checking: false, + }); + }); + it("clears checking when finished with no other signal", () => { expect(deriveUpdateStatus({ checking: false })).toEqual({ checking: false, diff --git a/packages/core/src/settings/updateStatus.ts b/packages/core/src/settings/updateStatus.ts index 835aeac770..611eaad3b5 100644 --- a/packages/core/src/settings/updateStatus.ts +++ b/packages/core/src/settings/updateStatus.ts @@ -1,9 +1,12 @@ export interface RawUpdateStatus { checking?: boolean; downloading?: boolean; + available?: boolean; upToDate?: boolean; updateReady?: boolean; version?: string; + availableVersion?: string; + error?: string; } export interface DerivedUpdateStatus { @@ -34,6 +37,18 @@ export function deriveUpdateStatus( checking: false, }; } + if (status.checking === false && status.available) { + return { + message: status.availableVersion + ? `Update ${status.availableVersion} available` + : "Update available", + type: "success", + checking: false, + }; + } + if (status.checking === false && status.error) { + return { message: status.error, type: "error", checking: false }; + } if (status.checking === false) { return { checking: false }; }