aviation-api
Version:
[](https://travis-ci.org/cristobal-io/aviation-api)
230 lines (180 loc) • 8.45 kB
JavaScript
;
var assert = require("assert");
var supertest = require("supertest");
var agent = supertest.agent("http://localhost:8081");
var server;
process.env.AVIATION_GEO_IP_SERVICE = process.env.AVIATION_GEO_IP_SERVICE ||
"http://localhost:8080/json/";
process.env.PG_USER = process.env.PG_USER || "aviator";
process.env.PG_DATABASE = process.env.PG_DATABASE || "aviation";
process.env.PG_HOST = process.env.PG_HOST || "0.0.0.0";
describe("aviation-api", function () {
before(function (done) {
this.timeout(10 * 1000);
server = require("../src/index.js").server;
done();
});
after(function (done) {
server.close(done);
});
var sanFranciscoAirport = {
location: "37°37′08″N 122°22′30″W",
airport_id: "San_Francisco_International_Airport",
latitude: "37°37′08″N",
longitude: "122°22′30″W",
name: "San Francisco International Airport",
nickname: "SFO",
iata: "SFO",
icao: "KSFO",
"dd_latitude":37.61888888888889,
"dd_longitude":-122.375
},
americanAirlines = {
"airline_id": "American_Airlines",
"name": "American Airlines, Inc.",
"logo_url": "//upload.wikimedia.org/wikipedia/en/thumb/2/23/American_Airlines_logo_2013.svg/300px-American_Airlines_logo_2013.svg.png",
"iata": "AA",
"icao": "AAL",
"callsign": "AMERICAN",
"website": "http://www.aa.com"
};
describe("Airports. \n", function () {
it("gets the airport data by '/airport/iata/:iata'", function (done) {
checkApi("/airport/iata/" + sanFranciscoAirport.iata, sanFranciscoAirport, done);
});
it("capital case gets the airport data by '/airport/icao/:icao'", function (done) {
checkApi("/airport/icao/" + sanFranciscoAirport.icao, sanFranciscoAirport, done);
});
it("lowercase gets the airport data by '/airport/icao/:icao'", function (done) {
checkApi("/airport/icao/" + sanFranciscoAirport.icao.toLowerCase(), sanFranciscoAirport, done);
});
it("gets the airport data by '/airports/radius/?airport_id=San_Francisco_International_Airport&radius=100'", function (done) {
var sfoRadius100Km = require("./fixtures/sfo_radius_100_km.json");
checkApi("/airports/radius/?airport_id=" + sanFranciscoAirport.airport_id + "&radius=100", sfoRadius100Km, done);
});
it("gets the airport data by '/airports/data/?name=San%Francisco%'", function (done) {
var sfoData = require("./fixtures/sfo.data.json");
checkApi("/airports/data/?name=" + sanFranciscoAirport.name, sfoData, done);
});
it("gets the runways by 'airports/runway/?name=San%Francisco%'", function (done) {
var sanFracnciscoRunways = require("./fixtures/sfo_runways.json");
checkApi("/airports/runways/?name=" + sanFranciscoAirport.name, sanFracnciscoRunways, done);
});
it("throws error on '/airport/icao/none'", function (done) {
agent
.get("/airport/icao/none")
.expect("content-type", /json/)
.expect(500)
.end(function (err, res) {
assert.equal(res.body, false);
assert.ok(res.error);
done();
});
});
it("/airport/data/iata/SFO/location", function (done) {
checkApi("/airport/data/iata/SFO/location", sanFranciscoAirport.location, done);
});
it("/airport/data/iata/SFO/airport_id", function (done) {
checkApi("/airport/data/iata/SFO/airport_id", sanFranciscoAirport.airport_id, done);
});
it("/airport/data/iata/SFO/name", function (done) {
checkApi("/airport/data/iata/SFO/name", sanFranciscoAirport.name, done);
});
it("/airport/data/iata/SFO/icao", function (done) {
checkApi("/airport/data/iata/SFO/icao", sanFranciscoAirport.icao, done);
});
it("/airport/data/iata/SFO/airport_id", function (done) {
checkApi("/airport/data/iata/SFO/airport_id", sanFranciscoAirport.airport_id, done);
});
it("/airport/data/airport_id/San_Francisco_International_Airport", function (done) {
checkApi("/airport/data/airport_id/San_Francisco_International_Airport", sanFranciscoAirport, done);
});
it("/airport/city/San_Jose_International_Airport", function (done) {
checkApi("/airport/city/San_Jose_International_Airport", "San_Jose,_California", done);
});
it("/airports/box/?lat1=38&long1=-123.5&lat2=37&long2=-122", function (done) {
var boxAirports = require("./fixtures/sfo_area_airports.json");
checkApi("/airports/box/?lat1=38&long1=-123.5&lat2=37&long2=-122", boxAirports, done);
});
it("/airport/airlines/San_Jose_International_Airport", function (done) {
var expectedAirlines = require("./fixtures/airlines_by_airport.json");
checkApi("/airport/airlines/San_Jose_International_Airport", expectedAirlines, done);
});
});
describe("\n Airlines. \n", function () {
it("gets the data of an airline", function (done) {
var americanAirlinesData = require("./fixtures/aa_data.json");
checkApi("/airlines/?airline_id=" + americanAirlines.airline_id, americanAirlinesData, done);
});
it("gets the airline destinations by '/airline/destinations/American_Airlines'", function (done) {
var americanAirlinesDestinations = require("./fixtures/aa_destinations.json");
checkApi("/airlines/destinations/" + americanAirlines.airline_id, americanAirlinesDestinations, done);
});
it("gets the cities of an airline", function (done) {
var americanAirlinesCities = require("./fixtures/aa_cities.json");
checkApi("/airlines/cities/?name=" + americanAirlines.name, americanAirlinesCities, done);
});
it("checks all the values for '/airlines/airline_id/American_Airlines/website'", function (done) {
checkApi("/airlines/airline_id/American_Airlines/website", americanAirlines.website, done);
});
it("/airlines/airline_id/American_Airlines/name", function (done) {
checkApi("/airlines/airline_id/American_Airlines/name", americanAirlines.name, done);
});
it("/airlines/airline_id/American_Airlines/logo_url", function (done) {
checkApi("/airlines/airline_id/American_Airlines/logo_url", americanAirlines.logo_url, done);
});
it("/airlines/airline_id/American_Airlines/iata", function (done) {
checkApi("/airlines/airline_id/American_Airlines/iata", americanAirlines.iata, done);
});
it("/airlines/airline_id/American_Airlines/icao", function (done) {
checkApi("/airlines/airline_id/American_Airlines/icao", americanAirlines.icao, done);
});
it("/airlines/airline_id/American_Airlines/callsign", function (done) {
checkApi("/airlines/airline_id/American_Airlines/callsign", americanAirlines.callsign, done);
});
});
describe("/geoip/", function () {
if (!process.env.AVIATION_GEO_IP_SERVICE) {
it.skip("Skipping geoip tests.\n " +
"Run:\n docker run -p 8080:8080 fiorix/freegeoip\n" +
"And set: AVIATION_GEO_IP_SERVICE=http://localhost:8080/json/\n" +
"to verify this feature.\n"
);
return;
}
it("should find the location for a user IP", function (done) {
agent
.get("/geoip/")
// If the api is behind a proxy the proxy should set the
// X-Forwarded-For header in order for us to grab the user IP
.set("X-Forwarded-For", "8.8.8.8")
.expect("content-type", /json.+utf-8/)
.expect(200)
.end(function (err, res) {
var expectedJson = require("./fixtures/geoip.json");
if (err) { throw err; }
if (res.error) { throw new Error(res.error); }
assert.deepEqual(res.body, expectedJson,
"the returned value doesn't match, expected: \n" +
JSON.stringify(expectedJson, 2, null) + " \n\nbut got: " +
JSON.stringify(res.body, 2, null));
done();
});
});
});
});
function checkApi(pathString, expectedJson, callback) {
return agent
.get(pathString)
.expect("content-type", /json.+utf-8/)
.expect(200)
.end(function (err, res) {
if (err) { throw err; }
if (res.error) { throw new Error(res.error); }
assert.deepEqual(res.body, expectedJson,
"the returned value doesn't match, expected: \n" +
JSON.stringify(expectedJson, 2, null) + " \n\nbut got: " +
JSON.stringify(res.body, 2, null));
callback();
});
}