@applitools/eyes-storybook
Version:
57 lines (50 loc) • 1.67 kB
JavaScript
;
const throat = require('throat');
const {storyToCheckSettings, storyToOpenSettings} = require('./transformSettings');
function makeRenderStory({
logger,
openEyes,
performance,
timeItAsync,
storyDataGap,
appName,
serverSettings,
}) {
const throttle = throat(storyDataGap);
return function renderStory({story, snapshots, url}) {
const baselineName = story.baselineName;
const title = story.storyTitle;
logger.log(`running story ${title} with baseline ${baselineName}`);
const openParams = storyToOpenSettings({story, appName, serverSettings});
const checkParams = storyToCheckSettings({story, url});
return timeItAsync(baselineName, async () => {
const eyes = await openEyes({settings: openParams});
return new Promise((resolve, reject) => {
throttle(async () => {
try {
if (snapshots) {
await eyes.checkAndClose({
target: snapshots,
settings: checkParams,
});
const results = await eyes.getResults();
resolve(results);
} else {
await eyes.abort({settings: {environments: checkParams.environments}});
reject(
new Error(`Failed to get story data for ${openParams.testName}, test was aborted`),
);
}
} catch (err) {
reject(err);
}
});
});
}).then(onDoneStory);
function onDoneStory(results) {
logger.log('finished story', baselineName, 'in', performance[baselineName]);
return results;
}
};
}
module.exports = makeRenderStory;