diff --git a/src/utils/ticketErrors.test.ts b/src/utils/ticketErrors.test.ts index 67dbb11..1cd389f 100644 --- a/src/utils/ticketErrors.test.ts +++ b/src/utils/ticketErrors.test.ts @@ -1,3 +1,4 @@ +import { readFileSync } from 'node:fs'; import { AxiosError, AxiosHeaders } from 'axios'; import { describe, expect, it } from 'vitest'; import { isOpenTicketConflict } from './ticketErrors'; @@ -48,3 +49,37 @@ describe('isOpenTicketConflict', () => { expect(isOpenTicketConflict(null)).toBe(false); }); }); + +describe('обработчики ошибок на форме поддержки', () => { + // Решение «это 409» вынесено в утилиту и покрыто выше, а вот сама привязка + // onError к мутациям — нет: в репозитории нет окружения для рендера + // компонентов (vitest настроен на node, без jsdom). Поэтому закрепляем + // структурно: пропажа onError — это ровно тот баг, который PR и чинит + // (форма молчала, человек жал «Отправить» повторно). + const source = readFileSync(new URL('../pages/Support.tsx', import.meta.url), 'utf8'); + + it('createMutation обрабатывает отказ бэка', () => { + const block = source.slice( + source.indexOf('const createMutation'), + source.indexOf('const replyMutation'), + ); + expect(block).toContain('onError'); + expect(block).toContain('isOpenTicketConflict'); + }); + + it('replyMutation обрабатывает отказ бэка', () => { + const block = source.slice( + source.indexOf('const replyMutation'), + source.indexOf('const getStatusBadge'), + ); + expect(block).toContain('onError'); + }); + + it('409 подтягивает список тикетов — открытый мог появиться в другой сессии', () => { + const block = source.slice( + source.indexOf('isOpenTicketConflict(error)'), + source.indexOf('const replyMutation'), + ); + expect(block).toContain('invalidateQueries'); + }); +});