mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
fix(ui): restore the mid-dry-run submit guard and its regression tests
This commit is contained in:
parent
b2f86cf1de
commit
768fcaed2e
2 changed files with 45 additions and 0 deletions
|
|
@ -210,6 +210,29 @@ describe("AddAutoRouterTab", () => {
|
|||
expect(handleAddAutoRouterSubmit).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("creates the router once when the form is submitted again mid dry-run", async () => {
|
||||
vi.mocked(getMissingTiersError).mockReturnValue(null);
|
||||
let resolveVerdict: (verdict: { valid: boolean }) => void = () => {};
|
||||
validateAutoRouterConfig.mockImplementationOnce(
|
||||
() =>
|
||||
new Promise((resolve) => {
|
||||
resolveVerdict = resolve;
|
||||
}),
|
||||
);
|
||||
|
||||
const { container } = renderWithProviders(<Harness />);
|
||||
fireEvent.change(screen.getByPlaceholderText(/smart_router/i), { target: { value: "double-submit-router" } });
|
||||
|
||||
fireEvent.submit(container.querySelector("form")!);
|
||||
await waitFor(() => expect(screen.getByRole("button", { name: /add auto router/i })).toBeDisabled());
|
||||
fireEvent.submit(container.querySelector("form")!);
|
||||
|
||||
resolveVerdict({ valid: true });
|
||||
await waitFor(() => expect(screen.getByRole("button", { name: /add auto router/i })).toBeEnabled());
|
||||
expect(validateAutoRouterConfig).toHaveBeenCalledTimes(1);
|
||||
expect(handleAddAutoRouterSubmit).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("submits when the dry-run passes, so the gate is not simply blocking everything", async () => {
|
||||
const user = userEvent.setup();
|
||||
vi.mocked(getMissingTiersError).mockReturnValue(null);
|
||||
|
|
@ -652,6 +675,27 @@ describe("AddAutoRouterTab", () => {
|
|||
await waitFor(() => expect(toast.fromError).toHaveBeenCalledWith(expect.stringContaining("no longer available")));
|
||||
expect(handleAddAutoRouterSubmit).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("carries a preset's per-tier reasoning effort through to the create payload", async () => {
|
||||
const user = userEvent.setup();
|
||||
mockFetchAvailableModels.mockResolvedValue(ALL_FAMILY_MODELS);
|
||||
|
||||
renderWithProviders(<Harness />);
|
||||
await waitForPresetEnabled("Anthropic Family");
|
||||
await selectTemplate("Anthropic Family");
|
||||
|
||||
await user.type(screen.getByPlaceholderText(/smart_router/i), "anthropic-router");
|
||||
await user.click(screen.getByRole("button", { name: /add auto router/i }));
|
||||
|
||||
await waitFor(() => expect(handleAddAutoRouterSubmit).toHaveBeenCalled());
|
||||
expect(vi.mocked(handleAddAutoRouterSubmit).mock.calls.at(-1)?.[0]).toMatchObject({
|
||||
complexity_router_config: {
|
||||
tier_model_configs: {
|
||||
REASONING: [{ model_name: "claude-opus-5", litellm_params: { reasoning_effort: "high" } }],
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("default model pin", () => {
|
||||
|
|
|
|||
|
|
@ -425,6 +425,7 @@ const AddAutoRouterTab: React.FC<AddAutoRouterTabProps> = ({
|
|||
};
|
||||
|
||||
const handleAutoRouterSubmit = async () => {
|
||||
if (isSubmitting) return;
|
||||
const name = form.getValues("auto_router_name");
|
||||
if (!name) {
|
||||
setShowValidationErrors(true);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue