forked from root/public
4 changed files with 133 additions and 5 deletions
@ -0,0 +1,124 @@
|
||||
export const tests = [] |
||||
|
||||
export const setup = async ({ page }) => { |
||||
const body = await page.$('body') |
||||
const hammer = await page.$('#hammer') |
||||
const dynamite = await page.$('#dynamite') |
||||
|
||||
return { |
||||
body, |
||||
hammer, |
||||
dynamite, |
||||
getDivsLength: async () => |
||||
await page.$$eval('div', (nodes) => nodes.length), |
||||
getBricksIds: async () => |
||||
await page.$$eval('div', (nodes) => |
||||
nodes.filter((node) => node.id.includes('brick')).map((n) => n.id), |
||||
), |
||||
getMiddleBricksIds: async () => |
||||
await page.$$eval('div', (nodes) => |
||||
nodes |
||||
.filter( |
||||
(node) => node.id.includes('brick') && node.dataset.foundation, |
||||
) |
||||
.map((n) => n.id), |
||||
), |
||||
getExpectedRepairedIds: async () => |
||||
await page.$eval('body', (body) => { |
||||
const getIdInt = (str) => str.replace('brick-', '') |
||||
return body.dataset.reparations |
||||
.split(',') |
||||
.sort((a, b) => getIdInt(b) - getIdInt(a)) |
||||
.map((id) => { |
||||
const isMiddleBrick = getIdInt(id) % 3 === 2 |
||||
const status = isMiddleBrick ? 'in progress' : 'repaired' |
||||
return `${id}_${status}` |
||||
}) |
||||
}), |
||||
getRepairedIds: async () => |
||||
await page.$$eval('div', (nodes) => { |
||||
const getIdInt = (str) => str.replace('brick-', '') |
||||
return nodes |
||||
.filter( |
||||
(node) => |
||||
node.dataset.repaired === 'true' || |
||||
node.dataset.repaired === 'in progress', |
||||
) |
||||
.sort((a, b) => getIdInt(b.id) - getIdInt(a.id)) |
||||
.map(({ id }) => { |
||||
const isMiddleBrick = getIdInt(id) % 3 === 2 |
||||
const status = isMiddleBrick ? 'in progress' : 'repaired' |
||||
return `${id}_${status}` |
||||
}) |
||||
}), |
||||
} |
||||
} |
||||
|
||||
const between = (expected, min, max) => expected >= min && expected <= max |
||||
|
||||
tests.push(async ({ page, eq, getDivsLength }) => { |
||||
// check that the brick divs are built at a regular interval of 100ms
|
||||
// the average of the divs built every 100ms must be close to 10
|
||||
let repeat = 0 |
||||
let buildSteps = [] |
||||
|
||||
while (repeat < 3) { |
||||
const divs = await getDivsLength() |
||||
buildSteps.push(divs) |
||||
await page.waitFor(1000) |
||||
repeat++ |
||||
} |
||||
|
||||
const diff1 = buildSteps[1] - buildSteps[0] |
||||
const diff2 = buildSteps[2] - buildSteps[1] |
||||
const average = Math.round((diff1 + diff2) / 2) |
||||
|
||||
if (average < 9) { |
||||
console.log('too slow --> average built bricks / sec:', average) |
||||
} |
||||
if (average > 11) { |
||||
console.log('too fast --> average built bricks / sec:', average) |
||||
} |
||||
|
||||
eq(between(average, 9, 11), between(10, 9, 11)) |
||||
}) |
||||
|
||||
const allBricksIds = [...Array(54).keys()].map((i) => `brick-${i + 1}`) |
||||
|
||||
tests.push(async ({ page, eq, getBricksIds }) => { |
||||
// check that all the bricks are here and have the correct id
|
||||
await page.waitFor(3000) |
||||
const bricksIds = await getBricksIds() |
||||
eq(bricksIds, allBricksIds) |
||||
}) |
||||
|
||||
tests.push(async ({ eq, getMiddleBricksIds }) => { |
||||
// check that the middle column bricks have the `foundation` attribute to `true`
|
||||
const expectedIds = allBricksIds.filter( |
||||
(b) => b.replace('brick-', '') % 3 === 2, |
||||
) |
||||
const middleBricksIds = await getMiddleBricksIds() |
||||
eq(middleBricksIds, expectedIds) |
||||
}) |
||||
|
||||
tests.push(async ({ eq, hammer, getExpectedRepairedIds, getRepairedIds }) => { |
||||
// check that the bricks to repair have the right repaired attribute
|
||||
await hammer.click() |
||||
eq(await getRepairedIds(), await getExpectedRepairedIds()) |
||||
}) |
||||
|
||||
tests.push(async ({ eq, hammer, getExpectedRepairedIds, getRepairedIds }) => { |
||||
// check that the bricks to repair have the right repaired attribute
|
||||
await hammer.click() |
||||
eq(await getRepairedIds(), await getExpectedRepairedIds()) |
||||
}) |
||||
|
||||
tests.push(async ({ eq, dynamite, getBricksIds }) => { |
||||
// check that the last brick is removed on each dynamite click
|
||||
for (const i of allBricksIds.keys()) { |
||||
await dynamite.click() |
||||
const { length } = allBricksIds |
||||
const expectedRemainingBricks = allBricksIds.slice(0, length - (i + 1)) |
||||
eq(await getBricksIds(), expectedRemainingBricks) |
||||
} |
||||
}) |
Loading…
Reference in new issue