import tap from 'tap'
import fs from 'fs-extra'
import path from 'path'

import { createConfig } from '../lib/config'
import { build } from '../lib/build'
import { Env } from '../lib/constants'

tap.test('build - static files', async (t) => {
  t.testdir({
    'static.js': `
      export const getStaticPaths = () => ([ 'foo' ])
      export const handler = () => 'page'
    `,
  })

  const filepath = path.join(t.testdirName, 'static.js')
  const config = await createConfig({
    cli: { files: filepath, output: t.testdirName },
  })

  await build(config)

  const contents = fs.readFileSync(path.join(config.staticOutputDir, 'foo/index.html'), 'utf8')

  t.equal(contents, 'page')
})

tap.test('build - dynamic files', async (t) => {
  t.testdir({
    'dynamic.js': `
      export const route = '*'
      export const handler = () => 'page'
    `,
  })

  const config = await createConfig({
    cli: {
      files: path.join(t.testdirName, 'dynamic.js'),
      output: t.testdirName,
    },
  })

  let called = false

  const { build } = t.mock('../lib/build', {
    esbuild: {
      build() {
        called = true
      },
    },
  })

  await build(config)

  t.ok(called)
})
