fix: drain Identity error body (keep-alive); reject whitespace-only credential fields in form

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-04 20:36:50 +07:00
parent be408a216c
commit e8e7371f09
3 changed files with 26 additions and 3 deletions
+20
View File
@@ -60,6 +60,26 @@ test("сабмит с пустыми полями показывает zod-ош
expect(createSpy).not.toHaveBeenCalled()
})
test("сабмит с пробельным вводом в обязательных полях показывает zod-ошибки и не вызывает createAccount", async () => {
const createSpy = vi.spyOn(api, "createAccount")
const user = userEvent.setup()
renderPage()
await screen.findByText("Main")
await user.type(screen.getByLabelText(/имя сервисного пользователя/i), " ")
await user.type(screen.getByLabelText(/пароль/i), "some-password")
await user.type(screen.getByLabelText(/номер аккаунта/i), " ")
await user.type(screen.getByLabelText(/имя проекта/i), " ")
await user.click(screen.getByRole("button", { name: /добавить учётку/i }))
expect(await screen.findByText("Укажите имя сервисного пользователя")).toBeInTheDocument()
expect(screen.getByText("Укажите номер аккаунта")).toBeInTheDocument()
expect(screen.getByText("Укажите имя проекта")).toBeInTheDocument()
expect(createSpy).not.toHaveBeenCalled()
})
test("заполнение 4 полей и сабмит вызывает createAccount с secret в snake_case и не показывает пароль после", async () => {
const createSpy = vi.spyOn(api, "createAccount").mockResolvedValue({
id: "acc3",
+3 -3
View File
@@ -26,10 +26,10 @@ import { useAccounts, useCreateAccount, useDeleteAccount } from "@/hooks/useApi"
const createAccountSchema = z.object({
provider: z.literal("selectel"),
username: z.string().min(1, "Укажите имя сервисного пользователя"),
username: z.string().trim().min(1, "Укажите имя сервисного пользователя"),
password: z.string().min(1, "Укажите пароль"),
accountId: z.string().min(1, "Укажите номер аккаунта"),
projectName: z.string().min(1, "Укажите имя проекта"),
accountId: z.string().trim().min(1, "Укажите номер аккаунта"),
projectName: z.string().trim().min(1, "Укажите имя проекта"),
comment: z.string(),
})