Browse Source

update tell-me-who tests

content-update
Louise Foussat 3 years ago committed by Clément
parent
commit
28a12d6af5
  1. 163
      js/tests/tell-me-who_test.mjs

163
js/tests/tell-me-who_test.mjs

@ -10,70 +10,18 @@ const writeFile = fs.writeFile
const exec = promisify(cp.exec)
export const tests = []
const name = 'tell-me-who'
// maybe get the sames from an api? like https://parser.name/
const guests = [
'Shyam Langley',
'Austin Harwood',
'Reem Morgan',
'Neal Chamberlain',
'Ryan Walters',
'Ocean Battle',
'Ubaid Ballard',
'Victoria Chan',
'Dominika Mullen',
'Heath Denton',
'Lilith Hamilton',
'Aisling Bailey',
'Maizie Love',
'Nathanial Franco',
'Charmaine Bernard',
'Sohail Downes',
'Rabia Gomez',
'Brendan Brennan',
'Shannen Atherton',
'Esa Villarreal',
'Kayla Wynn',
'Gladys Hardy',
'Laaibah Rogers',
'Zishan Randolph',
'Connor Connolly',
'Arabella Wooten',
'Edna Floyd',
'Roksana Montoya',
'Macauley Ireland',
'Kennedy Cummings',
'Emelia Calhoun',
'Jimmy Hickman',
'Leela Solomon',
'Frederick David',
'Eryk Winters',
'Olli Obrien',
'Jagoda Avalos',
'Bethanie Emery',
'Kenya Medina',
'Ava-Mai Estes',
'Robyn Jimenez',
'Carly Alexander',
'Jed Newman',
'Marianna Sullivan',
'Alicja Scott',
'Isaac Guerrero',
'Dion Huff',
'Milly Quintero',
'Kwabena Cairns',
'Rukhsar Conley',
'Glyn Townsend',
'Colby Holmes',
'Zeynep East',
'Miriam Higgins',
'Kaelan Clegg',
'Sharna English',
'Uma Ortega',
'Crystal Bird',
'Christopher Haas',
'Olivier Galvan',
'Esha Herring',
'Montana Mooney',
'Amelia-Rose Trejo',
'Micah Whittle',
@ -83,11 +31,10 @@ const guests = [
'Tasnia Hughes',
'Trixie Pennington',
'Ava Meyer',
'Konrad Weaver',
'Gabriela Tucker',
'Kiri Wilcox',
]
const shuffle = arr => {
const shuffle = (arr) => {
let i = arr.length
let j, tmp
while (--i > 0) {
@ -98,6 +45,10 @@ const shuffle = arr => {
}
return arr
}
const ranStr = () =>
Math.random()
.toString(36)
.substring(7)
const getRandomList = (names) =>
shuffle(names).slice(0, Math.floor(Math.random() * (names.length - 10) + 10))
const getExpected = (list) =>
@ -109,71 +60,81 @@ const getExpected = (list) =>
.join(' '),
)
.sort()
.map((g, i) => `${i +1}. ${g}`)
.map((g, i) => `${i + 1}. ${g}`)
.join('\n')
export const setup = async () => {
const dir = tmpdir()
export const setup = async ({ path }) => {
const dir = `${tmpdir()}/tell-me-who`
// check if already exists and rm?
await mkdir(`${dir}/${name}`)
await mkdir(dir)
const randomList = getRandomList(guests)
const expected = getExpected(randomList)
console.log({randomList, expected})
await Promise.all(
randomList.map(
async (n) =>
await writeFile(
`${dir}/${name}/${n.replace(' ', '_')}.json`,
'',
'utf8',
),
),
)
return { tmpPath: dir, expected }
}
const printGuestList = async ({ arg, ctx, path, eq }) => {
const scriptPath = join(resolve(), path)
const { stdout } = await exec(`node ${scriptPath} ${arg}`, {
cwd: arg ? `${ctx.tmpPath}` : `${ctx.tmpPath}/${name}`,
const createFilesIn = async ({ fileNames, folderPath }) =>
await Promise.all(
fileNames.map(
async (fileName) => await writeFile(`${folderPath}/${fileName}`, ''),
),
)
await createFilesIn({
fileNames: randomList.map((n) => `${n.replace(' ', '_')}.json`),
folderPath: dir,
})
console.log({stdout})
// await rmdir(`${ctx.tmpPath}/${name}`, { recursive: true })
return eq(stdout.trim(), ctx.expected)
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, expected, run, createFilesIn }
}
tests.push(async ({ path, eq, ctx }) => {
// will execute the script with "tell-me-who" as an argument
// `tell-me-who` folder has random files names
return printGuestList({
path,
eq,
ctx,
arg: 'tell-me-who',
})
const fileNames = [
'Ubaid_Ballard.json',
'Victoria_Chan.json',
'Dominika_Mullen.json',
'Heath_Denton.json',
'Lilith_Hamilton.json',
]
const folderName = `tell-me-who-${ranStr()}`
const folderPath = join(ctx.tmpPath, `../${folderName}`)
await mkdir(folderPath)
await ctx.createFilesIn({ folderPath, fileNames })
const { stdout } = await ctx.run(`../${folderName}`)
return eq(
[
`1. Ballard Ubaid`,
`2. Chan Victoria`,
`3. Denton Heath`,
`4. Hamilton Lilith`,
`5. Mullen Dominika`,
],
stdout.split('\n'),
)
})
tests.push(async ({ path, eq, ctx }) => {
// will execute the script in a folder named `tell-me-who`
// '../tell-me-who' in the argument passed
// `tell-me-who` folder has a random file number
const { stdout } = await ctx.run('../tell-me-who')
return eq(stdout, ctx.expected)
})
tests.push(async ({ path, eq, ctx }) => {
// will execute the script without argument
// in the `tell-me-who` folder
return printGuestList({
path,
eq,
ctx,
arg: '',
})
const { stdout } = await ctx.run()
return eq(stdout, ctx.expected)
})
tests.push(async ({ path, eq, ctx }) => {
// will execute the script with `tell-me-who` folder's absolute path as argument
return printGuestList({
path,
eq,
ctx,
arg: `${ctx.tmpPath}/tell-me-who`,
})
const { stdout } = await ctx.run(ctx.tmpPath)
return eq(stdout, ctx.expected)
})
Object.freeze(tests)

Loading…
Cancel
Save