| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { describe, expect, test } from "bun:test";
- import { normalizeControlMessageKeys } from "../controlMessageCompat";
- describe("normalizeControlMessageKeys", () => {
- // --- basic camelCase to snake_case ---
- test("converts requestId to request_id", () => {
- const obj = { requestId: "123" };
- const result = normalizeControlMessageKeys(obj);
- expect(result).toEqual({ request_id: "123" });
- expect((result as any).requestId).toBeUndefined();
- });
- test("leaves request_id unchanged", () => {
- const obj = { request_id: "123" };
- normalizeControlMessageKeys(obj);
- expect(obj).toEqual({ request_id: "123" });
- });
- // --- both present: snake_case wins ---
- test("keeps snake_case when both requestId and request_id exist", () => {
- const obj = { requestId: "camel", request_id: "snake" };
- const result = normalizeControlMessageKeys(obj) as any;
- expect(result.request_id).toBe("snake");
- // requestId is NOT deleted when request_id already exists
- // because the condition `!('request_id' in record)` prevents the branch
- expect(result.requestId).toBe("camel");
- });
- // --- nested response ---
- test("normalizes nested response.requestId", () => {
- const obj = { response: { requestId: "456" } };
- normalizeControlMessageKeys(obj);
- expect((obj as any).response.request_id).toBe("456");
- expect((obj as any).response.requestId).toBeUndefined();
- });
- test("leaves nested response.request_id unchanged", () => {
- const obj = { response: { request_id: "789" } };
- normalizeControlMessageKeys(obj);
- expect((obj as any).response.request_id).toBe("789");
- });
- test("nested response: snake_case wins when both present", () => {
- const obj = {
- response: { requestId: "camel", request_id: "snake" },
- };
- normalizeControlMessageKeys(obj);
- expect((obj as any).response.request_id).toBe("snake");
- expect((obj as any).response.requestId).toBe("camel");
- });
- // --- non-object inputs ---
- test("returns null as-is", () => {
- expect(normalizeControlMessageKeys(null)).toBeNull();
- });
- test("returns undefined as-is", () => {
- expect(normalizeControlMessageKeys(undefined)).toBeUndefined();
- });
- test("returns string as-is", () => {
- expect(normalizeControlMessageKeys("hello")).toBe("hello");
- });
- test("returns number as-is", () => {
- expect(normalizeControlMessageKeys(42)).toBe(42);
- });
- // --- empty and edge cases ---
- test("empty object is unchanged", () => {
- const obj = {};
- normalizeControlMessageKeys(obj);
- expect(obj).toEqual({});
- });
- test("mutates the original object in place", () => {
- const obj = { requestId: "abc", other: "data" };
- const result = normalizeControlMessageKeys(obj);
- expect(result).toBe(obj); // same reference
- expect(obj).toEqual({ request_id: "abc", other: "data" });
- });
- test("does not affect other keys on the object", () => {
- const obj = { requestId: "123", type: "control_request", payload: {} };
- normalizeControlMessageKeys(obj);
- expect((obj as any).type).toBe("control_request");
- expect((obj as any).payload).toEqual({});
- expect((obj as any).request_id).toBe("123");
- });
- test("handles response being null", () => {
- const obj = { response: null, requestId: "x" };
- normalizeControlMessageKeys(obj);
- expect((obj as any).request_id).toBe("x");
- expect((obj as any).response).toBeNull();
- });
- test("handles response being a non-object (string)", () => {
- const obj = { response: "not-an-object" };
- normalizeControlMessageKeys(obj);
- expect((obj as any).response).toBe("not-an-object");
- });
- });
|