From 66d64081c00b064764ebaa869eec0b869cceccca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sun, 16 Sep 2018 21:21:06 +0100 Subject: [PATCH] feat(ui): track version changes and mark it with upgradeNeeded --- ui/src/Stores/AlertStore.js | 10 +++++++++- ui/src/Stores/AlertStore.test.js | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ui/src/Stores/AlertStore.js b/ui/src/Stores/AlertStore.js index 2b899632b..b7fc40d9a 100644 --- a/ui/src/Stores/AlertStore.js +++ b/ui/src/Stores/AlertStore.js @@ -142,7 +142,8 @@ class AlertStore { info = observable( { totalAlerts: 0, - version: "unknown" + version: "unknown", + upgradeNeeded: false }, {}, { name: "API response info" } @@ -272,6 +273,13 @@ class AlertStore { this.data = Object.assign(this.data, updates); } + // before storing new version check if we need to reload + if ( + this.info.version !== "unknown" && + this.info.version !== result.version + ) { + this.info.upgradeNeeded = true; + } // update extra root level keys that are stored under 'info' for (const key of ["totalAlerts", "version"]) { if (this.info[key] !== result[key]) { diff --git a/ui/src/Stores/AlertStore.test.js b/ui/src/Stores/AlertStore.test.js index 8761c88a6..f67559b8c 100644 --- a/ui/src/Stores/AlertStore.test.js +++ b/ui/src/Stores/AlertStore.test.js @@ -304,4 +304,17 @@ describe("AlertStore.fetch", () => { annotationsVisible: [] }); }); + + it("wants to reload page after new version is returned in the API", async () => { + const response = EmptyAPIResponse(); + fetch.mockResponse(JSON.stringify(response)); + const store = new AlertStore(["label=value"]); + await expect(store.fetch()).resolves.toBeUndefined(); + expect(store.info.upgradeNeeded).toBe(false); + + response.version = "newFakeVersion"; + fetch.mockResponse(JSON.stringify(response)); + await expect(store.fetch()).resolves.toBeUndefined(); + expect(store.info.upgradeNeeded).toBe(true); + }); });