|
|
|
export const tests = []
|
|
|
|
|
|
|
|
export const setup = async ({ page }) => ({
|
|
|
|
getBricksIds: async () =>
|
|
|
|
await page.$$eval('div', (nodes) =>
|
|
|
|
nodes.filter((node) => node.id.includes('brick')).map((n) => n.id),
|
|
|
|
),
|
|
|
|
})
|
|
|
|
|
|
|
|
const between = (expected, min, max) => expected >= min && expected <= max
|
|
|
|
|
|
|
|
tests.push(async ({ page, eq }) => {
|
|
|
|
// 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 page.$$eval('div', (nodes) => nodes.length)
|
|
|
|
console.log(`step ${repeat + 1}: ${divs} bricks`)
|
|
|
|
buildSteps.push(divs)
|
|
|
|
await page.waitForTimeout(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('average too low --> new bricks built / sec:', average)
|
|
|
|
} else if (average > 11) {
|
|
|
|
console.log('average too high --> new bricks built / sec:', average)
|
|
|
|
} else {
|
|
|
|
console.log('good average of new bricks built / sec')
|
|
|
|
}
|
|
|
|
|
|
|
|
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.waitForTimeout(3000)
|
|
|
|
const bricksIds = await getBricksIds()
|
|
|
|
eq(bricksIds, allBricksIds)
|
|
|
|
})
|
|
|
|
|
|
|
|
tests.push(async ({ page, eq }) => {
|
|
|
|
// 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 page.$$eval('div', (nodes) =>
|
|
|
|
nodes
|
|
|
|
.filter((node) => node.id.includes('brick') && node.dataset.foundation)
|
|
|
|
.map((n) => n.id),
|
|
|
|
)
|
|
|
|
eq(middleBricksIds, expectedIds)
|
|
|
|
})
|
|
|
|
|
|
|
|
tests.push(async ({ page, eq }) => {
|
|
|
|
// check that the bricks to repair have the right repaired attribute
|
|
|
|
const hammer = await page.$('#hammer')
|
|
|
|
await hammer.click()
|
|
|
|
|
|
|
|
const expectedRepairedIds = 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}`
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
const repairedIds = 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}`
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
eq(repairedIds, expectedRepairedIds)
|
|
|
|
})
|
|
|
|
|
|
|
|
tests.push(async ({ page, eq, getBricksIds }) => {
|
|
|
|
// check that the last brick is removed on each dynamite click
|
|
|
|
const dynamite = await page.$('#dynamite')
|
|
|
|
|
|
|
|
for (const i of allBricksIds.keys()) {
|
|
|
|
await dynamite.click()
|
|
|
|
const { length } = allBricksIds
|
|
|
|
const expectedRemainingBricks = allBricksIds.slice(0, length - (i + 1))
|
|
|
|
eq(await getBricksIds(), expectedRemainingBricks)
|
|
|
|
}
|
|
|
|
})
|