mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
89 lines
2.1 KiB
2 years ago
|
import { once } from 'node:events'
|
||
|
import * as cp from 'node:child_process'
|
||
|
import fs from 'node:fs/promises'
|
||
|
|
||
|
export const tests = []
|
||
|
const fetch = _fetch // to redefine the real fetch
|
||
|
|
||
|
const port = 5000
|
||
|
|
||
|
// tell-me-who_test setup -- see how to have same files in testing directories
|
||
|
// TO BE IMPLEMENTED
|
||
|
|
||
|
const sendRequest = async (path, options) => {
|
||
|
const response = await fetch(`http://localhost:${port}${path}`, options)
|
||
|
const { status, statusText, ok } = response
|
||
|
const headers = Object.fromEntries(response.headers)
|
||
|
let body = ''
|
||
|
try {
|
||
|
body = await response.json()
|
||
|
} catch (err) {
|
||
|
body = err
|
||
|
}
|
||
|
return { status, body, headers }
|
||
|
}
|
||
|
|
||
|
tests.push(async ({ path, ctx }) => {
|
||
|
ctx.server = cp.spawn('node', [`${path}`])
|
||
|
const message = await Promise.race([
|
||
|
once(ctx.server.stdout, 'data'),
|
||
|
Promise.race([
|
||
|
once(ctx.server.stderr, 'data').then(String).then(Error),
|
||
|
once(ctx.server, 'error'),
|
||
|
]).then(x => Promise.reject(x)),
|
||
|
])
|
||
|
return message[0].toString().includes(port)
|
||
|
})
|
||
|
|
||
|
tests.push(async ({ eq }) => {
|
||
|
const { status, body, headers } = await sendRequest('/Zoe_Sierra', {
|
||
|
method: 'GET',
|
||
|
})
|
||
|
let cont = await fs.readFile('./guests/Zoe_Sierra.json', {
|
||
|
encoding: 'utf-8',
|
||
|
})
|
||
|
return eq(
|
||
|
{
|
||
|
status: status,
|
||
|
body: body,
|
||
|
contentType: headers['content-type'],
|
||
|
},
|
||
|
{
|
||
|
status: 200,
|
||
|
body: JSON.parse(cont),
|
||
|
contentType: 'application/json',
|
||
|
},
|
||
|
)
|
||
|
})
|
||
|
|
||
|
tests.push(async ({ eq }) => {
|
||
|
const { status, body, headers } = await sendRequest('/Zoe_Sierra1', {
|
||
|
method: 'GET',
|
||
|
})
|
||
|
console.log(body.error)
|
||
|
return eq(
|
||
|
{
|
||
|
status: status,
|
||
|
body: body.error.trim(),
|
||
|
contentType: headers['content-type'],
|
||
|
},
|
||
|
{
|
||
|
status: 404,
|
||
|
body: "guest not found",
|
||
|
contentType: 'application/json',
|
||
|
},
|
||
|
)
|
||
|
})
|
||
|
|
||
|
// this test must always run to shutdown server
|
||
|
/* currently breaking if one test fails - it might not be a problem
|
||
|
since the tests are run in a separate Docker image...
|
||
|
*/
|
||
|
tests.push(({ ctx }) => {
|
||
|
const { server } = ctx
|
||
|
server.kill('SIGQUIT')
|
||
|
return true
|
||
|
})
|
||
|
|
||
|
Object.freeze(tests)
|