Skip to content

Commit 6d2f294

Browse files
committed
test: add workspace model override
1 parent 5482840 commit 6d2f294

4 files changed

+147
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import { render } from "@/lib/test-utils";
2+
import { screen, waitFor } from "@testing-library/react";
3+
import { WorkspaceModelOverrides } from "../workspace-model-overrides";
4+
import userEvent from "@testing-library/user-event";
5+
6+
test("render model overrides", () => {
7+
render(
8+
<WorkspaceModelOverrides
9+
isArchived={false}
10+
workspaceName="fake-workspace"
11+
/>,
12+
);
13+
expect(screen.getByText(/model overrides/i)).toBeVisible();
14+
expect(
15+
screen.getByText(
16+
/route to different large language models based on file type, individual files, or repository./i,
17+
),
18+
).toBeVisible();
19+
expect(
20+
screen.getAllByRole("textbox", { name: /filter by/i }).length,
21+
).toBeGreaterThanOrEqual(1);
22+
expect(
23+
screen.getAllByRole("button", { name: /preferred model/i }).length,
24+
).toBeGreaterThanOrEqual(1);
25+
26+
expect(
27+
screen.getAllByPlaceholderText(/eg file type, file name, or repository/i)
28+
.length,
29+
).toBeGreaterThanOrEqual(1);
30+
});
31+
32+
test("submit model overrides", async () => {
33+
render(
34+
<WorkspaceModelOverrides
35+
isArchived={false}
36+
workspaceName="fake-workspace"
37+
/>,
38+
);
39+
40+
const filterByEl = screen.getAllByRole("textbox", { name: /filter by/i })[0];
41+
await userEvent.type(filterByEl as HTMLFormElement, "*.tsx");
42+
43+
const modelEl = screen.getAllByRole("button", {
44+
name: /preferred model/i,
45+
})[0];
46+
await userEvent.click(modelEl as HTMLFormElement);
47+
48+
await userEvent.click(
49+
screen.getByRole("option", {
50+
name: "claude-3.5",
51+
}),
52+
);
53+
54+
await userEvent.click(screen.getByRole("button", { name: /save/i }));
55+
56+
await waitFor(() => {
57+
expect(
58+
screen.getByText(
59+
/model overrides on fake-workspace successfully submitted!/i,
60+
),
61+
);
62+
});
63+
});
64+
65+
test("submit additional model overrides", async () => {
66+
render(
67+
<WorkspaceModelOverrides
68+
isArchived={false}
69+
workspaceName="fake-workspace"
70+
/>,
71+
);
72+
73+
expect(screen.getAllByRole("textbox", { name: /filter by/i }).length).toEqual(
74+
2,
75+
);
76+
77+
await userEvent.click(
78+
screen.getByRole("button", { name: /additional filter/i }),
79+
);
80+
81+
const textFields = await screen.findAllByRole("textbox", {
82+
name: /filter by/i,
83+
});
84+
expect(textFields.length).toEqual(3);
85+
expect(textFields[2]).toBeDefined();
86+
await userEvent.type(textFields[2] as HTMLFormElement, "*.ts");
87+
88+
await userEvent.click(
89+
screen.getAllByRole("button", {
90+
name: /preferred model/i,
91+
})[2] as HTMLFormElement,
92+
);
93+
94+
await userEvent.click(
95+
screen.getByRole("option", {
96+
name: "claude-3.5",
97+
}),
98+
);
99+
100+
await userEvent.click(screen.getByRole("button", { name: /save/i }));
101+
102+
await waitFor(() => {
103+
expect(
104+
screen.getByText(
105+
/model overrides on fake-workspace successfully submitted!/i,
106+
),
107+
);
108+
});
109+
});
110+
111+
test("remove the first model override and submit", async () => {
112+
render(
113+
<WorkspaceModelOverrides
114+
isArchived={false}
115+
workspaceName="fake-workspace"
116+
/>,
117+
);
118+
119+
const textFields = screen.getAllByRole("textbox", { name: /filter by/i });
120+
expect(textFields.length).toEqual(3);
121+
await userEvent.click(
122+
screen.getAllByRole("button", {
123+
name: /remove override/i,
124+
})[0] as HTMLFormElement,
125+
);
126+
127+
await waitFor(() =>
128+
expect(
129+
screen.getAllByRole("textbox", { name: /filter by/i }).length,
130+
).toEqual(2),
131+
);
132+
133+
await userEvent.click(screen.getByRole("button", { name: /save/i }));
134+
135+
await waitFor(() => {
136+
expect(
137+
screen.getByText(
138+
/model overrides on fake-workspace successfully submitted!/i,
139+
),
140+
);
141+
});
142+
});

src/features/workspace/components/workspace-model-overrides.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export function SortableItem({ override, index }: SortableItemProps) {
6666
</Select>
6767
{index !== 0 && (
6868
<Button
69+
aria-label="remove override"
6970
isIcon
7071
variant="tertiary"
7172
onPress={() => removeOverride(index)}
@@ -114,8 +115,9 @@ export function WorkspaceModelOverrides({
114115
</div>
115116
<div>
116117
<div className="flex gap-2">
117-
<div className="w-full pl-8">
118-
<Label id="filter-by-label-id">Preferred Model</Label>
118+
<div className="w-12">&nbsp;</div>
119+
<div className="w-full">
120+
<Label id="filter-by-label-id">Filter by</Label>
119121
</div>
120122
<div className="w-2/5">
121123
<Label id="preferred-model-id">Preferred Model</Label>

src/features/workspace/hooks/use-mutation-model-overrides-workspace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ export function useMutationModelOverridesWorkspace() {
1010
await invalidate();
1111
},
1212
successMsg: (variables) =>
13-
`Model overrides on ${variables.path.workspace_name} successfully submitted! `,
13+
`Model overrides on ${variables.path.workspace_name} successfully submitted!`,
1414
});
1515
}

0 commit comments

Comments
 (0)