1
0
mirror of https://github.com/home-assistant/frontend.git synced 2026-07-01 19:45:52 +01:00
Files
frontend/test/data/format_selector_value.test.ts

64 lines
2.0 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { formatSelectorValue } from "../../src/data/selector/format_selector_value";
import type { HomeAssistant } from "../../src/types";
// formatSelectorValue only touches hass for floor/area/entity/device
// selectors, none of which these tests exercise.
const hass = {} as HomeAssistant;
describe("formatSelectorValue", () => {
it("returns an empty string for nullish values", () => {
expect(formatSelectorValue(hass, null)).toBe("");
expect(formatSelectorValue(hass, undefined)).toBe("");
});
it("renders a plain text value", () => {
expect(formatSelectorValue(hass, "hello", { text: { type: "text" } })).toBe(
"hello"
);
});
it("applies prefix and suffix for text selectors", () => {
expect(
formatSelectorValue(hass, "5", {
text: { type: "text", prefix: "$", suffix: " each" },
})
).toBe("$5 each");
});
it("masks a password text value instead of revealing it", () => {
const result = formatSelectorValue(hass, "hunter2", {
text: { type: "password" },
});
expect(result).not.toContain("hunter2");
expect(result).toBe("••••••••");
});
it("masks every value of a multiple password selector", () => {
const result = formatSelectorValue(hass, ["one", "two"], {
text: { type: "password" },
});
expect(result).not.toContain("one");
expect(result).not.toContain("two");
expect(result).toBe("••••••••, ••••••••");
});
it("masks a nested password field in an object selector preview", () => {
const result = formatSelectorValue(
hass,
{ username: "admin", password: "hunter2" },
{
object: {
fields: {
username: { selector: { text: { type: "text" } } },
password: { selector: { text: { type: "password" } } },
},
},
}
);
expect(result).toContain("admin");
expect(result).not.toContain("hunter2");
expect(result).toContain("••••••••");
});
});