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.

59 lines
1.4 KiB

import * as cp from 'child_process'
4 years ago
import { mkdir, writeFile } from 'fs/promises'
import { join, isAbsolute } from 'path'
import { tmpdir } from 'os'
import { promisify } from 'util'
const exec = promisify(cp.exec)
export const tests = []
export const setup = async ({ path }) => {
const dir = `${tmpdir()}/tell-me-who`
await mkdir(dir)
const createFilesIn = async ({ fileNames, dirPath }) =>
await Promise.all(
fileNames.map(
async (fileName) => await writeFile(`${dirPath}/${fileName}`, ''),
),
)
const run = async (cmd) => {
const cmdPath = isAbsolute(cmd || '') ? cmd : join(dir, cmd || '')
const { stdout } = await exec(`node ${path} ${cmdPath}`)
return { stdout: stdout.trim() }
}
return { tmpPath: dir, run, createFilesIn }
}
tests.push(async ({ eq, ctx, randStr, upperFirst }) => {
const random = upperFirst(randStr())
const fileNames = [
'Ubaid_Ballard.json',
'Victoria_Chan.json',
'Dominika_Mullen.json',
'Heath_Denton.json',
`${random}_Hamilton.json`,
]
const dirName = `them-${randStr()}`
const dirPath = join(ctx.tmpPath, dirName)
await mkdir(dirPath)
await ctx.createFilesIn({ dirPath, fileNames })
const { stdout } = await ctx.run(dirName)
return eq(
[
`1. Ballard Ubaid`,
`2. Chan Victoria`,
`3. Denton Heath`,
`4. Hamilton ${random}`,
`5. Mullen Dominika`,
],
stdout.split('\n'),
)
})
Object.freeze(tests)