Allow setting percent for fare overrides against base fare #125

This commit is contained in:
Nabeel Shahzad
2018-02-23 15:12:09 -06:00
parent dd144cc9bc
commit d5aef6fb87
7 changed files with 276 additions and 75 deletions

View File

@@ -1,25 +1,28 @@
<?php
use App\Services\FareService;
use App\Support\Math;
class FinanceTest extends TestCase
{
protected $ac_svc,
$ICAO = 'B777';
$ICAO = 'B777',
$fareSvc;
public function setUp()
{
parent::setUp();
$this->addData('base');
$this->fareSvc = app(FareService::class);
}
public function testFlightFaresNoOverride()
{
$fare_svc = app('App\Services\FareService');
$flight = factory(App\Models\Flight::class)->create();
$fare = factory(App\Models\Fare::class)->create();
$fare_svc->setForFlight($flight, $fare);
$subfleet_fares = $fare_svc->getForFlight($flight);
$this->fareSvc->setForFlight($flight, $fare);
$subfleet_fares = $this->fareSvc->getForFlight($flight);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals($fare->price, $subfleet_fares->get(0)->price);
@@ -28,31 +31,59 @@ class FinanceTest extends TestCase
#
# set an override now
#
$fare_svc->setForFlight($flight, $fare, [
$this->fareSvc->setForFlight($flight, $fare, [
'price' => 50, 'capacity' => 400
]);
# look for them again
$subfleet_fares = $fare_svc->getForFlight($flight);
$subfleet_fares = $this->fareSvc->getForFlight($flight);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals(50, $subfleet_fares[0]->price);
$this->assertEquals(400, $subfleet_fares[0]->capacity);
# delete
$fare_svc->delFareFromFlight($flight, $fare);
$this->assertCount(0, $fare_svc->getForFlight($flight));
$this->fareSvc->delFareFromFlight($flight, $fare);
$this->assertCount(0, $this->fareSvc->getForFlight($flight));
}
/**
* Assign percentage values and make sure they're valid
*/
public function testFlightFareOverrideAsPercent()
{
$flight = factory(App\Models\Flight::class)->create();
$fare = factory(App\Models\Fare::class)->create();
$percent_incr = '20%';
$percent_decr = '-20%';
$percent_200 = '200%';
$new_price = Math::addPercent($fare->price, $percent_incr);
$new_cost = Math::addPercent($fare->cost, $percent_decr);
$new_capacity = Math::addPercent($fare->capacity, $percent_200);
$this->fareSvc->setForFlight($flight, $fare, [
'price' => $percent_incr,
'cost' => $percent_decr,
'capacity' => $percent_200,
]);
$ac_fares = $this->fareSvc->getForFlight($flight);
$this->assertCount(1, $ac_fares);
$this->assertEquals($new_price, $ac_fares[0]->price);
$this->assertEquals($new_cost, $ac_fares[0]->cost);
$this->assertEquals($new_capacity, $ac_fares[0]->capacity);
}
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->fareSvc->setForSubfleet($subfleet, $fare);
$subfleet_fares = $this->fareSvc->getForSubfleet($subfleet);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals($fare->price, $subfleet_fares->get(0)->price);
@@ -61,34 +92,32 @@ class FinanceTest extends TestCase
#
# set an override now
#
$fare_svc->setForSubfleet($subfleet, $fare, [
$this->fareSvc->setForSubfleet($subfleet, $fare, [
'price' => 50, 'capacity' => 400
]);
# look for them again
$subfleet_fares = $fare_svc->getForSubfleet($subfleet);
$subfleet_fares = $this->fareSvc->getForSubfleet($subfleet);
$this->assertCount(1, $subfleet_fares);
$this->assertEquals(50, $subfleet_fares[0]->price);
$this->assertEquals(400, $subfleet_fares[0]->capacity);
# delete
$fare_svc->delFareFromSubfleet($subfleet, $fare);
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
$this->fareSvc->delFareFromSubfleet($subfleet, $fare);
$this->assertCount(0, $this->fareSvc->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, [
$this->fareSvc->setForSubfleet($subfleet, $fare, [
'price' => 50, 'capacity' => 400
]);
$ac_fares = $fare_svc->getForSubfleet($subfleet);
$ac_fares = $this->fareSvc->getForSubfleet($subfleet);
$this->assertCount(1, $ac_fares);
$this->assertEquals(50, $ac_fares[0]->price);
@@ -98,18 +127,48 @@ class FinanceTest extends TestCase
# update the override to a different amount and make sure it updates
#
$fare_svc->setForSubfleet($subfleet, $fare, [
$this->fareSvc->setForSubfleet($subfleet, $fare, [
'price' => 150, 'capacity' => 50
]);
$ac_fares = $fare_svc->getForSubfleet($subfleet);
$ac_fares = $this->fareSvc->getForSubfleet($subfleet);
$this->assertCount(1, $ac_fares);
$this->assertEquals(150, $ac_fares[0]->price);
$this->assertEquals(50, $ac_fares[0]->capacity);
# delete
$fare_svc->delFareFromSubfleet($subfleet, $fare);
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
$this->fareSvc->delFareFromSubfleet($subfleet, $fare);
$this->assertCount(0, $this->fareSvc->getForSubfleet($subfleet));
}
/**
* Assign percentage values and make sure they're valid
*/
public function testSubfleetFareOverrideAsPercent()
{
$subfleet = factory(App\Models\Subfleet::class)->create();
$fare = factory(App\Models\Fare::class)->create();
$percent_incr = '20%';
$percent_decr = '-20%';
$percent_200 = '200%';
$new_price = Math::addPercent($fare->price, $percent_incr);
$new_cost = Math::addPercent($fare->cost, $percent_decr);
$new_capacity = Math::addPercent($fare->capacity, $percent_200);
$this->fareSvc->setForSubfleet($subfleet, $fare, [
'price' => $percent_incr,
'cost' => $percent_decr,
'capacity' => $percent_200,
]);
$ac_fares = $this->fareSvc->getForSubfleet($subfleet);
$this->assertCount(1, $ac_fares);
$this->assertEquals($new_price, $ac_fares[0]->price);
$this->assertEquals($new_cost, $ac_fares[0]->cost);
$this->assertEquals($new_capacity, $ac_fares[0]->capacity);
}
}

33
tests/MathTest.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
use App\Support\Math;
class MathTest extends TestCase
{
public function setUp() {
}
/**
* Test adding/subtracting a percentage
*/
public function testAddPercent()
{
$tests = [
['expected' => 112, 'fn' => Math::addPercent(100, 12)],
['expected' => 112, 'fn' => Math::addPercent(100, '12')],
['expected' => 112, 'fn' => Math::addPercent(100, '12%')],
['expected' => 112, 'fn' => Math::addPercent(100, '12 %')],
['expected' => 112, 'fn' => Math::addPercent('100 ', '12')],
['expected' => 112.5, 'fn' => Math::addPercent('100', '12.5')],
['expected' => 88, 'fn' => Math::addPercent('100', -12)],
['expected' => 88, 'fn' => Math::addPercent('100', '-12')],
['expected' => 88, 'fn' => Math::addPercent('100', '-12 %')],
['expected' => 88, 'fn' => Math::addPercent('100', '-12%')],
];
foreach($tests as $test) {
$this->assertEquals($test['expected'], $test['fn']);
}
}
}