diff --git a/Procfile b/Procfile index 1729d537..38128ec6 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ dnsmasq: /usr/local/sbin/dnsmasq --keep-in-foreground php-fpm: /usr/local/sbin/php-fpm --nodaemonize nginx: /usr/local/bin/nginx -mysql: /usr/local/bin/mysqld -mailhog: /usr/local/bin/mailhog +#mysql: /usr/local/bin/mysqld +#mailhog: /usr/local/bin/mailhog diff --git a/app/Http/Controllers/Api/AirlineController.php b/app/Http/Controllers/Api/AirlineController.php new file mode 100644 index 00000000..e1739527 --- /dev/null +++ b/app/Http/Controllers/Api/AirlineController.php @@ -0,0 +1,41 @@ +airlineRepo = $airlineRepo; + } + + /** + * Return all the airlines, paginated + */ + public function index(Request $request) + { + $airports = $this->airlineRepo + ->orderBy('name', 'asc') + ->paginate(50); + + return AirlineResource::collection($airports); + } + + /** + * Do a lookup, via vaCentral, for the airport information + * @param $id + * @return AirlineResource + */ + public function get($id) + { + $id = strtoupper($id); + AirlineResource::withoutWrapping(); + return new AirlineResource($this->airlineRepo->find($id)); + } +} diff --git a/app/Routes/api.php b/app/Routes/api.php index e665c175..ac6b263a 100755 --- a/app/Routes/api.php +++ b/app/Routes/api.php @@ -7,6 +7,9 @@ Route::group([], function() { Route::get('acars', 'AcarsController@index'); + Route::get('airlines', 'AirlineController@index'); + Route::get('airlines/{id}', 'AirlineController@get'); + Route::get('airports', 'AirportController@index'); Route::get('airports/hubs', 'AirportController@index_hubs'); Route::get('airports/{id}', 'AirportController@get'); @@ -18,11 +21,13 @@ Route::group([], function() Route::get('flights/search', 'FlightController@search'); Route::get('flights/{id}', 'FlightController@get'); + Route::get('pireps/{id}', 'PirepController@get'); Route::get('pireps/{id}/route', 'PirepController@route_get'); Route::get('pireps/{id}/acars/position', 'PirepController@acars_get'); Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson'); Route::get('status', 'StatusController@status'); + Route::get('version', 'StatusController@status'); }); /** @@ -30,13 +35,10 @@ Route::group([], function() */ Route::group(['middleware' => ['api.auth']], function () { - Route::get('pireps/{id}', 'PirepController@get'); - Route::post('pireps/prefile', 'PirepController@prefile'); Route::post('pireps/{id}/file', 'PirepController@file'); Route::delete('pireps/{id}/cancel', 'PirepController@cancel'); - Route::get('pireps/{id}/acars/geojson', 'PirepController@acars_geojson'); Route::post('pireps/{id}/acars/position', 'PirepController@acars_store'); Route::post('pireps/{id}/acars/positions', 'PirepController@acars_store'); diff --git a/tests/ApiTest.php b/tests/ApiTest.php index f3b5562a..daf48d61 100644 --- a/tests/ApiTest.php +++ b/tests/ApiTest.php @@ -20,9 +20,8 @@ class ApiTest extends TestCase public function testApiAuthentication() { $user = factory(User::class)->create(); - $pirep = factory(App\Models\Pirep::class)->create(); - $uri = '/api/pireps/' . $pirep->id; + $uri = $this->u('/user'); // Missing auth header $this->get($uri)->assertStatus(401); @@ -35,20 +34,17 @@ class ApiTest extends TestCase ->assertStatus(401); // Test upper/lower case of Authorization header, etc - $response = $this->withHeaders($this->apiHeaders())->get($uri); - $response->assertStatus(200)->assertJson(['id' => $pirep->id], true); + $response = $this->get($uri, $this->headers($user)); + $response->assertStatus(200)->assertJson(['id' => $user->id], true); $this->withHeaders(['x-api-key' => $user->api_key])->get($uri) - ->assertStatus(200) - ->assertJson(['id' => $pirep->id], true); + ->assertJson(['id' => $user->id], true); $this->withHeaders(['x-API-key' => $user->api_key])->get($uri) - ->assertStatus(200) - ->assertJson(['id' => $pirep->id], true); + ->assertJson(['id' => $user->id], true); $this->withHeaders(['X-API-KEY' => $user->api_key])->get($uri) - ->assertStatus(200) - ->assertJson(['id' => $pirep->id], true); + ->assertJson(['id' => $user->id], true); } /** @@ -64,6 +60,27 @@ class ApiTest extends TestCase $this->get($uri)->assertStatus(401); } + /** + * + */ + public function testGetAirlines() + { + $size = \random_int(5, 10); + $this->user = factory(App\Models\User::class)->create([ + 'airline_id' => 0 + ]); + + $airlines = factory(App\Models\Airline::class, $size)->create(); + + $res = $this->get($this->u('/airlines')); + $body = $res->json(); + + $this->assertCount($size, $body['data']); + + $airline = $airlines->random(); + $this->get('/api/airlines/'.$airline->id)->assertJson(['name' => $airline->name]); + } + /** * Make sure the airport data is returned */ diff --git a/tests/FlightTest.php b/tests/FlightTest.php index 4e17c9ec..a4d8f445 100644 --- a/tests/FlightTest.php +++ b/tests/FlightTest.php @@ -59,7 +59,7 @@ class FlightTest extends TestCase $flights = factory(App\Models\Flight::class, 100)->create(); $flight = $flights->random(); - $query = 'flight_id=' . $flight->id; + $query = 'dep_icao=' . $flight->dep_icao; $req = $this->get('/api/flights/search?' . $query); $body = $req->json(); diff --git a/tests/TestCase.php b/tests/TestCase.php index 7e431b38..d4e7e763 100755 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -15,6 +15,8 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase * * @var string */ + public static $prefix = '/api'; + protected $app; protected $baseUrl = 'http://localhost'; protected $connectionsToTransact = ['testing']; @@ -37,6 +39,15 @@ abstract class TestCase extends Illuminate\Foundation\Testing\TestCase ]; } + /** + * Return the URL with the URI prefix + * @param $uri + * @return string + */ + public function u($uri) { + return self::$prefix . $uri; + } + public function __construct($name = null, array $data = [], $dataName = '') { parent::__construct($name, $data, $dataName); } diff --git a/tests/data/base.yml b/tests/data/base.yml index 050eeb3b..970deb05 100644 --- a/tests/data/base.yml +++ b/tests/data/base.yml @@ -1,12 +1,12 @@ # -airlines: - - id: 1 - icao: VMS - iata: VM - name: phpvms airlines - active: 1 - created_at: now - updated_at: now +#airlines: +# - id: 1 +# icao: VMS +# iata: VM +# name: phpvms airlines +# active: 1 +# created_at: now +# updated_at: now users: - id: 1