import path from 'path'
import systemTests from '../lib/system-tests'
import Fixtures, { projectPath } from '../lib/fixtures'
import { promises as fs } from 'fs'

const snapshotFile = (project, file, folder = 'integration') => {
  const filePath = path.join(projectPath(project), 'cypress', folder, file)

  return fs.readFile(filePath).then((content) => {
    systemTests.snapshot(`${project} ${file}`, content.toString())
  })
}

// NOTE: all output snapshots will display the root spec suite twice
// this is intentional and indicates how the studio "restarts" the runner

// TODO: fix these after system tests PR
// @see https://github.com/cypress-io/cypress/issues/18498
describe.skip('e2e studio', function () {
  systemTests.setup()

  systemTests.it('extends test', {
    project: 'studio',
    spec: 'extend.spec.js',
    snapshot: true,
    browser: 'electron',
    onRun (exec) {
      return exec().then(() => snapshotFile('studio', 'extend.spec.js'))
    },
  })

  // includes "New Test" in snapshot
  // this is the blank new test that's being created
  systemTests.it('creates new test', {
    project: 'studio',
    spec: 'new.spec.js',
    browser: 'electron',
    snapshot: true,
    onRun (exec) {
      return exec().then(() => snapshotFile('studio', 'new.spec.js'))
    },
  })

  systemTests.it('can write to imported files', {
    project: 'studio',
    spec: 'external.spec.js',
    snapshot: true,
    browser: 'electron',
    onRun (exec) {
      return exec()
      // we snapshot the original spec to make sure it does NOT get written there
      .then(() => snapshotFile('studio', 'external.spec.js'))
      .then(() => snapshotFile('studio', 'external.js', 'support'))
    },
  })

  systemTests.it('extends test without source maps', {
    project: 'studio-no-source-maps',
    spec: 'extend.spec.js',
    snapshot: true,
    browser: 'electron',
    onRun (exec) {
      Fixtures.scaffoldProject('studio')

      return exec().then(() => snapshotFile('studio-no-source-maps', 'extend.spec.js'))
    },
  })

  systemTests.it('creates new test without source maps', {
    project: 'studio-no-source-maps',
    spec: 'new.spec.js',
    browser: 'electron',
    snapshot: true,
    onRun (exec) {
      Fixtures.scaffoldProject('studio')

      return exec().then(() => snapshotFile('studio-no-source-maps', 'new.spec.js'))
    },
  })
})
