From 851aeccdea4698c8e2627158df68693588203b7a Mon Sep 17 00:00:00 2001 From: Costa Tsaousis Date: Tue, 29 Sep 2026 05:06:35 +0300 Subject: [PATCH] fix: preserve instance selections missing from response metadata --- src/helpers/normalizeSelectedInstances.js | 3 ++- .../normalizeSelectedInstances.test.js | 22 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/helpers/normalizeSelectedInstances.js b/src/helpers/normalizeSelectedInstances.js index 80a906829..920fae892 100644 --- a/src/helpers/normalizeSelectedInstances.js +++ b/src/helpers/normalizeSelectedInstances.js @@ -53,7 +53,8 @@ const normalizeSelectedInstances = (selectedInstances, instances) => { matchesPattern(instance.nm, selection) }) - matchedKeys.forEach(key => normalizedSet.add(key)) + if (matchedKeys.length) matchedKeys.forEach(key => normalizedSet.add(key)) + else normalizedSet.add(selection) }) return Array.from(normalizedSet) diff --git a/src/helpers/normalizeSelectedInstances.test.js b/src/helpers/normalizeSelectedInstances.test.js index 5e0408d90..89e00aebf 100644 --- a/src/helpers/normalizeSelectedInstances.test.js +++ b/src/helpers/normalizeSelectedInstances.test.js @@ -79,10 +79,28 @@ describe("normalizeSelectedInstances", () => { expect(result.sort()).toEqual(["system.cpu@node1", "system.cpu@node2"]) }) - it("should omit selections that dont match anything", () => { + it("preserves unmatched selections alongside resolved selections", () => { const selected = ["nonexistent", "system.cpu"] const result = normalizeSelectedInstances(selected, mockInstances) - expect(result.sort()).toEqual(["system.cpu@node1", "system.cpu@node2"]) + expect(result.sort()).toEqual(["nonexistent", "system.cpu@node1", "system.cpu@node2"]) + }) + + it.each([{}, { "system.cpu@node2": mockInstances["system.cpu@node2"] }])( + "preserves the requested node when its instance is absent from the summary", + instances => { + const selected = ["system.cpu@node1"] + expect(normalizeSelectedInstances(selected, instances)).toEqual(selected) + } + ) + + it("preserves an unmatched pattern until metadata becomes available", () => { + const selected = ["system.cpu*"] + const pending = normalizeSelectedInstances(selected, {}) + expect(pending).toEqual(selected) + expect(normalizeSelectedInstances(pending, mockInstances).sort()).toEqual([ + "system.cpu@node1", + "system.cpu@node2", + ]) }) it("should handle multiple different selections", () => {