Files
Clintchiz eb1875f0bc
Quality / quality (ubuntu-latest) (push) Failing after 10m2s
Quality / quality (windows-latest) (push) Canceled after 0s
Expose reusable builder kit surfaces and email preset pack
2026-09-05 19:51:57 +05:30

63 lines
2.6 KiB
TypeScript

import { expect, test } from "bun:test";
import { InspectorDrafts, type InspectorValues } from "../src/inspector-drafts.ts";
const node = { id: "text", props: { text: "Saved" }, styles: {} };
const baseline: InspectorValues = {
props: { text: "Saved", decorative: false },
styles: { fontSize: { value: "", empty: "true" } },
};
const edited: InspectorValues = {
props: { text: "Typing", decorative: true },
styles: { fontSize: { value: "20px", empty: "" } },
};
test("selection and preview remount preserve independent props, checkbox, and style drafts", () => {
const store = new InspectorDrafts();
store.capture(node, baseline, edited);
expect(store.restore({ ...node, id: "other" }, baseline)).toEqual(baseline);
expect(store.restore(node, baseline)).toEqual(edited);
expect(store.restore(node, baseline)).toEqual(edited);
expect(node.props.text).toBe("Saved");
expect(store.size).toBe(1);
});
test("applying content does not discard pending style changes or resurrect applied content", () => {
const store = new InspectorDrafts();
store.capture(node, baseline, edited);
const applied = { ...node, props: { text: "Typing" } };
const next = { ...baseline, props: { ...baseline.props, text: "Typing" } };
expect(store.restore(applied, next)).toEqual({ ...next, styles: edited.styles });
expect(store.restore(node, baseline).props).toEqual(baseline.props);
});
test("applying styles does not erase content drafts", () => {
const store = new InspectorDrafts();
store.capture(node, baseline, edited);
const applied = { ...node, styles: { fontSize: { base: "20px" } } };
const next = { ...baseline, styles: edited.styles };
expect(store.restore(applied, next)).toEqual({ props: edited.props, styles: edited.styles });
});
test("reverting fields, discarding, and deleting blocks release their drafts", () => {
const store = new InspectorDrafts();
store.capture(node, baseline, edited);
store.capture(node, baseline, baseline);
expect(store.size).toBe(0);
store.capture(node, baseline, edited);
store.discard(node.id);
expect(store.restore(node, baseline)).toEqual(baseline);
store.capture(node, baseline, edited);
store.retain(new Set(["other"]));
expect(store.size).toBe(0);
});
test("capture and restore do not share mutable control snapshots", () => {
const store = new InspectorDrafts(),
draft = structuredClone(edited);
store.capture(node, baseline, draft);
draft.styles.fontSize!.value = "99px";
const restored = store.restore(node, baseline);
restored.styles.fontSize!.value = "88px";
expect(store.restore(node, baseline).styles.fontSize!.value).toBe("20px");
});