Generalize per-vehicle-option booking rules to Front Seat too

Front Seat previously had a hardcoded max-per-booking check with no enable
toggle; now every Vehicle Option (front_seat/back_seat/whole_vehicle) gets
the same config-driven pair — an on/off toggle and a max passenger_count —
surfaced via new BOOKING_*_ENABLED/BOOKING_*_MAX_PER_BOOKING env vars,
editable from ManageAppSettings, and exposed on route pricing as
max_per_booking.
This commit is contained in:
Nyan Lin Paing
2026-08-30 15:45:27 +07:00
parent 914b7f97f3
commit bebcab88fa
11 changed files with 175 additions and 97 deletions
@@ -40,9 +40,12 @@ test('a super_admin can view and save app settings, writing them to .env', funct
'support_phone' => '+95912345678',
'timezone' => 'Asia/Yangon',
'currency' => 'MMK',
'back_seat_enabled' => false,
'whole_vehicle_enabled' => true,
'front_seat_enabled' => false,
'front_seat_max_per_booking' => 2,
'back_seat_enabled' => false,
'back_seat_max_per_booking' => 5,
'whole_vehicle_enabled' => true,
'whole_vehicle_max_per_booking' => 6,
'booking_admin_emails' => ['ops@evbooking.test', 'dispatch@evbooking.test'],
'sms_enabled' => true,
'sms_server' => 'https://sms.example.test/send',
@@ -59,9 +62,12 @@ test('a super_admin can view and save app settings, writing them to .env', funct
->toContain('SUPPORT_EMAIL=help@evbooking.test')
->toContain('APP_TIMEZONE=Asia/Yangon')
->toContain('APP_CURRENCY=MMK')
->toContain('BOOKING_BACK_SEAT_ENABLED=false')
->toContain('BOOKING_WHOLE_VEHICLE_ENABLED=true')
->toContain('BOOKING_FRONT_SEAT_ENABLED=false')
->toContain('BOOKING_FRONT_SEAT_MAX_PER_BOOKING=2')
->toContain('BOOKING_BACK_SEAT_ENABLED=false')
->toContain('BOOKING_BACK_SEAT_MAX_PER_BOOKING=5')
->toContain('BOOKING_WHOLE_VEHICLE_ENABLED=true')
->toContain('BOOKING_WHOLE_VEHICLE_MAX_PER_BOOKING=6')
->toContain('BOOKING_ADMIN_EMAILS=ops@evbooking.test,dispatch@evbooking.test')
->toContain('SMS_ENABLED=true')
->toContain('SMS_SERVER=https://sms.example.test/send')
@@ -80,13 +86,17 @@ test('sms server and token are required once sms is enabled', function () {
->assertHasFormErrors(['sms_server', 'sms_token']);
});
test('front seat max per booking must be at least 1', function () {
test('max per booking fields must be at least 1', function (string $field) {
$superAdmin = User::factory()->create();
$superAdmin->assignRole('super_admin');
$this->actingAs($superAdmin);
Livewire::test(ManageAppSettings::class)
->fillForm(['front_seat_max_per_booking' => 0])
->fillForm([$field => 0])
->call('save')
->assertHasFormErrors(['front_seat_max_per_booking']);
});
->assertHasFormErrors([$field]);
})->with([
'front_seat_max_per_booking',
'back_seat_max_per_booking',
'whole_vehicle_max_per_booking',
]);