oxios 1.10.1

Oxios Agent OS — Agent Operating System powered by oxi-sdk
import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { describe, expect, it, vi } from 'vitest'
import { ErrorState } from '@/components/shared/error-state'

// Mock i18next
vi.mock('react-i18next', () => ({
  useTranslation: () => ({
    t: (key: string) => key,
    i18n: { language: 'en' },
  }),
}))

describe('ErrorState', () => {
  it('renders default title from i18n when none provided', () => {
    render(<ErrorState />)

    expect(screen.getByText('common.errorFailedToLoad')).toBeInTheDocument()
  })

  it('renders default message from i18n when none provided', () => {
    render(<ErrorState />)

    expect(screen.getByText('common.errorSomethingWrong')).toBeInTheDocument()
  })

  it('renders custom title', () => {
    render(<ErrorState title="Load failed" />)

    expect(screen.getByText('Load failed')).toBeInTheDocument()
  })

  it('renders custom message', () => {
    render(<ErrorState message="Network error occurred" />)

    expect(screen.getByText('Network error occurred')).toBeInTheDocument()
  })

  it('renders retry button when onRetry is provided', () => {
    render(<ErrorState onRetry={vi.fn()} />)

    const retryBtn = screen.getByRole('button', { name: 'common.retry' })
    expect(retryBtn).toBeInTheDocument()
  })

  it('does not render retry button when onRetry is not provided', () => {
    render(<ErrorState />)

    expect(screen.queryByRole('button')).not.toBeInTheDocument()
  })

  it('calls onRetry when retry button is clicked', async () => {
    const onRetry = vi.fn()
    render(<ErrorState onRetry={onRetry} />)

    const retryBtn = screen.getByRole('button', { name: 'common.retry' })
    await userEvent.click(retryBtn)

    expect(onRetry).toHaveBeenCalledOnce()
  })

  it('has role="alert"', () => {
    render(<ErrorState />)

    expect(screen.getByRole('alert')).toBeInTheDocument()
  })

  it('applies custom className', () => {
    render(<ErrorState className="my-error-class" />)

    const alert = screen.getByRole('alert')
    expect(alert.className).toContain('my-error-class')
  })
})