ft-webplatform/test/integration/utils/integration-test-utils.js
Martin Donnelly 76920442b1 init
2017-09-28 13:04:16 +01:00

112 lines
2.8 KiB
JavaScript

let request = require('request');
import fs from 'fs';
// import gutil from 'gulp-util';
/**
* @param {Response} response
*/
export function expectHtmlResponse(response) {
expect(response.error).toBeFalsy();
expect(response.statusCode).toBe(200);
}
/**
* @param {Response} response
* @param {Function} done
*/
export function expectJsonResponse(response, done) {
try {
expect(response.error).toBeFalsy();
expect(response.statusCode).toBe(200);
let parsedJsonObject;
try {
parsedJsonObject = JSON.parse(response.body);
} catch (e) {
expect('JSON is invalid').toBeNull();
expect(e.message).toBeNull();
}
if (parsedJsonObject) {
expect(parsedJsonObject).not.toBe(null);
expect(parsedJsonObject).not.toEqual({});
}
} catch (e) {
// https://github.com/jasmine/jasmine/issues/1204
done.fail(e);
}
}
/**
* @param {string} fileName
* @param {string} mockContents
*/
export function writeIntegrationData(fileName, mockContents) {
let dir = 'test/integration/downloaded-data';
let file = `test/integration/downloaded-data/${fileName.replace(/[=?\/:\\]/g, '_')}`;
file = file.replace(/^http___rcovlnx0192_8322_/, '');
if (dir && !fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
fs.writeFileSync(file, mockContents);
}
/**
* @param {Object} feedUrl
*/
export function getHtmlPage(feedUrl) {
return new Promise((resolve, reject) => {
request.post(
feedUrl,
{},
function(error, response, body) {
try {
if (!error && response.statusCode === 200) {
// gutil.log('Getting feed from ' + feedUrl);
let mockContents = body.replace(
'</body',
`<div>injectedByNode: true, sourceUrl: ${feedUrl}, feedDate: ${new Date()}</div></body`
);
writeIntegrationData(feedUrl + '.html', mockContents);
}
resolve(response);
} catch (e) {
reject(e);
}
}
);
});
}
/**
* @param {Object} feedUrl
*/
export function getJsonFeed(feedUrl) {
return new Promise((resolve, reject) => {
request.post(
feedUrl,
{},
function(error, response, body) {
try {
if (!error && response.statusCode === 200) {
// gutil.log('Getting feed from ' + feedUrl);
let obj = JSON.parse(body);
if (obj) {
obj.__debug = {
injectedByNode: true,
sourceUrl: feedUrl,
feedDate: new Date()
};
let mockContents = JSON.stringify(obj, null, 2);
writeIntegrationData(feedUrl + '.json', mockContents);
}
}
resolve(response);
} catch (e) {
reject(e);
}
}
);
});
}