refactor(desktop): harden workspace shell foundation

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Senior Frontend Engineer
2026-03-31 04:03:38 +00:00
parent 7c1abf2fd1
commit 291f744e0f
10 changed files with 805 additions and 82 deletions

View File

@@ -0,0 +1,55 @@
import { describe, expect, it } from "vitest";
import {
buildDemoStringPreview,
formatDemoDurationFromMillis,
parseDemoTtlToSeconds,
persistDemoKeyTtl,
updateDemoKeyTtl,
updateDemoStringValue,
type DemoWorkspaceKey,
} from "./demo-workspace";
const demoKeys: DemoWorkspaceKey[] = [
{
id: "cache:homepage",
name: "cache:homepage",
type: "string",
ttl: "48s",
preview: "serialized landing payload",
editable: true,
value: "{\"hero\":\"Redis GUI\"}",
summary: "String keys are editable in V1.",
},
];
describe("demo workspace helpers", () => {
it("updates string values and refreshes the visible preview", () => {
expect(
updateDemoStringValue(demoKeys, "cache:homepage", "next value"),
).toEqual([
{
...demoKeys[0],
value: "next value",
preview: "next value",
},
]);
});
it("updates TTL state for session-local demo flows", () => {
expect(updateDemoKeyTtl(demoKeys, "cache:homepage", 90_000)[0]?.ttl).toBe("1m");
expect(persistDemoKeyTtl(demoKeys, "cache:homepage")[0]?.ttl).toBe("persistent");
});
it("formats preview text and durations consistently", () => {
expect(buildDemoStringPreview("alpha beta gamma delta epsilon zeta eta theta", 16)).toBe(
"alpha beta gamm…",
);
expect(formatDemoDurationFromMillis(750)).toBe("750ms");
expect(formatDemoDurationFromMillis(5_000)).toBe("5s");
expect(formatDemoDurationFromMillis(7_200_000)).toBe("2h");
expect(parseDemoTtlToSeconds("750ms")).toBe(0);
expect(parseDemoTtlToSeconds("5s")).toBe(5);
expect(parseDemoTtlToSeconds("2h")).toBe(7200);
expect(parseDemoTtlToSeconds("persistent")).toBe(-1);
});
});