diff --git a/app/Contracts/FormRequest.php b/app/Contracts/FormRequest.php index 0e873b7b..8a05d859 100644 --- a/app/Contracts/FormRequest.php +++ b/app/Contracts/FormRequest.php @@ -2,6 +2,8 @@ namespace App\Contracts; +use Illuminate\Validation\Rule; + class FormRequest extends \Illuminate\Foundation\Http\FormRequest { /** @@ -21,4 +23,18 @@ class FormRequest extends \Illuminate\Foundation\Http\FormRequest { return []; } + + /** + * Set a given column as being unique + * + * @param $table + * + * @return array + */ + public function unique($table) + { + return [ + Rule::unique($table)->ignore($this->id, 'id'), + ]; + } } diff --git a/app/Database/migrations/2020_03_28_174238_airline_remove_nullable.php b/app/Database/migrations/2020_03_28_174238_airline_remove_nullable.php new file mode 100644 index 00000000..100fac31 --- /dev/null +++ b/app/Database/migrations/2020_03_28_174238_airline_remove_nullable.php @@ -0,0 +1,19 @@ +dropUnique('airlines_iata_unique'); + }); + } + + public function down() + { + } +} diff --git a/app/Http/Requests/UpdateAirlineRequest.php b/app/Http/Requests/UpdateAirlineRequest.php index e9440104..e39abaf2 100644 --- a/app/Http/Requests/UpdateAirlineRequest.php +++ b/app/Http/Requests/UpdateAirlineRequest.php @@ -14,6 +14,10 @@ class UpdateAirlineRequest extends FormRequest */ public function rules(): array { + $rules = Airline::$rules; + $rules['iata'] .= '|unique:airlines,iata,'.$this->id.',id'; + $rules['icao'] .= '|unique:airlines,icao,'.$this->id.',id'; + return Airline::$rules; } } diff --git a/tests/AirlineTest.php b/tests/AirlineTest.php index 2ea5886b..50977a64 100644 --- a/tests/AirlineTest.php +++ b/tests/AirlineTest.php @@ -4,6 +4,7 @@ use App\Services\AirlineService; class AirlineTest extends TestCase { + /** @var AirlineService */ protected $airlineSvc; public function setUp(): void @@ -14,6 +15,23 @@ class AirlineTest extends TestCase $this->airlineSvc = app(AirlineService::class); } + public function testAddAirline() + { + $attrs = factory(App\Models\Airline::class)->make([ + 'iata' => '', + ])->toArray(); + + $airline = $this->airlineSvc->createAirline($attrs); + $this->assertNotNull($airline); + + // Add another airline, also blank IATA + $attrs = factory(App\Models\Airline::class)->make([ + 'iata' => '', + ])->toArray(); + $airline = $this->airlineSvc->createAirline($attrs); + $this->assertNotNull($airline); + } + /** * Try deleting an airline which has flights/other assets that exist */