// @vitest-environment jsdom
import { cleanup, fireEvent, render, screen } from '@testing-library/react';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { en } from '../i18n/en';
import { ErrorView } from './ErrorView';
import { ProcessingView } from './ProcessingView';
afterEach( cleanup );
describe( 'ErrorView', () => {
it( 'shows recovery guidance and forwards retry and close', () => {
const retry = vi.fn();
const close = vi.fn();
render( );
expect( screen.getByText( 'Network failed' ) ).toBeTruthy();
expect( screen.getAllByRole( 'listitem' ) ).toHaveLength( 3 );
fireEvent.click( screen.getByRole( 'button', { name: en.error.tryAgain } ) );
fireEvent.click( screen.getByRole( 'button', { name: en.error.close } ) );
expect( retry ).toHaveBeenCalledOnce();
expect( close ).toHaveBeenCalledOnce();
} );
} );
describe( 'ProcessingView', () => {
it.each( [
{ progress: -10, visible: '0%' },
{ progress: 45, visible: '45%' },
{ progress: 80, visible: '80%' },
{ progress: 120, visible: '100%' },
] )( 'clamps $progress to $visible and reflects workflow stages', ( { progress, visible } ) => {
const { container } = render(
);
expect( screen.getByText( visible ) ).toBeTruthy();
expect( screen.getByRole( 'img', { name: en.processing.title } ) ).toBeTruthy();
expect( container.querySelector( '.aisthetix-progress-fill' )?.getAttribute( 'style' ) ).toContain( visible );
} );
it( 'does not render an empty garment preview', () => {
render( );
expect( screen.queryByRole( 'img' ) ).toBeNull();
} );
} );