/**
* section-picker.test.tsx — Tests for the SectionPicker Ink component.
*
* The SectionPicker shows a list of 6 profile sections plus a "Re-run LLM
* synthesis" option. Each section shows its name and a one-line summary.
* The user navigates with arrow keys and selects with Enter/Space.
* Esc goes back.
*
* Tests verify:
* - Renders all 6 section names
* - Renders section summaries from the profile
* - Renders the "Re-run LLM synthesis" option
* - Renders header text
* - Renders navigation hints
* - Renders without crashing
*/
import { describe, test, expect } from "bun:test";
import React from "react";
import { renderToString } from "ink";
import { SectionPicker, type SectionPickerProps } from "./section-picker";
import { createBlankProfile } from "../../lib/project-store";
// ---------------------------------------------------------------------------
// Static render tests (renderToString)
// ---------------------------------------------------------------------------
describe("SectionPicker (static rendering)", () => {
const profile = createBlankProfile("test-project");
const defaultProps: SectionPickerProps = {
profile,
onSelect: () => {},
onResynthesize: () => {},
onBack: () => {},
};
test("renders header text", () => {
const output = renderToString();
expect(output).toContain("Edit Profile");
});
test("renders Identity section", () => {
const output = renderToString();
expect(output).toContain("Identity");
});
test("renders Vision section", () => {
const output = renderToString();
expect(output).toContain("Vision");
});
test("renders Objectives section", () => {
const output = renderToString();
expect(output).toContain("Objectives");
});
test("renders Tech Stack section", () => {
const output = renderToString();
expect(output).toContain("Tech Stack");
});
test("renders Conventions section", () => {
const output = renderToString();
expect(output).toContain("Conventions");
});
test("renders Rules section", () => {
const output = renderToString();
expect(output).toContain("Rules");
});
test("renders Re-run LLM synthesis option", () => {
const output = renderToString();
expect(output).toContain("Re-run LLM synthesis");
});
test("renders section summary for identity", () => {
const output = renderToString();
// The profile name is "test-project", which should appear in the summary
expect(output).toContain("test-project");
});
test("renders navigation hint", () => {
const output = renderToString();
expect(output).toContain("Esc");
});
test("renders without crashing", () => {
expect(() =>
renderToString(),
).not.toThrow();
});
});