Files
kandev/apps/web/components/task/task-plan-implement.test.ts
T
2026-07-10 12:56:05 +01:00

59 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { TaskPlan } from "@/lib/types/http";
import { getPlanToolbarImplementState } from "./task-plan-implement";
function plan(overrides: Partial<TaskPlan> = {}): TaskPlan {
return {
id: "plan-1",
task_id: "task-1",
title: "Plan",
content: "Persisted plan",
created_by: "user",
created_at: "2026-07-09T12:00:00Z",
updated_at: "2026-07-09T12:00:00Z",
...overrides,
};
}
describe("getPlanToolbarImplementState", () => {
it("hides the button when the editor draft is empty", () => {
expect(getPlanToolbarImplementState({ draftContent: " \n", plan: null })).toEqual({
visible: false,
disabled: false,
});
});
it("enables the button for non-empty unimplemented plan content", () => {
expect(getPlanToolbarImplementState({ draftContent: "Ship it", plan: plan() })).toEqual({
visible: true,
disabled: false,
});
});
it("keeps the button visible and disabled once implementation has started", () => {
expect(
getPlanToolbarImplementState({
draftContent: "Ship it",
plan: plan({ implementation_started_at: "2026-07-09T12:30:00Z" }),
}),
).toEqual({
visible: true,
disabled: true,
disabledReason: "This plan has already been sent for implementation.",
});
});
it("keeps the disabled marker affordance visible even when the draft is empty", () => {
expect(
getPlanToolbarImplementState({
draftContent: " \n",
plan: plan({ implementation_started_at: "2026-07-09T12:30:00Z" }),
}),
).toEqual({
visible: true,
disabled: true,
disabledReason: "This plan has already been sent for implementation.",
});
});
});