aviation-scraper
Version:
Scraper to get airlines and airport data
151 lines (116 loc) • 4.41 kB
JavaScript
;
// Mocha
var chai = require("chai");
var expect = chai.expect;
// dependencies
var _ = require("lodash");
var async = require("async");
var airlineRoutes = require("../src/airline_destinations.js");
var getDestinations = airlineRoutes.getDestinations;
var getAllDestinations = airlineRoutes.getAllDestinations;
var getFilename = airlineRoutes.getFilename;
var Ajv = require("ajv");
var ajv = Ajv();
var fs = require("fs");
var airports = require("./fixtures/airline_destinations.options.json");
var BASE_DIR = "./tmp";
describe("airline_destinations.js: \n", function () {
var validateScraperTableSchema, validateDefaultSchema, validateTableSchema;
before(function (done) {
var defaultSchema = require("../schema/scraper.default.schema.json");
validateScraperTableSchema = ajv.compile(defaultSchema);
validateDefaultSchema = ajv.compile(defaultSchema);
validateTableSchema = ajv.compile(defaultSchema);
done();
});
after(function (done) {
delete require.cache[require.resolve("./fixtures/airline_destinations.options.json")];
done();
});
describe("getFilename", function () {
it("Should save the files with errors with a different message", function () {
var badRoute = getFilename({
"name": "bad_filename",
baseDir: BASE_DIR
});
expect(badRoute.fileName).to.eql(BASE_DIR + "/error_bad_filename.json");
});
});
describe("getDestinations function", function () {
it("Should return a validated schema from default scraper model", function (done) {
this.timeout(15000);
airports[0].baseDir = BASE_DIR;
getDestinations(airports[0], function (err, results) {
var valid = validateDefaultSchema(results.destinations);
expect(valid, _.get(validateDefaultSchema, "errors[0].message")).to.be.true;
done();
});
});
it("Should return a validated Schema from table scraper model", function (done) {
airports[1].baseDir = BASE_DIR;
getDestinations(airports[1], function (err, results) {
var valid = validateScraperTableSchema(results.destinations);
expect(valid, _.get(validateScraperTableSchema, "errors[0].message")).to.be.true;
done();
});
});
it("Should return a validated Schema from table scraper model", function (done) {
airports[2].baseDir = BASE_DIR;
getDestinations(airports[2], function (err, results) {
var valid = validateTableSchema(results.destinations);
expect(valid, _.get(validateTableSchema, "errors[0].message")).to.be.true;
done();
});
});
it("Should return a validated Schema from table_center scraper", function (done) {
airports[3].baseDir = BASE_DIR;
getDestinations(airports[3], function (err, results) {
var valid = validateTableSchema(results.destinations);
expect(valid, _.get(validateTableSchema, "errors[0].message")).to.be.true;
done();
});
});
});
describe("getAllDestinations function", function () {
var airportsResult = {};
before(function (done) {
this.timeout(25 * 1000);
getAllDestinations({
airlines: airports,
baseDir: BASE_DIR,
save: true
}, function (err, result) {
airportsResult = result;
done();
});
});
afterEach(function () {
airportsResult.errors = 0;
});
it("Should return and save the file", function (done) {
async.each(airportsResult, function (airport, callback) {
// The structure of .destinations is being validated in other test.
expect(_.has(airport, "destinations")).to.be.true;
fs.unlink(airport.fileName, function (err) {
if (err) {
console.log(err); //eslint-disable-line no-console
}
callback();
});
}, done);
});
it("should have 0 errors returning from getAllDestinations", function (done) {
var errorMessages = [];
_.forEach(airportsResult, function (airport) {
var errorMessage = _.get(airport, "errorMessage");
if (errorMessage) {
console.log(errorMessage); //eslint-disable-line no-console
errorMessages.push(errorMessage);
delete airport.errorMessage;
}
});
expect(errorMessages.length, errorMessages).to.eql(0);
done();
});
});
});