From 9c1665d4aeff02c614bf4e3a5fc1d79b3e42d811 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:58:41 -0800 Subject: [PATCH] Create validate-widget-data.test.js --- src/utils/proxy/validate-widget-data.test.js | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/utils/proxy/validate-widget-data.test.js diff --git a/src/utils/proxy/validate-widget-data.test.js b/src/utils/proxy/validate-widget-data.test.js new file mode 100644 index 000000000..307b5fd5b --- /dev/null +++ b/src/utils/proxy/validate-widget-data.test.js @@ -0,0 +1,44 @@ +import { describe, expect, it, vi } from "vitest"; + +const { loggerError } = vi.hoisted(() => ({ + loggerError: vi.fn(), +})); + +vi.mock("utils/logger", () => ({ + default: () => ({ + error: loggerError, + }), +})); + +vi.mock("widgets/widgets", () => ({ + default: { + test: { + mappings: { + foo: { + endpoint: "foo", + validate: ["a", "b"], + }, + }, + }, + }, +})); + +import validateWidgetData from "./validate-widget-data"; + +describe("utils/proxy/validate-widget-data", () => { + it("returns false when buffer JSON cannot be parsed", () => { + expect(validateWidgetData({ type: "test" }, "foo", Buffer.from("not json"))).toBe(false); + expect(loggerError).toHaveBeenCalled(); + }); + + it("retries parsing after stripping whitespace (e.g. vertical tab) and validates required keys", () => { + // JSON.parse allows only a subset of whitespace; vertical tab triggers a parse error. + const data = Buffer.from(`{\u000B"a": 1, "b": 2}`); + expect(validateWidgetData({ type: "test" }, "foo", data)).toBe(true); + }); + + it("returns false when required validate keys are missing", () => { + expect(validateWidgetData({ type: "test" }, "foo", Buffer.from(JSON.stringify({ a: 1 })))).toBe(false); + expect(loggerError).toHaveBeenCalled(); + }); +});