import { render, screen } from '@testing-library/react' import { describe, it, expect, vi } from 'vitest' import type { ValidationResult } from '../../api/certificates' import CertificateValidationPreview from '../CertificateValidationPreview' vi.mock('react-i18next', () => ({ useTranslation: () => ({ t: (key: string) => key, i18n: { language: 'en', changeLanguage: vi.fn() }, }), })) function makeResult(overrides: Partial = {}): ValidationResult { return { valid: true, common_name: 'example.com', domains: ['example.com', 'www.example.com'], issuer_org: 'Test CA', expires_at: '2026-06-01T00:00:00Z', key_match: true, chain_valid: true, chain_depth: 2, warnings: [], errors: [], ...overrides, } } describe('CertificateValidationPreview', () => { it('renders valid certificate state', () => { render() expect(screen.getByText('certificates.validCertificate')).toBeTruthy() expect(screen.getByTestId('certificate-validation-preview')).toBeTruthy() }) it('renders invalid certificate state', () => { render( , ) expect(screen.getByText('certificates.invalidCertificate')).toBeTruthy() }) it('displays common name', () => { render() expect(screen.getByText('example.com')).toBeTruthy() }) it('displays domains joined by comma', () => { render() expect(screen.getByText('example.com, www.example.com')).toBeTruthy() }) it('displays dash when no domains provided', () => { render( , ) const dashes = screen.getAllByText('-') expect(dashes.length).toBeGreaterThan(0) }) it('displays issuer organization', () => { render() expect(screen.getByText('Test CA')).toBeTruthy() }) it('displays formatted expiration date', () => { render() const dateStr = new Date('2026-06-01T00:00:00Z').toLocaleDateString() expect(screen.getByText(dateStr)).toBeTruthy() }) it('shows Yes for key match', () => { render() expect(screen.getByText('Yes')).toBeTruthy() }) it('shows No key provided when no key match', () => { render( , ) expect(screen.getByText('No key provided')).toBeTruthy() }) it('shows chain depth when > 0', () => { render( , ) expect(screen.getByText('3')).toBeTruthy() }) it('does not show chain depth when 0', () => { render( , ) expect(screen.queryByText('certificates.chainDepth')).toBeFalsy() }) it('renders warnings when present', () => { render( , ) expect(screen.getByText('certificates.warnings')).toBeTruthy() expect(screen.getByText('Expiring soon')).toBeTruthy() expect(screen.getByText('Weak key')).toBeTruthy() }) it('does not render warnings section when empty', () => { render() expect(screen.queryByText('certificates.warnings')).toBeFalsy() }) it('renders errors when present', () => { render( , ) expect(screen.getByText('certificates.errors')).toBeTruthy() expect(screen.getByText('Certificate revoked')).toBeTruthy() }) it('does not render errors section when empty', () => { render() expect(screen.queryByText('certificates.errors')).toBeFalsy() }) it('has correct region role and aria-label', () => { render() const region = screen.getByRole('region') expect(region.getAttribute('aria-label')).toBe('certificates.validationPreview') }) })