From 4a1663b426a0e8c76f7696d6d090cb76ad682a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 16 May 2026 22:03:07 +0300 Subject: [PATCH] =?UTF-8?q?test(auth):=20A5=20=E2=80=94=20regression=20gen?= =?UTF-8?q?eric=20fallback=20ForgotPassword=20(Sprint=205A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/tests/Frontend/ForgotPasswordView.spec.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/tests/Frontend/ForgotPasswordView.spec.ts b/app/tests/Frontend/ForgotPasswordView.spec.ts index f2e68d20..3436703d 100644 --- a/app/tests/Frontend/ForgotPasswordView.spec.ts +++ b/app/tests/Frontend/ForgotPasswordView.spec.ts @@ -1,5 +1,5 @@ import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { mount } from '@vue/test-utils'; +import { mount, flushPromises } from '@vue/test-utils'; import { createPinia, setActivePinia } from 'pinia'; import { createVuetify } from 'vuetify'; import { createRouter, createMemoryHistory } from 'vue-router'; @@ -95,4 +95,18 @@ describe('ForgotPasswordView.vue', () => { expect(alert.exists()).toBe(true); expect(alert.text()).toContain('10 мин'); }); + + it('A5: при не-валидационной ошибке (500/network) показывает generic fallback', async () => { + // forgotPassword отклоняется обычной ошибкой; extractValidationErrors и + // extractRateLimitRetry замоканы → null (см. vi.mock в шапке файла). + vi.mocked(authApi.forgotPassword).mockRejectedValue(new Error('Network Error')); + + const wrapper = await mountForgot(); + await wrapper.find('input[type="email"]').setValue('user@example.ru'); + await wrapper.find('form').trigger('submit.prevent'); + await flushPromises(); + + const messages = wrapper.findAll('.v-messages__message').map((m) => m.text()); + expect(messages.join(' ')).toContain('Произошла ошибка. Попробуйте позже.'); + }); });