79 lines
2.5 KiB
JavaScript
79 lines
2.5 KiB
JavaScript
module.exports = async function( page ) {
|
|
const config = require( '../config' );
|
|
const url = require( 'url' );
|
|
const fs = require( 'fs' );
|
|
const path = require( 'path' );
|
|
const chalk = require( 'chalk' );
|
|
|
|
const pathname = 'backstop_data/html_snapshots';
|
|
if ( ! fs.existsSync( pathname ) ) {
|
|
const __dirname = path.resolve();
|
|
// Remove leading directory markers, and remove ending /file-name.extension if exists
|
|
pathname.replace( /^\.*\/|\/?[^\/]+\.[a-z]+|\/$/g, '' );
|
|
fs.mkdir( path.resolve( __dirname, pathname ), { recursive: true }, ( e ) => {
|
|
if ( e ) {
|
|
// eslint-disable-next-line no-console
|
|
console.error( e );
|
|
} else {
|
|
// eslint-disable-next-line no-console
|
|
console.log( chalk.green( 'Success created folder - snapshot' ) );
|
|
}
|
|
} );
|
|
}
|
|
|
|
page.setRequestInterception( true );
|
|
|
|
page
|
|
.on( 'request', async ( request ) => {
|
|
const requestUrl = request.url();
|
|
const configHost = url.parse( config.url_origin, true ).host;
|
|
const requestHost = url.parse( requestUrl, true ).host;
|
|
|
|
if ( 'localhost' === requestHost ) {
|
|
request.respond( {
|
|
status: 302,
|
|
headers: {
|
|
location: requestUrl.replace( requestHost, configHost ),
|
|
},
|
|
} );
|
|
} else {
|
|
request.continue();
|
|
}
|
|
} )
|
|
.on( 'console', ( message ) => {
|
|
const type = message.type().substr( 0, 3 ).toUpperCase();
|
|
const colors = {
|
|
LOG: ( text ) => text,
|
|
ERR: chalk.red,
|
|
WAR: chalk.yellow,
|
|
INF: chalk.cyan,
|
|
};
|
|
const color = colors[ type ] || chalk.blue;
|
|
// eslint-disable-next-line no-console
|
|
console.log( color( `${ type } ${ message.text() }` ) );
|
|
} )
|
|
.on( 'pageerror', ( { message } ) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log( chalk.red( message ) );
|
|
} )
|
|
.on( 'response', async ( response ) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log( chalk.green( `${ response.status() } ${ response.url() }` ) );
|
|
} )
|
|
.on( 'requestfailed', ( request ) => {
|
|
// eslint-disable-next-line no-console
|
|
console.log( chalk.magenta( `${ request.failure().errorText } ${ request.url() }` ) );
|
|
} )
|
|
.on( 'load', async () => {
|
|
const pageTitle = await page.title();
|
|
const cdp = await page.target().createCDPSession();
|
|
const { data } = await cdp.send( 'Page.captureSnapshot', { format: 'mhtml' } );
|
|
const filePath = `backstop_data/html_snapshots/${ pageTitle }.mhtml`;
|
|
fs.writeFileSync( filePath, data );
|
|
if ( ! fs.existsSync( filePath ) ) {
|
|
// eslint-disable-next-line no-console
|
|
console.log( chalk.red( `Failed to created file - ${ filePath }` ) );
|
|
}
|
|
} );
|
|
};
|