Make sure proper fares are returned from the API #899
This commit is contained in:
@@ -16,6 +16,7 @@ use App\Models\Subfleet;
|
||||
use App\Models\User;
|
||||
use App\Repositories\ExpenseRepository;
|
||||
use App\Repositories\JournalRepository;
|
||||
use App\Services\BidService;
|
||||
use App\Services\FareService;
|
||||
use App\Services\Finance\PirepFinanceService;
|
||||
use App\Services\FleetService;
|
||||
@@ -235,12 +236,130 @@ class FinanceTest extends TestCase
|
||||
$this->assertEquals($fare->capacity, $subfleet_fares->get(0)->capacity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that the API is returning the fares properly for a subfleet on a flight
|
||||
* https://github.com/nabeelio/phpvms/issues/899
|
||||
*/
|
||||
public function testFlightFaresOverAPI()
|
||||
{
|
||||
$this->updateSetting('pireps.only_aircraft_at_dpt_airport', false);
|
||||
$this->updateSetting('pireps.restrict_aircraft_to_rank', false);
|
||||
|
||||
$this->user = factory(User::class)->create();
|
||||
|
||||
/** @var Flight $flight */
|
||||
$flight = factory(Flight::class)->create();
|
||||
|
||||
/** @var Subfleet $subfleet */
|
||||
$subfleet = factory(Subfleet::class)->create();
|
||||
$this->fleetSvc->addSubfleetToFlight($subfleet, $flight);
|
||||
|
||||
/** @var Fare $fare */
|
||||
$fare = factory(Fare::class)->create();
|
||||
|
||||
$this->fareSvc->setForFlight($flight, $fare);
|
||||
$flight_fares = $this->fareSvc->getForFlight($flight);
|
||||
|
||||
$this->assertCount(1, $flight_fares);
|
||||
$this->assertEquals($fare->price, $flight_fares->get(0)->price);
|
||||
$this->assertEquals($fare->capacity, $flight_fares->get(0)->capacity);
|
||||
|
||||
//
|
||||
// set an override now (but on the flight)
|
||||
//
|
||||
$this->fareSvc->setForFlight($flight, $fare, ['price' => 50]);
|
||||
|
||||
$req = $this->get('/api/flights/'.$flight->id);
|
||||
$req->assertStatus(200);
|
||||
|
||||
$body = $req->json()['data'];
|
||||
$this->assertEquals($flight->id, $body['id']);
|
||||
$this->assertCount(1, $body['subfleets']);
|
||||
$this->assertEquals(50, $body['fares'][0]['price']);
|
||||
$this->assertEquals($fare->capacity, $body['fares'][0]['capacity']);
|
||||
}
|
||||
|
||||
public function testFlightFaresOverAPIOnUserBids()
|
||||
{
|
||||
$this->updateSetting('pireps.only_aircraft_at_dpt_airport', false);
|
||||
$this->updateSetting('pireps.restrict_aircraft_to_rank', false);
|
||||
|
||||
/** @var BidService $bidSvc */
|
||||
$bidSvc = app(BidService::class);
|
||||
|
||||
$this->user = factory(User::class)->create();
|
||||
|
||||
/** @var Flight $flight */
|
||||
$flight = factory(Flight::class)->create();
|
||||
|
||||
/** @var Subfleet $subfleet */
|
||||
$subfleet = factory(Subfleet::class)->create();
|
||||
$this->fleetSvc->addSubfleetToFlight($subfleet, $flight);
|
||||
|
||||
/** @var Fare $fare */
|
||||
$fare = factory(Fare::class)->create();
|
||||
|
||||
$this->fareSvc->setForFlight($flight, $fare);
|
||||
$flight_fares = $this->fareSvc->getForFlight($flight);
|
||||
|
||||
$this->assertCount(1, $flight_fares);
|
||||
$this->assertEquals($fare->price, $flight_fares->get(0)->price);
|
||||
$this->assertEquals($fare->capacity, $flight_fares->get(0)->capacity);
|
||||
|
||||
//
|
||||
// set an override now (but on the flight)
|
||||
//
|
||||
$this->fareSvc->setForFlight($flight, $fare, ['price' => 50]);
|
||||
$bid = $bidSvc->addBid($flight, $this->user);
|
||||
|
||||
$req = $this->get('/api/user/bids');
|
||||
$req->assertStatus(200);
|
||||
|
||||
$body = $req->json()['data'];
|
||||
$this->assertEquals($flight->id, $body[0]['flight_id']);
|
||||
$this->assertCount(1, $body[0]['flight']['subfleets']);
|
||||
$this->assertEquals(50, $body[0]['flight']['fares'][0]['price']);
|
||||
$this->assertEquals($fare->capacity, $body[0]['flight']['fares'][0]['capacity']);
|
||||
}
|
||||
|
||||
public function testSubfleetFaresOverAPI()
|
||||
{
|
||||
$this->updateSetting('pireps.only_aircraft_at_dpt_airport', false);
|
||||
$this->updateSetting('pireps.restrict_aircraft_to_rank', false);
|
||||
|
||||
/**
|
||||
* Add a user and flights
|
||||
*/
|
||||
$this->user = factory(User::class)->create();
|
||||
$flight = $this->addFlight($this->user);
|
||||
|
||||
/** @var FareService $fare_svc */
|
||||
$fare_svc = app(FareService::class);
|
||||
|
||||
/** @var \App\Models\Fare $fare */
|
||||
$fare = factory(Fare::class)->create();
|
||||
$fare_svc->setForSubfleet($flight->subfleets[0], $fare, ['price' => 50]);
|
||||
|
||||
// Get from API
|
||||
$req = $this->get('/api/flights/'.$flight->id);
|
||||
$req->assertStatus(200);
|
||||
|
||||
$body = $req->json()['data'];
|
||||
$this->assertEquals($flight->id, $body['id']);
|
||||
$this->assertCount(1, $body['subfleets']);
|
||||
$this->assertEquals(50, $body['subfleets'][0]['fares'][0]['price']);
|
||||
$this->assertEquals($fare->capacity, $body['subfleets'][0]['fares'][0]['capacity']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign percentage values and make sure they're valid
|
||||
*/
|
||||
public function testFlightFareOverrideAsPercent()
|
||||
{
|
||||
/** @var Flight $flight */
|
||||
$flight = factory(Flight::class)->create();
|
||||
|
||||
/** @var \App\Models\Fare $fare */
|
||||
$fare = factory(Fare::class)->create();
|
||||
|
||||
$percent_incr = '20%';
|
||||
|
||||
@@ -33,50 +33,6 @@ class FlightTest extends TestCase
|
||||
$this->settingsRepo = app(SettingRepository::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a single flight
|
||||
*
|
||||
* @param $user
|
||||
* @param array $flight_properties
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function addFlight($user, $flight_properties = [])
|
||||
{
|
||||
$opts = array_merge([
|
||||
'airline_id' => $user->airline_id,
|
||||
], $flight_properties);
|
||||
|
||||
$flight = factory(Flight::class)->create($opts);
|
||||
|
||||
$flight->subfleets()->syncWithoutDetaching([
|
||||
factory(Subfleet::class)->create([
|
||||
'airline_id' => $user->airline_id,
|
||||
])->id,
|
||||
]);
|
||||
|
||||
return $flight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a given number of flights for a subfleet
|
||||
*
|
||||
* @param $subfleet
|
||||
* @param $num_flights
|
||||
*
|
||||
* @return \App\Models\Flight[]
|
||||
*/
|
||||
public function addFlightsForSubfleet($subfleet, $num_flights)
|
||||
{
|
||||
return factory(Flight::class, $num_flights)->create([
|
||||
'airline_id' => $subfleet->airline->id,
|
||||
])->each(function (Flight $f) use ($subfleet) {
|
||||
$f->subfleets()->syncWithoutDetaching([
|
||||
$subfleet->id,
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Test adding a flight and also if there are duplicates
|
||||
*/
|
||||
@@ -468,7 +424,11 @@ class FlightTest extends TestCase
|
||||
public function testFlightSearchApiDistance()
|
||||
{
|
||||
$total_flights = 10;
|
||||
|
||||
/** @var \App\Models\User user */
|
||||
$this->user = factory(User::class)->create();
|
||||
|
||||
/** @var \App\Models\Flight $flights */
|
||||
$flights = factory(Flight::class, $total_flights)->create([
|
||||
'airline_id' => $this->user->airline_id,
|
||||
]);
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace Tests;
|
||||
|
||||
use App\Models\Fare;
|
||||
use App\Models\Subfleet;
|
||||
use App\Services\FareService;
|
||||
|
||||
class SubfleetTest extends TestCase
|
||||
@@ -19,9 +18,15 @@ class SubfleetTest extends TestCase
|
||||
|
||||
public function testSubfleetFaresNoOverride()
|
||||
{
|
||||
/** @var FareService $fare_svc */
|
||||
$fare_svc = app(FareService::class);
|
||||
|
||||
$subfleet = factory(Subfleet::class)->create();
|
||||
$subfleet_aircraft = $this->createSubfleetWithAircraft(1);
|
||||
|
||||
/** @var \App\Models\Subfleet $subfleet */
|
||||
$subfleet = $subfleet_aircraft['subfleet'];
|
||||
|
||||
/** @var \App\Models\Fare $fare */
|
||||
$fare = factory(Fare::class)->create();
|
||||
|
||||
$fare_svc->setForSubfleet($subfleet, $fare);
|
||||
@@ -49,40 +54,4 @@ class SubfleetTest extends TestCase
|
||||
$fare_svc->delFareFromSubfleet($subfleet, $fare);
|
||||
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
|
||||
}
|
||||
|
||||
public function testSubfleetFaresOverride()
|
||||
{
|
||||
$fare_svc = app(FareService::class);
|
||||
|
||||
$subfleet = factory(Subfleet::class)->create();
|
||||
$fare = factory(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->delFareFromSubfleet($subfleet, $fare);
|
||||
$this->assertCount(0, $fare_svc->getForSubfleet($subfleet));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Tests;
|
||||
|
||||
use App\Models\Aircraft;
|
||||
use App\Models\Flight;
|
||||
use App\Models\Subfleet;
|
||||
use App\Models\User;
|
||||
use Exception;
|
||||
@@ -74,6 +75,49 @@ trait TestData
|
||||
return $rank;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a single flight
|
||||
*
|
||||
* @param $user
|
||||
* @param array $flight_properties
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function addFlight($user, $flight_properties = [])
|
||||
{
|
||||
$opts = array_merge([
|
||||
'airline_id' => $user->airline_id,
|
||||
], $flight_properties);
|
||||
|
||||
$flight = factory(Flight::class)->create($opts);
|
||||
|
||||
$flight->subfleets()->syncWithoutDetaching([
|
||||
factory(Subfleet::class)->create([
|
||||
'airline_id' => $user->airline_id,
|
||||
])->id,
|
||||
]);
|
||||
|
||||
return $flight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a given number of flights for a subfleet
|
||||
*
|
||||
* @param $subfleet
|
||||
* @param $num_flights
|
||||
*
|
||||
* @return \App\Models\Flight[]
|
||||
*/
|
||||
public function addFlightsForSubfleet($subfleet, $num_flights)
|
||||
{
|
||||
return factory(Flight::class, $num_flights)->create([
|
||||
'airline_id' => $subfleet->airline->id,
|
||||
])->each(function (Flight $f) use ($subfleet) {
|
||||
$f->subfleets()->syncWithoutDetaching([$subfleet->id]);
|
||||
$f->refresh();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a subfleet with a number of aircraft assigned
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user