From 9b55a9691f5dd962b45332ee9c15716b6803b8ee Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Fri, 9 Feb 2018 15:07:34 -0600 Subject: [PATCH] Setting which filters out aircraft not at the departure airport #171 --- ...017_06_07_014930_create_settings_table.php | 11 ++++-- app/Models/Migrations/Migration.php | 1 + app/Services/FlightService.php | 35 +++++++++++++++---- tests/TestData.php | 5 +-- tests/UserTest.php | 15 ++++++-- 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/app/Database/migrations/2017_06_07_014930_create_settings_table.php b/app/Database/migrations/2017_06_07_014930_create_settings_table.php index 4f088c7a..4f1440ca 100644 --- a/app/Database/migrations/2017_06_07_014930_create_settings_table.php +++ b/app/Database/migrations/2017_06_07_014930_create_settings_table.php @@ -132,7 +132,6 @@ class CreateSettingsTable extends Migration 'name' => 'PIREP duplicate time check', 'group' => 'pireps', 'value' => 10, - 'default' => 10, 'type' => 'int', 'description' => 'The time in minutes to check for a duplicate PIREP', ]); @@ -141,7 +140,6 @@ class CreateSettingsTable extends Migration 'name' => 'Hide Cancelled PIREPs', 'group' => 'pireps', 'value' => true, - 'default' => true, 'type' => 'boolean', 'description' => 'Hide any cancelled PIREPs in the front-end', ]); @@ -150,11 +148,18 @@ class CreateSettingsTable extends Migration 'name' => 'Restrict Aircraft to Ranks', 'group' => 'pireps', 'value' => true, - 'default' => true, 'type' => 'boolean', 'description' => 'Aircraft that can be flown are restricted to a user\'s rank', ]); + $this->addSetting('pireps.only_aircraft_at_dep_airport', [ + 'name' => 'Restrict Aircraft At Departure', + 'group' => 'pireps', + 'value' => false, + 'type' => 'boolean', + 'description' => 'Only allow aircraft that are at the departure airport', + ]); + /** * PILOTS */ diff --git a/app/Models/Migrations/Migration.php b/app/Models/Migrations/Migration.php index 2615457d..b1fa7ec0 100644 --- a/app/Models/Migrations/Migration.php +++ b/app/Models/Migrations/Migration.php @@ -90,6 +90,7 @@ class Migration extends MigrationBase 'name' => $attrs['name'], 'group' => $group, 'value' => $attrs['value'], + 'default' => $attrs['value'], 'type' => $attrs['type'], 'description' => $attrs['description'], ]; diff --git a/app/Services/FlightService.php b/app/Services/FlightService.php index eafc28b3..1ef6deec 100644 --- a/app/Services/FlightService.php +++ b/app/Services/FlightService.php @@ -8,6 +8,7 @@ namespace App\Services; +use function foo\func; use Log; use App\Models\Flight; @@ -31,16 +32,38 @@ class FlightService extends BaseService */ public function filterSubfleets($user, $flight) { + + $subfleets = $flight->subfleets; + + /** + * Only allow aircraft that the user has access to in their rank + */ if (setting('pireps.restrict_aircraft_to_rank', false)) { $allowed_subfleets = $this->userSvc->getAllowableSubfleets($user)->pluck('id'); - $flight->subfleets = $flight->subfleets->filter( - function ($subfleet, $item) use ($allowed_subfleets) { - if ($allowed_subfleets->contains($subfleet->id)) { - return true; - } - }); + $subfleets = $subfleets->filter(function ($subfleet, $i) use ($allowed_subfleets) { + if ($allowed_subfleets->contains($subfleet->id)) { + return true; + } + }); } + /** + * Only allow aircraft that are at the current departure airport + */ + if(setting('pireps.only_aircraft_at_dep_airport', false)) { + foreach($subfleets as $subfleet) { + $subfleet->aircraft = $subfleet->aircraft->filter( + function ($aircraft, $i) use ($flight) { + if ($aircraft->airport_id === $flight->dpt_airport_id) { + return true; + } + } + ); + } + } + + $flight->subfleets = $subfleets; + return $flight; } diff --git a/tests/TestData.php b/tests/TestData.php index c7923f5d..dd3d9fbe 100644 --- a/tests/TestData.php +++ b/tests/TestData.php @@ -34,7 +34,7 @@ class TestData * @param null $aircraft_count * @return mixed */ - public static function createSubfleetWithAircraft($aircraft_count = null) + public static function createSubfleetWithAircraft($aircraft_count = null, $airport_id=null) { $subfleet = factory(\App\Models\Subfleet::class)->create(); @@ -43,7 +43,8 @@ class TestData } $aircraft = factory(\App\Models\Aircraft::class, $aircraft_count)->create([ - 'subfleet_id' => $subfleet->id + 'subfleet_id' => $subfleet->id, + 'airport_id' => $airport_id, ]); return [ diff --git a/tests/UserTest.php b/tests/UserTest.php index 25d89aa3..d4dc5774 100644 --- a/tests/UserTest.php +++ b/tests/UserTest.php @@ -133,13 +133,21 @@ class UserTest extends TestCase { # Add subfleets and aircraft, but also add another # set of subfleets - $subfleetA = TestData::createSubfleetWithAircraft(2); + $airport = factory(App\Models\Airport::class)->create(); + $subfleetA = TestData::createSubfleetWithAircraft(2, $airport->id); $subfleetB = TestData::createSubfleetWithAircraft(2); $rank = TestData::createRank(10, [$subfleetA['subfleet']->id]); - $user = factory(App\Models\User::class)->create(['rank_id' => $rank->id,]); + $user = factory(App\Models\User::class)->create([ + 'curr_airport_id' => $airport->id, + 'rank_id' => $rank->id, + ]); + + $flight = factory(App\Models\Flight::class)->create([ + 'airline_id' => $user->airline_id, + 'dpt_airport_id' => $airport->id, + ]); - $flight = factory(App\Models\Flight::class)->create(['airline_id' => $user->airline_id]); $flight->subfleets()->syncWithoutDetaching([ $subfleetA['subfleet']->id, $subfleetB['subfleet']->id @@ -155,6 +163,7 @@ class UserTest extends TestCase $this->settingsRepo->store('pireps.restrict_aircraft_to_rank', false); $response = $this->get('/api/flights/' . $flight->id, [], $user); + $body = $response->json(); $response->assertStatus(200); $this->assertCount(2, $response->json()['subfleets']);