import { describe, it, expect } from 'vitest'; import { mount } from '@vue/test-utils'; import { createVuetify } from 'vuetify'; import RecoveryCodesView from '../../resources/js/views/auth/RecoveryCodesView.vue'; describe('RecoveryCodesView.vue', () => { const factory = () => mount(RecoveryCodesView, { global: { plugins: [createVuetify()] }, }); it('монтируется и содержит заголовок «Резервные коды»', () => { const wrapper = factory(); expect(wrapper.text()).toContain('Резервные коды'); }); it('рендерит ровно 8 кодов в формате XXXX-XXXX', () => { const wrapper = factory(); const codes = wrapper.findAll('.code-item'); expect(codes).toHaveLength(8); codes.forEach((c) => { expect(c.text()).toMatch(/^[A-Z0-9]{4}-[A-Z0-9]{4}$/); }); }); it('содержит warning о невозможности повторного просмотра', () => { const wrapper = factory(); expect(wrapper.text()).toContain('После закрытия страницы коды нельзя посмотреть снова'); }); it('содержит кнопки «Скачать .txt» и «Копировать»', () => { const wrapper = factory(); expect(wrapper.text()).toContain('Скачать'); expect(wrapper.text()).toContain('Копировать'); }); });