Fix and enable Subfleet/Fare tests and factories
This commit is contained in:
parent
55250b8789
commit
ab75ef7cf8
@ -1,6 +1,6 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="AircraftTest" 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" />
|
||||
<configuration default="false" name="SubfleetTest" type="PHPUnitRunConfigurationType" factoryName="PHPUnit" singleton="true">
|
||||
<TestRunner class="SubfleetTest" configuration_file="$PROJECT_DIR$/phpunit.xml" file="$PROJECT_DIR$/tests/SubfleetTest.php" scope="Class" use_alternative_configuration_file="true" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
@ -240,7 +240,7 @@ class SubfleetController extends BaseController
|
||||
*/
|
||||
if ($request->isMethod('post')) {
|
||||
$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
|
||||
@ -248,7 +248,7 @@ class SubfleetController extends BaseController
|
||||
$override = [];
|
||||
$fare = $this->fareRepo->findWithoutFail($request->fare_id);
|
||||
$override[$request->name] = $request->value;
|
||||
$fare_svc->setForAircraft($subfleet, $fare, $override);
|
||||
$fare_svc->setForSubfleet($subfleet, $fare, $override);
|
||||
}
|
||||
|
||||
// dissassociate fare from teh aircraft
|
||||
|
@ -15,41 +15,29 @@ class Fare extends Model
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
public $fillable
|
||||
= [
|
||||
'code',
|
||||
'name',
|
||||
'price',
|
||||
'cost',
|
||||
'notes',
|
||||
'active',
|
||||
];
|
||||
public $fillable = [
|
||||
'code',
|
||||
'name',
|
||||
'price',
|
||||
'cost',
|
||||
'capacity',
|
||||
'notes',
|
||||
'active',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be casted to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts
|
||||
= [
|
||||
'code' => 'string',
|
||||
'name' => 'string',
|
||||
'price' => 'float',
|
||||
'cost' => 'float',
|
||||
'notes' => 'string',
|
||||
'active' => 'boolean',
|
||||
];
|
||||
protected $casts = [
|
||||
'code' => 'string',
|
||||
'name' => 'string',
|
||||
'price' => 'float',
|
||||
'cost' => 'float',
|
||||
'capacity' => 'integer',
|
||||
'active' => 'boolean',
|
||||
];
|
||||
|
||||
/**
|
||||
* Validation rules
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $rules
|
||||
= [
|
||||
'code' => 'required',
|
||||
'name' => 'required',
|
||||
];
|
||||
public static $rules = [
|
||||
'code' => 'required',
|
||||
'name' => 'required',
|
||||
];
|
||||
|
||||
/**
|
||||
* any foreign keys
|
||||
|
@ -16,11 +16,8 @@ class FareService extends BaseService {
|
||||
*
|
||||
* @return Aircraft
|
||||
*/
|
||||
public function setForAircraft(
|
||||
Subfleet &$subfleet,
|
||||
Fare &$fare,
|
||||
array $override=[]
|
||||
) {
|
||||
public function setForSubfleet(Subfleet &$subfleet, Fare &$fare, array $override=[])
|
||||
{
|
||||
$subfleet->fares()->syncWithoutDetaching([$fare->id]);
|
||||
|
||||
# modify any pivot values?
|
||||
@ -40,7 +37,7 @@ class FareService extends BaseService {
|
||||
* @param Aircraft $subfleet
|
||||
* @return Fare[]
|
||||
*/
|
||||
public function getForAircraft(Subfleet &$subfleet)
|
||||
public function getForSubfleet(Subfleet &$subfleet)
|
||||
{
|
||||
$fares = $subfleet->fares->map(function($fare) {
|
||||
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()
|
||||
{
|
||||
$flight = factory(App\Models\Flight::class)->create();
|
||||
|
||||
# TODO: Add some subfleets in the setUp and assign the IDs here
|
||||
$flight->subfleets()->syncWithoutDetaching([
|
||||
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_manual: 1
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user