Files
dbx/apps/desktop/src/lib/__tests__/kvValueDisplay.spec.ts
T

89 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { formatZooKeeperMetadataRows, formatZooKeeperSummaryBadges, prettyPrintJsonText } from "@/lib/kvValueDisplay";
import type { KvKeyMetadata } from "@/lib/api";
describe("kv value display helpers", () => {
it("pretty prints valid JSON text", () => {
expect(prettyPrintJsonText('{"name":"张三","roles":["admin","reader"]}')).toEqual({
ok: true,
value: '{\n "name": "张三",\n "roles": [\n "admin",\n "reader"\n ]\n}',
});
});
it("does not treat plain text as JSON", () => {
expect(prettyPrintJsonText("hello")).toEqual({
ok: false,
error: "invalid_json",
});
});
it("formats ZooKeeper summary badges with ZK fallbacks", () => {
const metadata: KvKeyMetadata = {
mzxid: 29,
version: 0,
lease: null,
dataLength: 291,
};
expect(formatZooKeeperSummaryBadges(metadata)).toEqual([
{ label: "rev", value: "29" },
{ label: "ver", value: "0" },
{ label: "lease", value: "-" },
{ label: "size", value: "291 B" },
]);
});
it("formats ZooKeeper summary badges with localized labels", () => {
const metadata: KvKeyMetadata = {
mzxid: 373437,
version: 0,
lease: null,
dataLength: 291,
};
expect(
formatZooKeeperSummaryBadges(metadata, {
revision: "修订",
version: "版本",
lease: "租约",
size: "大小",
}),
).toEqual([
{ label: "修订", value: "373437" },
{ label: "版本", value: "0" },
{ label: "租约", value: "-" },
{ label: "大小", value: "291 B" },
]);
});
it("formats ZooKeeper stat rows using user-facing labels", () => {
const metadata: KvKeyMetadata = {
ephemeralOwner: 0,
ctime: 1780674584000,
mtime: 1780674585000,
mzxid: 27,
pzxid: 39825,
czxid: 27,
dataLength: 0,
numChildren: 5,
version: 0,
aversion: 0,
cversion: 5,
};
expect(formatZooKeeperMetadataRows(metadata).map((row) => [row.label, row.value])).toEqual([
["ephemeralOwner", "0x0"],
["mtime", expect.stringMatching(/^2026-06-05 \d{2}:49:45$/)],
["ctime", expect.stringMatching(/^2026-06-05 \d{2}:49:44$/)],
["mZxid", "0x1b"],
["pZxid", "0x9b91"],
["cZxid", "0x1b"],
["dataLength", "0"],
["numChildren", "5"],
["dataVersion", "0"],
["aclVersion", "0"],
["cVersion", "5"],
]);
});
});