Fix and enable Subfleet/Fare tests and factories

This commit is contained in:
Nabeel Shahzad 2017-12-13 11:29:14 -06:00
parent 55250b8789
commit ab75ef7cf8
14 changed files with 126 additions and 352 deletions

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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)) {

View 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),
];
});

View File

@ -1 +0,0 @@
<?php

View File

@ -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.'
);
}
}

View File

@ -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
View 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));
}
}

View File

@ -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

View File

@ -1,8 +0,0 @@
airlines:
- id: 1
icao: VMS
iata: VM
name: phpvms airlines
active: 1
created_at: now
updated_at: now

View File

@ -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

View File

@ -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

View File

@ -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;
}
}