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