Skip to content

Commit 61bf90e

Browse files
committed
Fix supervisor content test validity defaults
1 parent 34182e0 commit 61bf90e

1 file changed

Lines changed: 77 additions & 159 deletions

File tree

packages/web/src/features/supervisor/views/shared/objective-dialog-content.test.tsx

Lines changed: 77 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { fireEvent, render, screen, waitFor, within } from "@testing-library/react";
22
import userEvent from "@testing-library/user-event";
3+
import type { ComponentProps } from "react";
34
import { afterEach, describe, expect, it, vi } from "vitest";
45
import { ObjectiveDialogContent } from "./objective-dialog-content";
56

@@ -26,65 +27,55 @@ afterEach(() => {
2627
delete (window as typeof window & { matchMedia?: typeof window.matchMedia }).matchMedia;
2728
});
2829

30+
type ObjectiveDialogContentProps = ComponentProps<typeof ObjectiveDialogContent>;
31+
32+
function createObjectiveDialogContentProps(
33+
overrides: Partial<ObjectiveDialogContentProps> = {}
34+
): ObjectiveDialogContentProps {
35+
return {
36+
mode: "enable",
37+
draftObjective: "Investigate regressions",
38+
draftEvaluatorProviderId: "claude",
39+
draftEvaluatorModel: "",
40+
draftMaxSupervisionCount: "0",
41+
draftScheduledAt: "",
42+
isMaxSupervisionCountValid: true,
43+
disableObjective: "",
44+
onDraftObjectiveChange: vi.fn(),
45+
onDraftEvaluatorProviderChange: vi.fn(),
46+
onDraftEvaluatorModelChange: vi.fn(),
47+
onDraftMaxSupervisionCountChange: vi.fn(),
48+
onDraftScheduledAtChange: vi.fn(),
49+
...overrides,
50+
};
51+
}
52+
53+
function renderObjectiveDialogContent(overrides: Partial<ObjectiveDialogContentProps> = {}) {
54+
return render(<ObjectiveDialogContent {...createObjectiveDialogContentProps(overrides)} />);
55+
}
56+
2957
describe("ObjectiveDialogContent", () => {
30-
it("does not render the supervisor intro strip by default for enable and edit modes", () => {
31-
const { rerender } = render(
32-
<ObjectiveDialogContent
33-
mode="enable"
34-
draftObjective="Investigate regressions"
35-
draftEvaluatorProviderId="claude"
36-
draftEvaluatorModel=""
37-
draftMaxSupervisionCount="0"
38-
draftScheduledAt=""
39-
disableObjective=""
40-
onDraftObjectiveChange={vi.fn()}
41-
onDraftEvaluatorProviderChange={vi.fn()}
42-
onDraftEvaluatorModelChange={vi.fn()}
43-
onDraftMaxSupervisionCountChange={vi.fn()}
44-
onDraftScheduledAtChange={vi.fn()}
45-
/>
58+
it("renders the max supervision count field as valid by default in shared-content tests", () => {
59+
renderObjectiveDialogContent();
60+
61+
expect(screen.getByLabelText("supervisor.field.max_supervision_count")).toHaveAttribute(
62+
"aria-invalid",
63+
"false"
4664
);
65+
});
66+
67+
it("does not render the supervisor intro strip by default for enable and edit modes", () => {
68+
const { rerender } = renderObjectiveDialogContent();
4769

4870
expect(document.querySelector(".supervisor-dialog-intro")).toBeNull();
4971

50-
rerender(
51-
<ObjectiveDialogContent
52-
mode="edit"
53-
draftObjective="Investigate regressions"
54-
draftEvaluatorProviderId="claude"
55-
draftEvaluatorModel=""
56-
draftMaxSupervisionCount="0"
57-
draftScheduledAt=""
58-
disableObjective=""
59-
onDraftObjectiveChange={vi.fn()}
60-
onDraftEvaluatorProviderChange={vi.fn()}
61-
onDraftEvaluatorModelChange={vi.fn()}
62-
onDraftMaxSupervisionCountChange={vi.fn()}
63-
onDraftScheduledAtChange={vi.fn()}
64-
/>
65-
);
72+
rerender(<ObjectiveDialogContent {...createObjectiveDialogContentProps({ mode: "edit" })} />);
6673

6774
expect(document.querySelector(".supervisor-dialog-intro")).toBeNull();
6875
});
6976

7077
it("renders a flat supervisor intro strip when showIntro is true for enable and edit modes", () => {
71-
const { rerender } = render(
72-
<ObjectiveDialogContent
73-
mode="enable"
74-
showIntro
75-
draftObjective="Investigate regressions"
76-
draftEvaluatorProviderId="claude"
77-
draftEvaluatorModel=""
78-
draftMaxSupervisionCount="0"
79-
draftScheduledAt=""
80-
disableObjective=""
81-
onDraftObjectiveChange={vi.fn()}
82-
onDraftEvaluatorProviderChange={vi.fn()}
83-
onDraftEvaluatorModelChange={vi.fn()}
84-
onDraftMaxSupervisionCountChange={vi.fn()}
85-
onDraftScheduledAtChange={vi.fn()}
86-
/>
87-
);
78+
const { rerender } = renderObjectiveDialogContent({ showIntro: true });
8879

8980
let intro = document.querySelector(".supervisor-dialog-intro");
9081
let introIcon = document.querySelector(".supervisor-dialog-intro__icon");
@@ -109,19 +100,7 @@ describe("ObjectiveDialogContent", () => {
109100

110101
rerender(
111102
<ObjectiveDialogContent
112-
mode="edit"
113-
showIntro
114-
draftObjective="Investigate regressions"
115-
draftEvaluatorProviderId="claude"
116-
draftEvaluatorModel=""
117-
draftMaxSupervisionCount="0"
118-
draftScheduledAt=""
119-
disableObjective=""
120-
onDraftObjectiveChange={vi.fn()}
121-
onDraftEvaluatorProviderChange={vi.fn()}
122-
onDraftEvaluatorModelChange={vi.fn()}
123-
onDraftMaxSupervisionCountChange={vi.fn()}
124-
onDraftScheduledAtChange={vi.fn()}
103+
{...createObjectiveDialogContentProps({ mode: "edit", showIntro: true })}
125104
/>
126105
);
127106

@@ -148,22 +127,11 @@ describe("ObjectiveDialogContent", () => {
148127
});
149128

150129
it("renders compact control classes instead of large form controls", () => {
151-
render(
152-
<ObjectiveDialogContent
153-
mode="edit"
154-
draftObjective="Investigate regressions"
155-
draftEvaluatorProviderId="claude"
156-
draftEvaluatorModel="sonnet"
157-
draftMaxSupervisionCount="3"
158-
draftScheduledAt=""
159-
disableObjective=""
160-
onDraftObjectiveChange={vi.fn()}
161-
onDraftEvaluatorProviderChange={vi.fn()}
162-
onDraftEvaluatorModelChange={vi.fn()}
163-
onDraftMaxSupervisionCountChange={vi.fn()}
164-
onDraftScheduledAtChange={vi.fn()}
165-
/>
166-
);
130+
renderObjectiveDialogContent({
131+
mode: "edit",
132+
draftEvaluatorModel: "sonnet",
133+
draftMaxSupervisionCount: "3",
134+
});
167135

168136
const textarea = screen.getByLabelText("supervisor.field.objective");
169137
expect(textarea).toHaveClass("input", "textarea");
@@ -203,22 +171,11 @@ describe("ObjectiveDialogContent", () => {
203171
it("keeps objective editing behavior unchanged", () => {
204172
const onDraftObjectiveChange = vi.fn();
205173

206-
render(
207-
<ObjectiveDialogContent
208-
mode="enable"
209-
draftObjective=""
210-
draftEvaluatorProviderId="heuristic"
211-
draftEvaluatorModel=""
212-
draftMaxSupervisionCount="0"
213-
draftScheduledAt=""
214-
disableObjective=""
215-
onDraftObjectiveChange={onDraftObjectiveChange}
216-
onDraftEvaluatorProviderChange={vi.fn()}
217-
onDraftEvaluatorModelChange={vi.fn()}
218-
onDraftMaxSupervisionCountChange={vi.fn()}
219-
onDraftScheduledAtChange={vi.fn()}
220-
/>
221-
);
174+
renderObjectiveDialogContent({
175+
draftObjective: "",
176+
draftEvaluatorProviderId: "heuristic",
177+
onDraftObjectiveChange,
178+
});
222179

223180
const textarea = screen.getByLabelText("supervisor.field.objective");
224181
fireEvent.change(textarea, { target: { value: "Ship a safe rollout plan" } });
@@ -231,22 +188,10 @@ describe("ObjectiveDialogContent", () => {
231188
const user = userEvent.setup();
232189
const onDraftEvaluatorProviderChange = vi.fn();
233190

234-
render(
235-
<ObjectiveDialogContent
236-
mode="enable"
237-
draftObjective=""
238-
draftEvaluatorProviderId="claude"
239-
draftEvaluatorModel=""
240-
draftMaxSupervisionCount="0"
241-
draftScheduledAt=""
242-
disableObjective=""
243-
onDraftObjectiveChange={vi.fn()}
244-
onDraftEvaluatorProviderChange={onDraftEvaluatorProviderChange}
245-
onDraftEvaluatorModelChange={vi.fn()}
246-
onDraftMaxSupervisionCountChange={vi.fn()}
247-
onDraftScheduledAtChange={vi.fn()}
248-
/>
249-
);
191+
renderObjectiveDialogContent({
192+
draftObjective: "",
193+
onDraftEvaluatorProviderChange,
194+
});
250195

251196
await user.click(screen.getByRole("button", { name: "supervisor.field.evaluator Claude" }));
252197

@@ -268,22 +213,11 @@ describe("ObjectiveDialogContent", () => {
268213
(query) => query.includes("max-width: 899px") || query.includes("pointer: coarse")
269214
);
270215

271-
render(
272-
<ObjectiveDialogContent
273-
mode="enable"
274-
draftObjective=""
275-
draftEvaluatorProviderId="codex"
276-
draftEvaluatorModel=""
277-
draftMaxSupervisionCount="0"
278-
draftScheduledAt=""
279-
disableObjective=""
280-
onDraftObjectiveChange={vi.fn()}
281-
onDraftEvaluatorProviderChange={onDraftEvaluatorProviderChange}
282-
onDraftEvaluatorModelChange={vi.fn()}
283-
onDraftMaxSupervisionCountChange={vi.fn()}
284-
onDraftScheduledAtChange={vi.fn()}
285-
/>
286-
);
216+
renderObjectiveDialogContent({
217+
draftObjective: "",
218+
draftEvaluatorProviderId: "codex",
219+
onDraftEvaluatorProviderChange,
220+
});
287221

288222
const trigger = screen.getByRole("button", {
289223
name: "supervisor.field.evaluator Codex",
@@ -310,22 +244,16 @@ describe("ObjectiveDialogContent", () => {
310244
const onDraftMaxSupervisionCountChange = vi.fn();
311245
const onDraftScheduledAtChange = vi.fn();
312246

313-
render(
314-
<ObjectiveDialogContent
315-
mode="enable"
316-
draftObjective=""
317-
draftEvaluatorProviderId="codex"
318-
draftEvaluatorModel="o3"
319-
draftMaxSupervisionCount="5"
320-
draftScheduledAt="2026-05-11T03:00"
321-
disableObjective=""
322-
onDraftObjectiveChange={vi.fn()}
323-
onDraftEvaluatorProviderChange={vi.fn()}
324-
onDraftEvaluatorModelChange={onDraftEvaluatorModelChange}
325-
onDraftMaxSupervisionCountChange={onDraftMaxSupervisionCountChange}
326-
onDraftScheduledAtChange={onDraftScheduledAtChange}
327-
/>
328-
);
247+
renderObjectiveDialogContent({
248+
draftObjective: "",
249+
draftEvaluatorProviderId: "codex",
250+
draftEvaluatorModel: "o3",
251+
draftMaxSupervisionCount: "5",
252+
draftScheduledAt: "2026-05-11T03:00",
253+
onDraftEvaluatorModelChange,
254+
onDraftMaxSupervisionCountChange,
255+
onDraftScheduledAtChange,
256+
});
329257

330258
fireEvent.change(screen.getByLabelText("supervisor.field.evaluator_model"), {
331259
target: { value: "gpt-5" },
@@ -339,23 +267,13 @@ describe("ObjectiveDialogContent", () => {
339267
});
340268

341269
it("renders the semantic warning icon for disable mode", () => {
342-
render(
343-
<ObjectiveDialogContent
344-
mode="disable"
345-
showIntro
346-
draftObjective=""
347-
draftEvaluatorProviderId="codex"
348-
draftEvaluatorModel=""
349-
draftMaxSupervisionCount="0"
350-
draftScheduledAt=""
351-
disableObjective="Current objective"
352-
onDraftObjectiveChange={vi.fn()}
353-
onDraftEvaluatorProviderChange={vi.fn()}
354-
onDraftEvaluatorModelChange={vi.fn()}
355-
onDraftMaxSupervisionCountChange={vi.fn()}
356-
onDraftScheduledAtChange={vi.fn()}
357-
/>
358-
);
270+
renderObjectiveDialogContent({
271+
mode: "disable",
272+
showIntro: true,
273+
draftObjective: "",
274+
draftEvaluatorProviderId: "codex",
275+
disableObjective: "Current objective",
276+
});
359277

360278
expect(document.querySelector(".supervisor-dialog-intro")).toBeNull();
361279
expect(

0 commit comments

Comments
 (0)