Fix and enable Subfleet/Fare tests and factories
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="AircraftTest" type="PHPUnitRunConfigurationType" factoryName="PHPUnit" singleton="true">
|
<configuration default="false" name="SubfleetTest" type="PHPUnitRunConfigurationType" factoryName="PHPUnit" singleton="true">
|
||||||
<TestRunner class="AircraftTest" configuration_file="$PROJECT_DIR$/phpunit.xml" file="$PROJECT_DIR$/tests/AircraftTest.php" scope="Class" use_alternative_configuration_file="true" />
|
<TestRunner class="SubfleetTest" configuration_file="$PROJECT_DIR$/phpunit.xml" file="$PROJECT_DIR$/tests/SubfleetTest.php" scope="Class" use_alternative_configuration_file="true" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
@@ -240,7 +240,7 @@ class SubfleetController extends BaseController
|
|||||||
*/
|
*/
|
||||||
if ($request->isMethod('post')) {
|
if ($request->isMethod('post')) {
|
||||||
$fare = $this->fareRepo->findWithoutFail($request->fare_id);
|
$fare = $this->fareRepo->findWithoutFail($request->fare_id);
|
||||||
$fare_svc->setForAircraft($subfleet, $fare);
|
$fare_svc->setForSubfleet($subfleet, $fare);
|
||||||
}
|
}
|
||||||
|
|
||||||
// update the pivot table with overrides for the fares
|
// update the pivot table with overrides for the fares
|
||||||
@@ -248,7 +248,7 @@ class SubfleetController extends BaseController
|
|||||||
$override = [];
|
$override = [];
|
||||||
$fare = $this->fareRepo->findWithoutFail($request->fare_id);
|
$fare = $this->fareRepo->findWithoutFail($request->fare_id);
|
||||||
$override[$request->name] = $request->value;
|
$override[$request->name] = $request->value;
|
||||||
$fare_svc->setForAircraft($subfleet, $fare, $override);
|
$fare_svc->setForSubfleet($subfleet, $fare, $override);
|
||||||
}
|
}
|
||||||
|
|
||||||
// dissassociate fare from teh aircraft
|
// dissassociate fare from teh aircraft
|
||||||
|
|||||||
@@ -15,41 +15,29 @@ class Fare extends Model
|
|||||||
|
|
||||||
protected $dates = ['deleted_at'];
|
protected $dates = ['deleted_at'];
|
||||||
|
|
||||||
public $fillable
|
public $fillable = [
|
||||||
= [
|
'code',
|
||||||
'code',
|
'name',
|
||||||
'name',
|
'price',
|
||||||
'price',
|
'cost',
|
||||||
'cost',
|
'capacity',
|
||||||
'notes',
|
'notes',
|
||||||
'active',
|
'active',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
protected $casts = [
|
||||||
* The attributes that should be casted to native types.
|
'code' => 'string',
|
||||||
*
|
'name' => 'string',
|
||||||
* @var array
|
'price' => 'float',
|
||||||
*/
|
'cost' => 'float',
|
||||||
protected $casts
|
'capacity' => 'integer',
|
||||||
= [
|
'active' => 'boolean',
|
||||||
'code' => 'string',
|
];
|
||||||
'name' => 'string',
|
|
||||||
'price' => 'float',
|
|
||||||
'cost' => 'float',
|
|
||||||
'notes' => 'string',
|
|
||||||
'active' => 'boolean',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
public static $rules = [
|
||||||
* Validation rules
|
'code' => 'required',
|
||||||
*
|
'name' => 'required',
|
||||||
* @var array
|
];
|
||||||
*/
|
|
||||||
public static $rules
|
|
||||||
= [
|
|
||||||
'code' => 'required',
|
|
||||||
'name' => 'required',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* any foreign keys
|
* any foreign keys
|
||||||
|
|||||||
@@ -16,11 +16,8 @@ class FareService extends BaseService {
|
|||||||
*
|
*
|
||||||
* @return Aircraft
|
* @return Aircraft
|
||||||
*/
|
*/
|
||||||
public function setForAircraft(
|
public function setForSubfleet(Subfleet &$subfleet, Fare &$fare, array $override=[])
|
||||||
Subfleet &$subfleet,
|
{
|
||||||
Fare &$fare,
|
|
||||||
array $override=[]
|
|
||||||
) {
|
|
||||||
$subfleet->fares()->syncWithoutDetaching([$fare->id]);
|
$subfleet->fares()->syncWithoutDetaching([$fare->id]);
|
||||||
|
|
||||||
# modify any pivot values?
|
# modify any pivot values?
|
||||||
@@ -40,7 +37,7 @@ class FareService extends BaseService {
|
|||||||
* @param Aircraft $subfleet
|
* @param Aircraft $subfleet
|
||||||
* @return Fare[]
|
* @return Fare[]
|
||||||
*/
|
*/
|
||||||
public function getForAircraft(Subfleet &$subfleet)
|
public function getForSubfleet(Subfleet &$subfleet)
|
||||||
{
|
{
|
||||||
$fares = $subfleet->fares->map(function($fare) {
|
$fares = $subfleet->fares->map(function($fare) {
|
||||||
if(!is_null($fare->pivot->price)) {
|
if(!is_null($fare->pivot->price)) {
|
||||||
|
|||||||
13
database/factories/FareFactory.php
Normal file
13
database/factories/FareFactory.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Faker\Generator as Faker;
|
||||||
|
|
||||||
|
$factory->define(App\Models\Fare::class, function (Faker $faker) {
|
||||||
|
return [
|
||||||
|
'id' => $faker->unique()->numberBetween(10, 10000),
|
||||||
|
'code' => $faker->text(5),
|
||||||
|
'name' => $faker->text(20),
|
||||||
|
'price' => $faker->randomFloat(2, 100, 1000),
|
||||||
|
'capacity' => $faker->randomFloat(0, 20, 500),
|
||||||
|
];
|
||||||
|
});
|
||||||
@@ -1 +0,0 @@
|
|||||||
<?php
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use App\Models\Fare;
|
|
||||||
use App\Models\Subfleet;
|
|
||||||
|
|
||||||
class AircraftTest extends TestCase
|
|
||||||
{
|
|
||||||
protected $ac_svc,
|
|
||||||
$ICAO = 'B777';
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->addData('aircraft');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getAircraftClass()
|
|
||||||
{
|
|
||||||
return app('App\Repositories\AircraftClassRepository')
|
|
||||||
->findByField('code', 'H')->first();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function findByICAO($icao)
|
|
||||||
{
|
|
||||||
$ac_repo = app('App\Repositories\SubfleetRepository');
|
|
||||||
return $ac_repo->findByICAO($icao);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getFareByCode($code)
|
|
||||||
{
|
|
||||||
return Fare::where('code', $code)->first();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSubfleetFaresNoOverride()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete(
|
|
||||||
'This test has not been implemented yet.'
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
$fare_svc = app('App\Services\FareService');
|
|
||||||
|
|
||||||
$subfleet = Subfleet::find(1);
|
|
||||||
$fare = $this->getFareByCode('Y');
|
|
||||||
|
|
||||||
$fare_svc->setForAircraft($subfleet, $fare);
|
|
||||||
$ac_fares = $fare_svc->getForAircraft($subfleet);
|
|
||||||
|
|
||||||
$this->assertCount(1, $ac_fares);
|
|
||||||
$this->assertEquals($fare->price, $ac_fares[0]->price);
|
|
||||||
$this->assertEquals($fare->capacity, $ac_fares[0]->capacity);
|
|
||||||
|
|
||||||
#
|
|
||||||
# set an override now
|
|
||||||
#
|
|
||||||
$fare_svc->setForAircraft($subfleet, $fare, [
|
|
||||||
'price' => 50, 'capacity' => 400
|
|
||||||
]);
|
|
||||||
|
|
||||||
# look for them again
|
|
||||||
$ac_fares = $fare_svc->getForAircraft($subfleet);
|
|
||||||
|
|
||||||
$this->assertCount(1, $ac_fares);
|
|
||||||
$this->assertEquals(50, $ac_fares[0]->price);
|
|
||||||
$this->assertEquals(400, $ac_fares[0]->capacity);
|
|
||||||
|
|
||||||
# delete
|
|
||||||
$fare_svc->delFromAircraft($subfleet, $fare);
|
|
||||||
$this->assertCount(0, $fare_svc->getForAircraft($subfleet));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSubfleetFaresOverride()
|
|
||||||
{
|
|
||||||
$this->markTestSkipped(
|
|
||||||
'This test has not been implemented yet.'
|
|
||||||
);
|
|
||||||
|
|
||||||
$fare_svc = app('App\Services\FareService');
|
|
||||||
|
|
||||||
$subfleet = Subfleet::find(1);
|
|
||||||
$fare = $this->getFareByCode('Y');
|
|
||||||
|
|
||||||
$fare_svc->setForAircraft($subfleet, $fare, [
|
|
||||||
'price' => 50, 'capacity' => 400
|
|
||||||
]);
|
|
||||||
|
|
||||||
$ac_fares = $fare_svc->getForAircraft($subfleet);
|
|
||||||
|
|
||||||
$this->assertCount(1, $ac_fares);
|
|
||||||
$this->assertEquals(50, $ac_fares[0]->price);
|
|
||||||
$this->assertEquals(400, $ac_fares[0]->capacity);
|
|
||||||
|
|
||||||
#
|
|
||||||
# update the override to a different amount and make sure it updates
|
|
||||||
#
|
|
||||||
|
|
||||||
$fare_svc->setForAircraft($subfleet, $fare, [
|
|
||||||
'price' => 150, 'capacity' => 50
|
|
||||||
]);
|
|
||||||
|
|
||||||
$ac_fares = $fare_svc->getForAircraft($subfleet);
|
|
||||||
|
|
||||||
$this->assertCount(1, $ac_fares);
|
|
||||||
$this->assertEquals(150, $ac_fares[0]->price);
|
|
||||||
$this->assertEquals(50, $ac_fares[0]->capacity);
|
|
||||||
|
|
||||||
# delete
|
|
||||||
$fare_svc->delFromAircraft($subfleet, $fare);
|
|
||||||
$this->assertCount(0, $fare_svc->getForAircraft($subfleet));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException Exception
|
|
||||||
*/
|
|
||||||
public function testAircraftMissingField()
|
|
||||||
{
|
|
||||||
$this->markTestSkipped(
|
|
||||||
'This test has not been implemented yet.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -17,8 +17,6 @@ class FlightTest extends TestCase
|
|||||||
public function addFlight()
|
public function addFlight()
|
||||||
{
|
{
|
||||||
$flight = factory(App\Models\Flight::class)->create();
|
$flight = factory(App\Models\Flight::class)->create();
|
||||||
|
|
||||||
# TODO: Add some subfleets in the setUp and assign the IDs here
|
|
||||||
$flight->subfleets()->syncWithoutDetaching([
|
$flight->subfleets()->syncWithoutDetaching([
|
||||||
factory(App\Models\Subfleet::class)->create()->id
|
factory(App\Models\Subfleet::class)->create()->id
|
||||||
]);
|
]);
|
||||||
|
|||||||
85
tests/SubfleetTest.php
Normal file
85
tests/SubfleetTest.php
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Fare;
|
||||||
|
use App\Models\Subfleet;
|
||||||
|
|
||||||
|
class SubfleetTest extends TestCase
|
||||||
|
{
|
||||||
|
protected $ac_svc,
|
||||||
|
$ICAO = 'B777';
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->addData('base');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSubfleetFaresNoOverride()
|
||||||
|
{
|
||||||
|
$fare_svc = app('App\Services\FareService');
|
||||||
|
|
||||||
|
$subfleet = factory(App\Models\Subfleet::class)->create();
|
||||||
|
$fare = factory(App\Models\Fare::class)->create();
|
||||||
|
|
||||||
|
$fare_svc->setForSubfleet($subfleet, $fare);
|
||||||
|
$subfleet_fares = $fare_svc->getForSubfleet($subfleet);
|
||||||
|
|
||||||
|
$this->assertCount(1, $subfleet_fares);
|
||||||
|
$this->assertEquals($fare->price, $subfleet_fares->get(0)->price);
|
||||||
|
$this->assertEquals($fare->capacity, $subfleet_fares->get(0)->capacity);
|
||||||
|
|
||||||
|
#
|
||||||
|
# set an override now
|
||||||
|
#
|
||||||
|
$fare_svc->setForSubfleet($subfleet, $fare, [
|
||||||
|
'price' => 50, 'capacity' => 400
|
||||||
|
]);
|
||||||
|
|
||||||
|
# look for them again
|
||||||
|
$subfleet_fares = $fare_svc->getForSubfleet($subfleet);
|
||||||
|
|
||||||
|
$this->assertCount(1, $subfleet_fares);
|
||||||
|
$this->assertEquals(50, $subfleet_fares[0]->price);
|
||||||
|
$this->assertEquals(400, $subfleet_fares[0]->capacity);
|
||||||
|
|
||||||
|
# delete
|
||||||
|
$fare_svc->delFromAircraft($subfleet, $fare);
|
||||||
|
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSubfleetFaresOverride()
|
||||||
|
{
|
||||||
|
$fare_svc = app('App\Services\FareService');
|
||||||
|
|
||||||
|
$subfleet = factory(App\Models\Subfleet::class)->create();
|
||||||
|
$fare = factory(App\Models\Fare::class)->create();
|
||||||
|
|
||||||
|
$fare_svc->setForSubfleet($subfleet, $fare, [
|
||||||
|
'price' => 50, 'capacity' => 400
|
||||||
|
]);
|
||||||
|
|
||||||
|
$ac_fares = $fare_svc->getForSubfleet($subfleet);
|
||||||
|
|
||||||
|
$this->assertCount(1, $ac_fares);
|
||||||
|
$this->assertEquals(50, $ac_fares[0]->price);
|
||||||
|
$this->assertEquals(400, $ac_fares[0]->capacity);
|
||||||
|
|
||||||
|
#
|
||||||
|
# update the override to a different amount and make sure it updates
|
||||||
|
#
|
||||||
|
|
||||||
|
$fare_svc->setForSubfleet($subfleet, $fare, [
|
||||||
|
'price' => 150, 'capacity' => 50
|
||||||
|
]);
|
||||||
|
|
||||||
|
$ac_fares = $fare_svc->getForSubfleet($subfleet);
|
||||||
|
|
||||||
|
$this->assertCount(1, $ac_fares);
|
||||||
|
$this->assertEquals(150, $ac_fares[0]->price);
|
||||||
|
$this->assertEquals(50, $ac_fares[0]->capacity);
|
||||||
|
|
||||||
|
# delete
|
||||||
|
$fare_svc->delFromAircraft($subfleet, $fare);
|
||||||
|
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
aircraft:
|
|
||||||
- id: 1
|
|
||||||
subfleet_id: 1
|
|
||||||
name: Boeing 747-400
|
|
||||||
registration: NC17
|
|
||||||
tail_number: 17
|
|
||||||
- id: 2
|
|
||||||
subfleet_id: 2
|
|
||||||
name: Boeing 777-200
|
|
||||||
registration: NC20
|
|
||||||
tail_number: 20
|
|
||||||
- id: 3
|
|
||||||
subfleet_id: 1
|
|
||||||
name: Boeing 747-400-PW
|
|
||||||
registration: PW744
|
|
||||||
tail_number: 207X
|
|
||||||
|
|
||||||
subfleets:
|
|
||||||
- id: 1
|
|
||||||
airline_id: 1
|
|
||||||
name: 747-400 Winglets
|
|
||||||
type: 744W
|
|
||||||
fuel_type: 1
|
|
||||||
fuel_capacity: 2000
|
|
||||||
- id: 2
|
|
||||||
airline_id: 1
|
|
||||||
name: 777-200 LR
|
|
||||||
type: 772-LR
|
|
||||||
fuel_type: 1
|
|
||||||
fuel_capacity: 1000
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
airlines:
|
|
||||||
- id: 1
|
|
||||||
icao: VMS
|
|
||||||
iata: VM
|
|
||||||
name: phpvms airlines
|
|
||||||
active: 1
|
|
||||||
created_at: now
|
|
||||||
updated_at: now
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
airports:
|
|
||||||
- id: KAUS
|
|
||||||
iata: AUS
|
|
||||||
icao: KAUS
|
|
||||||
name: Austin-Bergstrom
|
|
||||||
location: Austin, Texas, USA
|
|
||||||
lat: 30.1945278
|
|
||||||
lon: -97.6698889
|
|
||||||
- id: KJFK
|
|
||||||
iata: JFK
|
|
||||||
icao: KJFK
|
|
||||||
name: John F Kennedy
|
|
||||||
location: New York, New York, USA
|
|
||||||
lat: 40.6399257
|
|
||||||
lon: -73.7786950
|
|
||||||
- id: EGLL
|
|
||||||
iata: LHR
|
|
||||||
icao: EGLL
|
|
||||||
name: London Heathrow
|
|
||||||
location: London, England
|
|
||||||
lat: 51.4775
|
|
||||||
lon: -0.4614
|
|
||||||
@@ -44,47 +44,3 @@ ranks:
|
|||||||
auto_approve_acars: 1
|
auto_approve_acars: 1
|
||||||
auto_approve_manual: 1
|
auto_approve_manual: 1
|
||||||
auto_promote: 0
|
auto_promote: 0
|
||||||
|
|
||||||
fares:
|
|
||||||
- id: 1
|
|
||||||
code: Y
|
|
||||||
name: Economy
|
|
||||||
price: 100
|
|
||||||
capacity: 200
|
|
||||||
- id: 2
|
|
||||||
code: B
|
|
||||||
name: Business
|
|
||||||
price: 500
|
|
||||||
capacity: 10
|
|
||||||
- id: 3
|
|
||||||
code: F
|
|
||||||
name: First-Class
|
|
||||||
price: 800
|
|
||||||
capacity: 5
|
|
||||||
|
|
||||||
# add a few mods to aircraft and fares
|
|
||||||
subfleet_fare:
|
|
||||||
|
|
||||||
# Fare classes on the 747
|
|
||||||
- subfleet_id: 1
|
|
||||||
fare_id: 1
|
|
||||||
price: 200
|
|
||||||
capacity: 400
|
|
||||||
- subfleet_id: 1
|
|
||||||
fare_id: 2
|
|
||||||
capacity: 20
|
|
||||||
- subfleet_id: 1
|
|
||||||
fare_id: 3
|
|
||||||
price: 1000
|
|
||||||
capacity: 10
|
|
||||||
|
|
||||||
# Fare classes on the 777
|
|
||||||
- subfleet_id: 2
|
|
||||||
fare_id: 1
|
|
||||||
- subfleet_id: 2
|
|
||||||
fare_id: 3
|
|
||||||
capacity: 10
|
|
||||||
|
|
||||||
subfleet_flight:
|
|
||||||
- subfleet_id: 1
|
|
||||||
flight_id: 1
|
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Tests\Traits;
|
|
||||||
|
|
||||||
use App\Models\Flight;
|
|
||||||
use Faker\Factory;
|
|
||||||
|
|
||||||
trait FixtureDataLoader {
|
|
||||||
|
|
||||||
public static $airports = ['KAUS', 'KJFK', 'KSFO', 'OPKC', 'OMDB', 'KLGA'];
|
|
||||||
|
|
||||||
public function apiHeaders()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'Authorization' => 'testadminapikey'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create new ID of integer type
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
protected function create_id_int()
|
|
||||||
{
|
|
||||||
return random_int(1, 10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new ID
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
protected function create_id_hash()
|
|
||||||
{
|
|
||||||
$hashids = new Hashids('', 12);
|
|
||||||
$mt = str_replace('.', '', microtime(true));
|
|
||||||
$id = $hashids->encode($mt);
|
|
||||||
return $id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dynamically apply options to a model
|
|
||||||
* @param $model
|
|
||||||
* @param array $options
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
protected function apply_options($model, array $options)
|
|
||||||
{
|
|
||||||
foreach ($options as $key => $value) {
|
|
||||||
$model->{$key} = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
$model->save();
|
|
||||||
return $model;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a flight
|
|
||||||
* @param array $options
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function addFlight(array $options=[])
|
|
||||||
{
|
|
||||||
$faker = Factory::create();
|
|
||||||
$options = array_merge([
|
|
||||||
'id' => $this->create_id_hash(),
|
|
||||||
'flight_number' => $faker->numberBetween(),
|
|
||||||
'airline_id' => 1,
|
|
||||||
'dpt_airport_id' => $faker->randomElement(self::$airports),
|
|
||||||
'arr_airport_id' => $faker->randomElement(self::$airports),
|
|
||||||
], $options);
|
|
||||||
|
|
||||||
$flight = new Flight();
|
|
||||||
$flight = $this->apply_options($flight, $options);
|
|
||||||
$flight->subfleets()->syncWithoutDetaching([1]);
|
|
||||||
|
|
||||||
return $flight;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user