Skip to content

Commit

Permalink
Add /api/airlines and /api/airline/{id} #120
Browse files Browse the repository at this point in the history
  • Loading branch information
nabeelio committed Jan 6, 2018
1 parent 46a411e commit 2de8d9e
Show file tree
Hide file tree
Showing 7 changed files with 95 additions and 24 deletions.
4 changes: 2 additions & 2 deletions Procfile
Original file line number Diff line number Diff line change
@@ -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
41 changes: 41 additions & 0 deletions app/Http/Controllers/Api/AirlineController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;

use App\Repositories\AirlineRepository;
use App\Http\Resources\Airline as AirlineResource;

class AirlineController extends RestController
{
protected $airlineRepo;

public function __construct(AirlineRepository $airlineRepo) {
$this->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));
}
}
8 changes: 5 additions & 3 deletions app/Routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
{
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');
Expand All @@ -18,25 +21,24 @@
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');
});

/**
* these need to be authenticated with a user's API key
*/
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');

Expand Down
37 changes: 27 additions & 10 deletions tests/ApiTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ public function setUp()
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);
Expand All @@ -35,20 +34,17 @@ public function testApiAuthentication()
->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);
}

/**
Expand All @@ -64,6 +60,27 @@ public function testApiDeniedOnInactiveUser()
$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
*/
Expand Down
2 changes: 1 addition & 1 deletion tests/FlightTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public function testFlightSearchApi()
$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();

Expand Down
11 changes: 11 additions & 0 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'];
Expand All @@ -37,6 +39,15 @@ public function headers($user)
];
}

/**
* 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);
}
Expand Down
16 changes: 8 additions & 8 deletions tests/data/base.yml
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit 2de8d9e

Please sign in to comment.