UNPKG

aviation-api

Version:

[![Build Status](https://travis-ci.org/cristobal-io/aviation-api.svg?branch=master)](https://travis-ci.org/cristobal-io/aviation-api)

230 lines (180 loc) 8.45 kB
"use strict"; 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(); }); }