import path from 'node:path'
import { fileURLToPath } from 'node:url'

import { describe, expect, test } from 'vitest'

import { generateTSFromOpenAPI } from './generate-ts-from-openapi'

const fixtures = [
  'firecrawl.json',
  // 'github.json', // TODO: not working 100% yet
  'notion.json',
  'open-meteo.yaml',
  'pet-store.json',
  'petstore-expanded.json',
  'security.json',
  // 'stripe.json', // TODO: not working 100% yet
  'tic-tac-toe.json'
]

const dirname = path.join(fileURLToPath(import.meta.url), '..', '..')

describe('openapi-to-ts', () => {
  for (const fixture of fixtures) {
    test(
      fixture,
      {
        timeout: 60_000
      },
      async () => {
        const fixturePath = path.join(dirname, 'fixtures', 'openapi', fixture)
        const outputDir = path.join(dirname, 'fixtures', 'generated')

        const result = await generateTSFromOpenAPI({
          openapiFilePath: fixturePath,
          outputDir
        })
        expect(result).toMatchSnapshot()
      }
    )
  }
})
