import path from 'path'
import consola from 'consola'
import { Nuxt } from '../utils'

const NO_BUILD_MSG = 'No build files found. Use either `nuxt build` or `builder.build()` or start nuxt in development mode.'
const NO_MODERN_BUILD_MSG = 'No modern build files found. Use either `nuxt build --modern` or `modern` option to build modern files.'

describe('renderer', () => {
  afterEach(() => {
    consola.fatal.mockClear()
  })

  test('detect no-build (Universal)', async () => {
    const nuxt = new Nuxt({
      _start: true,
      mode: 'universal',
      dev: false,
      buildDir: '/path/to/404'
    })
    await nuxt.ready()
    await expect(nuxt.renderer.renderer.isReady).toBe(false)
    expect(consola.fatal).toHaveBeenCalledWith(new Error(NO_BUILD_MSG))
  })

  test('detect no-build (SPA)', async () => {
    const nuxt = new Nuxt({
      _start: true,
      mode: 'spa',
      dev: false,
      buildDir: '/path/to/404'
    })
    await nuxt.ready()
    await expect(nuxt.renderer.renderer.isReady).toBe(false)
    expect(consola.fatal).toHaveBeenCalledWith(new Error(NO_BUILD_MSG))
  })
  test('detect no-modern-build', async () => {
    const nuxt = new Nuxt({
      _start: true,
      mode: 'universal',
      modern: 'client',
      dev: false,
      buildDir: path.resolve(__dirname, '..', 'fixtures', 'empty', '.nuxt')
    })
    await nuxt.ready()
    await expect(nuxt.renderer.renderer.isReady).toBe(true)
    expect(consola.fatal).toHaveBeenCalledWith(new Error(NO_MODERN_BUILD_MSG))
  })
})