86 lines
1.9 KiB
TypeScript
86 lines
1.9 KiB
TypeScript
/* eslint-disable no-console, unicorn/filename-case, @eslint-community/eslint-comments/disable-enable-pair */
|
|
|
|
import assert from 'node:assert'
|
|
import { exec } from 'node:child_process'
|
|
import http from 'node:http'
|
|
import { after, before, describe, it } from 'node:test'
|
|
|
|
import { hoursToMillis } from '@cityssm/to-millis'
|
|
|
|
import { app } from '../app.js'
|
|
|
|
import { portNumber } from './_globals.js'
|
|
|
|
function runCypress(browser: 'chrome' | 'firefox', done: () => void): void {
|
|
let cypressCommand = `cypress run --config-file cypress.config.js --browser ${browser}`
|
|
|
|
if ((process.env.CYPRESS_RECORD_KEY ?? '') !== '') {
|
|
cypressCommand += ` --tag "${browser},${process.version}" --record`
|
|
}
|
|
|
|
// eslint-disable-next-line security/detect-child-process, sonarjs/os-command
|
|
const childProcess = exec(cypressCommand)
|
|
|
|
childProcess.stdout?.on('data', (data) => {
|
|
console.log(data)
|
|
})
|
|
|
|
childProcess.stderr?.on('data', (data) => {
|
|
console.error(data)
|
|
})
|
|
|
|
childProcess.on('exit', (code) => {
|
|
assert.ok(code === 0)
|
|
done()
|
|
})
|
|
}
|
|
|
|
await describe('sunrise-cms', async () => {
|
|
const httpServer = http.createServer(app)
|
|
|
|
let serverStarted = false
|
|
|
|
before((context, done) => {
|
|
httpServer.listen(portNumber)
|
|
|
|
httpServer.on('listening', () => {
|
|
serverStarted = true
|
|
done()
|
|
})
|
|
})
|
|
|
|
after(() => {
|
|
try {
|
|
httpServer.close()
|
|
} catch {
|
|
// ignore
|
|
}
|
|
})
|
|
|
|
await it(`Ensure server starts on port ${portNumber.toString()}`, () => {
|
|
assert.ok(serverStarted)
|
|
})
|
|
|
|
await describe('Cypress tests', async () => {
|
|
await it(
|
|
'Should run Cypress tests in Chrome',
|
|
{
|
|
timeout: hoursToMillis(1)
|
|
},
|
|
(context, done) => {
|
|
runCypress('chrome', done)
|
|
}
|
|
)
|
|
|
|
await it(
|
|
'Should run Cypress tests in Firefox',
|
|
{
|
|
timeout: hoursToMillis(1)
|
|
},
|
|
(context, done) => {
|
|
runCypress('firefox', done)
|
|
}
|
|
)
|
|
})
|
|
})
|