import { describe, expect, it } from 'vitest'
import { isInvoiceError, toInvoiceError } from './errors.js'

describe('InvoiceError', () => {
  it('preserves a valid issued discriminator', () => {
    const error = { code: 'PROVIDER_UNAVAILABLE', issued: 'unknown', message: 'timed out' } as const

    expect(isInvoiceError(error)).toBe(true)
    expect(toInvoiceError(error)).toBe(error)
  })

  it('leaves issued undefined when the source has no discriminator', () => {
    expect(toInvoiceError(new Error('failed'))).toEqual({
      code: 'PROVIDER_REJECTED',
      message: 'failed',
    })
  })

  it('rejects malformed issued discriminators structurally', () => {
    expect(isInvoiceError({ code: 'PROVIDER_REJECTED', issued: 'yes', message: 'failed' })).toBe(false)
  })
})
