Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/test.yml-template
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Test

on:
pull_request:
branches: [ master ]

jobs:
build:

runs-on: ubuntu-latest

strategy:
matrix:
node-version: [20.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
- name: Upload HTML report(backstop data)
if: ${{ always() }}
uses: actions/upload-artifact@v2
with:
name: report
path: backstop_data
2 changes: 2 additions & 0 deletions dist/index.523d22e8.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/index.523d22e8.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Moyo header</title><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Roboto:wght@500&display=swap" rel="stylesheet"><link rel="stylesheet" href="index.523d22e8.css"></head><body class="roboto-500"> <header class="header"> <div class="header__inner"> <a href="#" class="logo"> <img src="logo.eddae0ff.png" alt="Moyo logo" class="logo__image"> </a> <nav class="nav"> <ul class="nav__list"> <li class="nav__item"> <a href="#" class="is-active nav__link"> Apple </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Samsung </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Smartphones </a> </li> <li class="nav__item"> <a href="#" class="nav__link" data-qa="hover"> Laptops &amp; computers </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Gadgets </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Tablets </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Photo </a> </li> <li class="nav__item"> <a href="#" class="nav__link"> Video </a> </li> </ul> </nav> </div> </header> </body></html>
Binary file added dist/logo.eddae0ff.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dist/report/bitmaps_reference/Nav_tag_1024px.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dist/report/bitmaps_reference/Nav_tag_1200px.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
197 changes: 197 additions & 0 deletions dist/report/bitmaps_test/20251124-235338/report.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
{
"testSuite": "BackstopJS",
"tests": [
{
"pair": {
"reference": "..\\bitmaps_reference\\Header_tag_1024px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Header_tag_1024px.png",
"selector": "header",
"fileName": "Header_tag_1024px.png",
"label": "Header tag",
"requireSameDimensions": false,
"misMatchThreshold": 1,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1024px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Header_tag_1200px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Header_tag_1200px.png",
"selector": "header",
"fileName": "Header_tag_1200px.png",
"label": "Header tag",
"requireSameDimensions": false,
"misMatchThreshold": 1,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1200px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Nav_tag_1024px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Nav_tag_1024px.png",
"selector": "nav",
"fileName": "Nav_tag_1024px.png",
"label": "Nav tag",
"requireSameDimensions": false,
"misMatchThreshold": 1,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1024px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Nav_tag_1200px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Nav_tag_1200px.png",
"selector": "nav",
"fileName": "Nav_tag_1200px.png",
"label": "Nav tag",
"requireSameDimensions": false,
"misMatchThreshold": 1,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1200px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Link_with_data-qa_hover_1024px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Link_with_data-qa_hover_1024px.png",
"selector": "[data-qa=\"hover\"]",
"fileName": "Link_with_data-qa_hover_1024px.png",
"label": "Link with data-qa_hover",
"requireSameDimensions": false,
"misMatchThreshold": 2,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1024px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Link_with_data-qa_hover_1200px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Link_with_data-qa_hover_1200px.png",
"selector": "[data-qa=\"hover\"]",
"fileName": "Link_with_data-qa_hover_1200px.png",
"label": "Link with data-qa_hover",
"requireSameDimensions": false,
"misMatchThreshold": 2,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1200px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Link_with_class_is-active_1024px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Link_with_class_is-active_1024px.png",
"selector": "a.is-active",
"fileName": "Link_with_class_is-active_1024px.png",
"label": "Link with class_is-active",
"requireSameDimensions": false,
"misMatchThreshold": 2,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1024px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
},
{
"pair": {
"reference": "..\\bitmaps_reference\\Link_with_class_is-active_1200px.png",
"test": "..\\bitmaps_test\\20251124-235338\\Link_with_class_is-active_1200px.png",
"selector": "a.is-active",
"fileName": "Link_with_class_is-active_1200px.png",
"label": "Link with class_is-active",
"requireSameDimensions": false,
"misMatchThreshold": 2,
"url": "http://localhost:3001/index.html",
"referenceUrl": "https://mate-academy.github.io/layout_solutions/moyo-header/",
"expect": 0,
"viewportLabel": "1200px",
"diff": {
"isSameDimensions": true,
"dimensionDifference": {
"width": 0,
"height": 0
},
"misMatchPercentage": "0.00"
}
},
"status": "pass"
}
]
}
14 changes: 14 additions & 0 deletions dist/report/engine_scripts/cookies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[
{
"domain": ".www.yourdomain.com",
"path": "/",
"name": "yourCookieName",
"value": "yourCookieValue",
"expirationDate": 1798790400,
"hostOnly": false,
"httpOnly": false,
"secure": false,
"session": false,
"sameSite": "no_restriction"
}
]
Binary file added dist/report/engine_scripts/imageStub.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions dist/report/engine_scripts/puppet/clickAndHoverHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
module.exports = async (page, scenario) => {
var hoverSelector = scenario.hoverSelectors || scenario.hoverSelector;
var clickSelector = scenario.clickSelectors || scenario.clickSelector;
var keyPressSelector = scenario.keyPressSelectors || scenario.keyPressSelector;
var scrollToSelector = scenario.scrollToSelector;
var postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int]

if (keyPressSelector) {
for (const keyPressSelectorItem of [].concat(keyPressSelector)) {
await page.waitForSelector(keyPressSelectorItem.selector);
await page.type(keyPressSelectorItem.selector, keyPressSelectorItem.keyPress);
}
}

if (hoverSelector) {
for (const hoverSelectorIndex of [].concat(hoverSelector)) {
await page.waitForSelector(hoverSelectorIndex);
await page.hover(hoverSelectorIndex);
}
}

if (clickSelector) {
for (const clickSelectorIndex of [].concat(clickSelector)) {
await page.waitForSelector(clickSelectorIndex);
await page.click(clickSelectorIndex);
}
}

if (postInteractionWait) {
await new Promise(resolve => setTimeout(resolve, postInteractionWait));
}

if (scrollToSelector) {
await page.waitForSelector(scrollToSelector);
await page.evaluate(scrollToSelector => {
document.querySelector(scrollToSelector).scrollIntoView();
}, scrollToSelector);
}
};
29 changes: 29 additions & 0 deletions dist/report/engine_scripts/puppet/loadCookies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
var fs = require('fs');

module.exports = async (page, scenario) => {
var cookies = [];
var cookiePath = scenario.cookiePath;

// READ COOKIES FROM FILE IF EXISTS
if (fs.existsSync(cookiePath)) {
cookies = JSON.parse(fs.readFileSync(cookiePath));
}

// MUNGE COOKIE DOMAIN
cookies = cookies.map(cookie => {
cookie.url = 'https://' + cookie.domain;
delete cookie.domain;
return cookie;
});

// SET COOKIES
const setCookies = async () => {
return Promise.all(
cookies.map(async (cookie) => {
await page.setCookie(cookie);
})
);
};
await setCookies();
console.log('Cookie state restored with:', JSON.stringify(cookies, null, 2));
};
3 changes: 3 additions & 0 deletions dist/report/engine_scripts/puppet/onBefore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = async (page, scenario, vp) => {
await require('./loadCookies')(page, scenario);
};
6 changes: 6 additions & 0 deletions dist/report/engine_scripts/puppet/onReady.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = async (page, scenario, vp) => {
console.log('SCENARIO > ' + scenario.label);
await require('./clickAndHoverHelper')(page, scenario);

// add more ready handlers here...
};
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading