import { describe, expect, it } from 'vitest'
import {
  ReviewsProviderError, isReviewsProviderError,
  ReviewWireError, isReviewWireError,
  isNotPurchasedError, isReviewValidationError, isReviewNotFoundError,
} from './errors.js'

describe('errors', () => {
  it('ReviewsProviderError is name-guarded (no instanceof)', () => {
    const e = new ReviewsProviderError('useReviewList')
    expect(isReviewsProviderError(e)).toBe(true)
    expect(isReviewsProviderError({ name: 'ReviewsProviderError' })).toBe(true) // structural
    expect(isReviewsProviderError(new Error('x'))).toBe(false)
  })
  it('ReviewWireError is name-guarded', () => {
    expect(isReviewWireError(new ReviewWireError('bad'))).toBe(true)
    expect(isReviewWireError(null)).toBe(false)
  })
  it('re-exports core guards (structural, branch a wire-materialized error)', () => {
    expect(isNotPurchasedError({ name: 'NotPurchasedError', code: 'NOT_PURCHASED' })).toBe(true)
    expect(isReviewValidationError({ name: 'ReviewValidationError', code: 'REVIEW_VALIDATION' })).toBe(true)
    expect(isReviewNotFoundError({ name: 'ReviewNotFoundError', code: 'REVIEW_NOT_FOUND' })).toBe(true)
    expect(isNotPurchasedError({ name: 'SomethingElse' })).toBe(false)
  })
})