From 2403a2414f234a4025055e56f8202094caf1b655 Mon Sep 17 00:00:00 2001 From: Ivan Devat Date: Thu, 30 Mar 2023 17:03:06 +0200 Subject: [PATCH] fix cluster-status/fence_levels shape expectation --- jest.config.js | 1 + .../endpoints/clusterStatus/shape/cluster.ts | 10 +++-- .../cluster/displayAdvancedStatus.test.ts | 37 +++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/test/scenes/cluster/displayAdvancedStatus.test.ts diff --git a/jest.config.js b/jest.config.js index 08660443..c5c39dc5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,5 @@ module.exports = { globalSetup: "./src/test/jest-preset.ts", moduleDirectories: ["node_modules", "src"], + testTimeout: 10000, }; diff --git a/src/app/backend/endpoints/clusterStatus/shape/cluster.ts b/src/app/backend/endpoints/clusterStatus/shape/cluster.ts index 97ec4f17..ea29470e 100644 --- a/src/app/backend/endpoints/clusterStatus/shape/cluster.ts +++ b/src/app/backend/endpoints/clusterStatus/shape/cluster.ts @@ -13,10 +13,12 @@ The key of record is a target. */ const ApiFencingLevels = t.record( t.string, - t.type({ - level: t.string, - devices: t.array(t.string), - }), + t.array( + t.type({ + level: t.string, + devices: t.string, + }), + ), ); export const ApiClusterStatusFlag = t.keyof({ diff --git a/src/test/scenes/cluster/displayAdvancedStatus.test.ts b/src/test/scenes/cluster/displayAdvancedStatus.test.ts new file mode 100644 index 00000000..78eb7dbe --- /dev/null +++ b/src/test/scenes/cluster/displayAdvancedStatus.test.ts @@ -0,0 +1,37 @@ +// Cluster status is pretty complex. Sometimes a discrepancy between frontend +// and backend appears. This modules collect tests for discovered cases. + +import * as t from "dev/responses/clusterStatus/tools"; + +import {dt} from "test/tools/selectors"; +import {location, shortcuts} from "test/tools"; + +const clusterName = "test-cluster"; + +// We want to see browser behavior with (for now) invalid status before fix. But +// the typecheck tell us that it is wrong and dev build fails. So, we decive it. +const deceiveTypeCheck = (maybeInvalidPart: ReturnType) => + JSON.parse(JSON.stringify(maybeInvalidPart)); + +describe("Cluster with advanced status", () => { + it("accept fence levels", async () => { + shortcuts.interceptWithCluster({ + clusterStatus: t.cluster(clusterName, "ok", { + fence_levels: deceiveTypeCheck({ + "node-1": [ + { + level: "1", + devices: "fence-1", + }, + { + level: "2", + devices: "fence-2", + }, + ], + }), + }), + }); + await page.goto(location.cluster({clusterName})); + await page.waitForSelector(dt("cluster-overview")); + }); +}); -- 2.39.2