mirror of https://github.com/01-edu/public.git
1 changed files with 174 additions and 0 deletions
@ -0,0 +1,174 @@
|
||||
import { places } from './subjects/where-do-we-go/data.js' |
||||
|
||||
export const tests = [] |
||||
|
||||
const random = (min, max) => { |
||||
if (!max) { |
||||
max = min |
||||
min = 0 |
||||
} |
||||
min = Math.ceil(min) |
||||
max = Math.floor(max) |
||||
return Math.floor(Math.random() * (max - min + 1)) + min |
||||
} |
||||
|
||||
const getDegree = coordinates => { |
||||
const north = coordinates.includes('N') |
||||
const degree = coordinates.split("'")[0].replace('°', '.') |
||||
return north ? degree : -degree |
||||
} |
||||
|
||||
export const setup = async ({ page }) => { |
||||
return { |
||||
getDirection: async () => |
||||
await page.$eval('.direction', direction => direction.textContent), |
||||
} |
||||
} |
||||
|
||||
const sortedPlaces = places.sort( |
||||
(a, b) => getDegree(b.coordinates) - getDegree(a.coordinates), |
||||
) |
||||
|
||||
const dataNames = sortedPlaces.map(({ name }) => |
||||
name |
||||
.split(',')[0] |
||||
.toLowerCase() |
||||
.split(' ') |
||||
.join('-'), |
||||
) |
||||
|
||||
tests.push(async ({ page, eq }) => { |
||||
const { width, height } = await page.evaluate(() => ({ |
||||
width: document.documentElement.clientWidth, |
||||
height: document.documentElement.clientHeight, |
||||
})) |
||||
|
||||
const sections = await page.$$eval('section', sections => |
||||
sections.map(section => { |
||||
return [ |
||||
section.getBoundingClientRect().width, |
||||
section.getBoundingClientRect().height, |
||||
] |
||||
}), |
||||
) |
||||
|
||||
console.log(`Must contain ${places.length} places`) |
||||
// check that the correct amount of sections has been generated
|
||||
eq(sections.length, places.length) |
||||
// check that all the sections are fullscreen-size
|
||||
eq([...new Set(...sections)], [width, height]) |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq }) => { |
||||
// check that the sections have been generated with the correponding images as background,
|
||||
// and sorted in the right order (from the Northest to the Southest)
|
||||
const imageNames = await page.$$eval('section', sections => |
||||
sections.map(section => { |
||||
const test = section.style.background.split('.jpg')[0].split('/') |
||||
return test[test.length - 1] |
||||
}), |
||||
) |
||||
|
||||
console.log(`Must be sorted from North to South`) |
||||
console.log(`Must have the right images in background`) |
||||
eq(imageNames, dataNames) |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq }) => { |
||||
// check that the location indicator is updating according to the image displayed
|
||||
let step = 1 |
||||
while (step < 6) { |
||||
await page.evaluate(() => { |
||||
window.scrollBy(0, window.innerHeight + 200) |
||||
}) |
||||
|
||||
await page.waitFor(150) |
||||
|
||||
const location = await page.$eval('.location', location => [ |
||||
...location.textContent.split('\n'), |
||||
location.style.color, |
||||
]) |
||||
|
||||
const currentLocationIndex = await page.evaluate(() => |
||||
Math.round(window.scrollY / window.innerHeight), |
||||
) |
||||
const currentLocation = sortedPlaces[currentLocationIndex] |
||||
const { name, coordinates, color } = currentLocation |
||||
const expectedLocation = [name, coordinates, color] |
||||
|
||||
// check that the location indicator and the displayed location contents are matching
|
||||
console.log(`Scroll #${step}: displaying ${location[0]}`) |
||||
eq(location, expectedLocation) |
||||
step++ |
||||
} |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq, getDirection }) => { |
||||
// check that the compass is pointing 'S' when scrolling down
|
||||
await page.evaluate(() => { |
||||
window.scrollBy(0, window.innerHeight) |
||||
}) |
||||
|
||||
await page.waitFor(100) |
||||
|
||||
const direction = (await getDirection()).includes('S') |
||||
? 'S' |
||||
: await getDirection() |
||||
|
||||
console.log('Scroll down: pointing', direction) |
||||
eq(direction, 'S') |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq, getDirection }) => { |
||||
// check that the compass is pointing 'N' when scrolling up
|
||||
await page.evaluate(() => { |
||||
window.scrollBy(0, -100) |
||||
}) |
||||
|
||||
await page.waitFor(100) |
||||
|
||||
const direction = (await getDirection()).includes('N') |
||||
? 'N' |
||||
: await getDirection() |
||||
|
||||
console.log('Scroll up: pointing', direction) |
||||
eq(direction, 'N') |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq }) => { |
||||
// check that the location target attribute is set to '_blank' to open a new tab
|
||||
const locationTarget = await page.$eval('.location', ({ target }) => target) |
||||
console.log( |
||||
`Location <a> tag target attribute ${ |
||||
locationTarget === '_blank' ? '' : 'not ' |
||||
}set to open a new tab`,
|
||||
) |
||||
eq(locationTarget, '_blank') |
||||
}) |
||||
|
||||
tests.push(async ({ page, eq }) => { |
||||
// check that the location href is valid
|
||||
const location = await page.$eval('.location', ({ href, textContent }) => ({ |
||||
href, |
||||
textContent, |
||||
})) |
||||
const isValidUrl = location.href.includes('google.com/maps') |
||||
const coords = location.textContent.split('\n')[1] |
||||
const convertedUrl = location.href |
||||
.split('%C2%B0') |
||||
.join('°') |
||||
.split('%22') |
||||
.join('"') |
||||
.split('%20') |
||||
.join(' ') |
||||
const isValidCoordinates = convertedUrl.includes(coords) |
||||
|
||||
console.log('URL', location.href, isValidUrl ? 'valid' : 'invalid') |
||||
eq(isValidUrl, true) |
||||
console.log( |
||||
`Matching coordinates ${coords} ${ |
||||
isValidCoordinates ? '' : 'not ' |
||||
}found in URL`,
|
||||
) |
||||
eq(isValidCoordinates, true) |
||||
}) |
Loading…
Reference in new issue