123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- var fs = require('fs');
- var rimraf = require('rimraf');
- var path = require('path');
- var Q = require('q');
- var debug = require('debug')('ylt:resultsDatastore');
- function ResultsDatastore() {
- 'use strict';
- var resultFileName = 'results.json';
- var resultScreenshotName = 'screenshot.jpg';
- var resultsFolderName = 'results';
- var resultsDir = path.join(__dirname, '..', '..', '..', resultsFolderName);
- this.saveResult = function(testResults) {
-
- var screenshotFilePath = path.join(resultsDir, testResults.runId, resultScreenshotName);
- var screenshotAPIPath = '/';
- return createResultFolder(testResults.runId)
- .then(function() {
- return saveScreenshotIfExists(testResults, screenshotFilePath);
- })
- .then(function() {
- debug('Saving results to disk...');
- var resultFilePath = path.join(resultsDir, testResults.runId, resultFileName);
- debug('Destination file is %s', resultFilePath);
-
- return Q.nfcall(fs.writeFile, resultFilePath, JSON.stringify(testResults, null, 2));
- });
- };
- this.getResult = function(runId) {
- var resultFilePath = path.join(resultsDir, runId, resultFileName);
- debug('Reading results (runID = %s) from disk...', runId);
-
- return Q.nfcall(fs.readFile, resultFilePath, {encoding: 'utf8'}).then(function(data) {
- return JSON.parse(data);
- });
- };
- this.deleteResult = function(runId) {
- var folder = path.join(resultsDir, runId);
- debug('Deleting results (runID = %s) from disk...', runId);
- return Q.nfcall(rimraf, folder);
- };
- // The folder /results/folderName/
- function createResultFolder(runId) {
- var folder = path.join(resultsDir, runId);
- debug('Creating the folder %s', runId);
- return createGlobalFolder().then(function() {
- return Q.nfcall(fs.mkdir, folder);
- });
- }
- // The folder /results/
- function createGlobalFolder() {
- var deferred = Q.defer();
- // Create the results folder if it doesn't exist
- fs.exists(resultsDir, function(exists) {
- if (exists) {
- deferred.resolve();
- } else {
- debug('Creating the global results folder', resultsDir);
- fs.mkdir(resultsDir, function(err) {
- if (err) {
- deferred.reject(err);
- } else {
- deferred.resolve();
- }
- });
- }
- });
- return deferred.promise;
- }
- this.getResultFolder = function(runId) {
- return path.join(resultsDir, runId);
- };
- // If there is a screenshot, save it as screenshot.jpg in the same folder as the results
- function saveScreenshotIfExists(testResults, path) {
- var deferred = Q.defer();
- if (testResults.screenshotBuffer) {
- fs.writeFile(path, testResults.screenshotBuffer, function(err) {
- if (err) {
- debug('Could not save final screenshot');
- debug(err);
- // But it is OK, we don't need to fail the run
- deferred.resolve();
- } else {
- debug('Final screenshot saved: ' + path);
- deferred.resolve();
- }
- });
- delete testResults.screenshotBuffer;
- } else {
- debug('Screenshot not found');
- deferred.resolve();
- }
- return deferred.promise;
- }
- this.getScreenshot = function(runId) {
- var screenshotFilePath = path.join(resultsDir, runId, resultScreenshotName);
- debug('Getting screenshot (runID = %s) from disk...', runId);
-
- return Q.nfcall(fs.readFile, screenshotFilePath);
- };
- }
- module.exports = ResultsDatastore;
|