import { describe, expect, it } from 'vitest'
import {
  APIError,
  AuthenticationError,
  DifyError,
  FileUploadError,
  NetworkError,
  RateLimitError,
  TimeoutError,
  ValidationError,
} from './dify-error'

describe('Dify errors', () => {
  it('sets base error fields', () => {
    const err = new DifyError('base', {
      statusCode: 400,
      responseBody: { message: 'bad' },
      requestId: 'req',
      retryAfter: 1,
    })
    expect(err.name).toBe('DifyError')
    expect(err.statusCode).toBe(400)
    expect(err.responseBody).toEqual({ message: 'bad' })
    expect(err.requestId).toBe('req')
    expect(err.retryAfter).toBe(1)
  })

  it('creates specific error types', () => {
    expect(new APIError('api').name).toBe('APIError')
    expect(new AuthenticationError('auth').name).toBe('AuthenticationError')
    expect(new RateLimitError('rate').name).toBe('RateLimitError')
    expect(new ValidationError('val').name).toBe('ValidationError')
    expect(new NetworkError('net').name).toBe('NetworkError')
    expect(new TimeoutError('timeout').name).toBe('TimeoutError')
    expect(new FileUploadError('upload').name).toBe('FileUploadError')
  })
})
