Skip to content

Commit

Permalink
feat(test): call index.js with custom callback
Browse files Browse the repository at this point in the history
  • Loading branch information
jalezi committed Apr 27, 2021
1 parent 72c3ea3 commit 51e056f
Showing 1 changed file with 75 additions and 125 deletions.
200 changes: 75 additions & 125 deletions test.js
Original file line number Diff line number Diff line change
@@ -1,137 +1,87 @@
const puppeteer = require('puppeteer');
const fs = require('fs');

const screenshots = require('./screenshots');
const navigateToCustomChart = require('./navigateToCustomChart');
const removeChild = require('./removeChild');

const run = async (
params = { type: '', screen: '', custom: '' },
headless = true
) => {
let browser, image;
const type = params.type.toUpperCase();
const chosenScreenshot = params.screen;
const customChartName = params.custom;

if (!Object.keys(screenshots.SCREENSHOTS).includes(type)) {
throw new Error(`Invalid type: ${type}`);
}

const {
viewport,
getSelector,
getUrl,
selectorToRemove,
} = screenshots.OPTIONS[type];
const possibleScreenshots = screenshots.SCREENSHOTS[type];

if (
!possibleScreenshots ||
!Object.keys(possibleScreenshots).includes(chosenScreenshot)
) {
throw new Error(`Invalid chosen screenshot: ${chosenScreenshot}`);
const path = require('path');
const { writeFileSync, existsSync, mkdirSync } = require('fs');
const { handler } = require('.');

const runTest = (
query = { type: '', screen: '', custom: '', hoverIndex: '' },
options = {
filePath: 'images/screenshot.png',
headless: true,
}

const screenshot = possibleScreenshots[chosenScreenshot];

const url = getUrl(screenshot.name);
const selector = getSelector(screenshot.name);

try {
const browser = await puppeteer.launch({
headless,
ignoreHTTPSErrors: true,
});

const page = await browser.newPage();
console.log('Made Page');

await page.setViewport(viewport);
console.log('Set viewport');

await page.goto(url, { waitUntil: 'networkidle0' });
console.log('Went to ', url);

if (selectorToRemove) {
const error = removeChild(page, selectorToRemove);
if (error instanceof Error) {
throw error;
}
console.log('Selector removed');
) => {
const { type, screen, custom, hoverIndex } = query;

const event = {
queryStringParameters: {
type: type.toUpperCase(),
screen,
custom,
hoverIndex,
},
headless: options.headless,
};

const ensureDirectoryExistence = filePath => {
var dirname = path.dirname(filePath);
if (existsSync(dirname)) {
return true;
}

const element = await page.$(selector);
if (!element) {
return { message: "Wrong selector or it's not visible" };
ensureDirectoryExistence(dirname);
mkdirSync(dirname);
};

const callback = (error, result) => {
if (error) {
console.log(error);
return error;
}

if (screenshot.include) {
const selectorsIncluded = screenshot.include.map(item => {
return item.name;
});
const selectorsToRemove = Object.keys(
screenshots.SCREENSHOTS.CARD
).filter(item => !selectorsIncluded.includes(item));

for (let cardName of selectorsToRemove) {
const _selectorToRemove = screenshot.getSelector(cardName);
const error = removeChild(page, _selectorToRemove);
if (error instanceof Error) {
throw error;
}
console.log(`Selector: ${_selectorToRemove} removed`);
}
await page.evaluate(sel => {
const el = document.querySelector(sel);
el.style['margin'] = '0 0 0 0';
el.style.padding = '16px 16px 16px 16px';
console.log(el.style);
}, selector);

const maxWidth = 4 * 325;
const newWidth = selectorsIncluded.length * 325;

await page.setViewport({
width: maxWidth > newWidth ? newWidth : maxWidth,
height: viewport.height,
});
const base64Data = result.body;
if (!base64Data) {
return new Error(result);
}

if (customChartName) {
const error = await navigateToCustomChart({
page,
element,
screenshot,
chosenScreenshot,
customChartName,
});
if (error instanceof Error) {
throw error;
}
ensureDirectoryExistence(filePath);
try {
writeFileSync(`${filePath}`, base64Data, 'base64');
} catch (error) {
console.log(error);
}
console.log(`File saved to: ${filePath}`);
};

image = await element.screenshot({ type: 'png' });
console.log('Made screenshot');
(async () => await handler(event, null, callback))();
};

const chartName = customChartName
? screenshot.name + '_' + customChartName
: screenshot.name;
// type = "card" || "chart" || "multicard"
// screen -> see screenshots.js CARD || CHART || MULTICARD properties
// custom -> see CHART[name].customChart

const filename = `${new Date()
.toISOString()
.slice(0, 10)}---${chartName}.png`;
console.log('Filename is ', filename);
const query = {
type: 'multicard',
screen: 'LAB',
custom: '',
hoverIndex: '',
};

fs.writeFileSync(`images/${filename}`, image);
} catch (error) {
throw error;
} finally {
browser && (await browser.close());
console.log('Browser closed');
}
return image;
const dateTime = new Date();
const time = dateTime.toISOString().slice(11, 19).split(':').join('_');
const date = dateTime.toISOString().slice(0, 10);
let filename = query.custom ? `${query.screen}_${query.custom}` : query.screen;
filename = query.hoverIndex ? `${filename}_${query.hoverIndex}` : filename;
filename += `_${time}.png`;

const defaultFolder = 'images';
const filePath = path.resolve(
defaultFolder,
date,
query.type.toLocaleLowerCase(),
filename
);

const headless = true; // puppeteer launch browser mode
const options = {
filePath,
headless,
};

(async () =>
await run({ type: 'multicard', screen: 'ALL', custom: '' }, false))();
runTest(query, options);

0 comments on commit 51e056f

Please sign in to comment.