import { Hono } from 'hono'
import { z } from 'zod'
import { parseWithZod } from '@conform-to/zod'
import { conformValidator } from '../src'

describe('Validate common processing', () => {
  const app = new Hono()
  const schema = z.object({ name: z.string() })
  const route = app.post(
    '/author',
    conformValidator((formData) => parseWithZod(formData, { schema })),
    (c) => {
      const submission = c.req.valid('form')
      const value = submission.value
      return c.json({ success: true, message: `my name is ${value.name}` })
    }
  )

  describe('When the request body is empty', () => {
    it('Should return 400 response', async () => {
      const res = await route.request('/author', { method: 'POST' })
      expect(res.status).toBe(400)
    })
  })

  describe('When the request body is not FormData', () => {
    it('Should return 400 response', async () => {
      const res = await route.request('/author', {
        method: 'POST',
        body: JSON.stringify({ name: 'Space Cat!' }),
      })
      expect(res.status).toBe(400)
    })
  })
})
