Files
alrahma_sunday_school/tests/app/Libraries/NewTuitionCalculatorServiceTest.php
2026-08-15 15:07:16 -04:00

89 lines
3.9 KiB
PHP

<?php
namespace Tests\App\Libraries;
use App\Libraries\Tuition\NewTuitionCalculatorService;
use PHPUnit\Framework\TestCase;
class NewTuitionCalculatorServiceTest extends TestCase
{
public function testFamilyDiscountsApplyByStudentPosition(): void
{
$service = new NewTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
['student_id' => 4, 'student_name' => 'Fourth', 'grade_level' => '4'],
['student_id' => 1, 'student_name' => 'First', 'grade_level' => '1'],
['student_id' => 3, 'student_name' => 'Third', 'grade_level' => '3'],
['student_id' => 2, 'student_name' => 'Second', 'grade_level' => '2'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '380.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('1220.00', $result['total']);
$this->assertSame('380.00', $result['details'][0]['amount']);
$this->assertSame('280.00', $result['details'][1]['amount']);
$this->assertSame('280.00', $result['details'][2]['amount']);
$this->assertSame('280.00', $result['details'][3]['amount']);
$this->assertSame('new_first_student_full_amount', $result['details'][0]['rule']);
$this->assertSame('new_additional_student_discount', $result['details'][1]['rule']);
}
public function testDiscountCannotDriveAmountBelowZero(): void
{
$service = new NewTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
['student_id' => 1, 'student_name' => 'One', 'grade_level' => '1'],
['student_id' => 2, 'student_name' => 'Two', 'grade_level' => '2'],
['student_id' => 3, 'student_name' => 'Three', 'grade_level' => '3'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '75.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('75.00', $result['total']);
$this->assertSame('75.00', $result['details'][0]['amount']);
$this->assertSame('0.00', $result['details'][1]['amount']);
$this->assertSame('0.00', $result['details'][2]['amount']);
}
public function testYouthStudentsUseTheSameFamilyTuitionRule(): void
{
$service = new NewTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
['student_id' => 3, 'student_name' => 'Youth', 'grade_level' => 'Youth 1'],
['student_id' => 1, 'student_name' => 'Regular One', 'grade_level' => '2'],
['student_id' => 2, 'student_name' => 'Regular Two', 'grade_level' => '5'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '380.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('940.00', $result['total']);
$this->assertSame('380.00', $result['details'][0]['amount']);
$this->assertSame('280.00', $result['details'][1]['amount']);
$this->assertSame('280.00', $result['details'][2]['amount']);
$this->assertSame('new_additional_student_discount', $result['details'][2]['rule']);
}
public function testGradeStudentAndYouthStudentAreTwoFamilyStudents(): void
{
$service = new NewTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
['student_id' => 1, 'student_name' => 'Grade Student', 'grade_level' => '4'],
['student_id' => 2, 'student_name' => 'Youth Student', 'grade_level' => 'Youth 1'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '380.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('660.00', $result['total']);
$this->assertSame('380.00', $result['details'][0]['amount']);
$this->assertSame('280.00', $result['details'][1]['amount']);
}
}