fix enrollment logic, add financial aid, fix class distribution
Tests / PHPUnit (push) Failing after 1m6s

This commit is contained in:
root
2026-08-15 15:07:16 -04:00
parent c12bb59372
commit 4603d9ced2
95 changed files with 6892 additions and 1295 deletions
@@ -3,9 +3,9 @@
namespace Tests\App\Libraries;
use App\Libraries\Tuition\NewTuitionCalculatorService;
use CodeIgniter\Test\CIUnitTestCase;
use PHPUnit\Framework\TestCase;
class NewTuitionCalculatorServiceTest extends CIUnitTestCase
class NewTuitionCalculatorServiceTest extends TestCase
{
public function testFamilyDiscountsApplyByStudentPosition(): void
{
@@ -17,17 +17,17 @@ class NewTuitionCalculatorServiceTest extends CIUnitTestCase
['student_id' => 2, 'student_name' => 'Second', 'grade_level' => '2'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '350.00',
'new_tuition_second_student_discount' => '50.00',
'new_tuition_third_student_discount' => '50.00',
'new_tuition_fourth_plus_discount' => '100.00',
'new_tuition_full_amount' => '380.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('1200.00', $result['total']);
$this->assertSame('350.00', $result['details'][0]['amount']);
$this->assertSame('300.00', $result['details'][1]['amount']);
$this->assertSame('300.00', $result['details'][2]['amount']);
$this->assertSame('250.00', $result['details'][3]['amount']);
$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
@@ -37,22 +37,19 @@ class NewTuitionCalculatorServiceTest extends CIUnitTestCase
['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'],
['student_id' => 4, 'student_name' => 'Four', 'grade_level' => '4'],
['student_id' => 5, 'student_name' => 'Five', 'grade_level' => '5'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '75.00',
'new_tuition_second_student_discount' => '50.00',
'new_tuition_third_student_discount' => '50.00',
'new_tuition_fourth_plus_discount' => '100.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('125.00', $result['total']);
$this->assertSame('0.00', $result['details'][3]['amount']);
$this->assertSame('0.00', $result['details'][4]['amount']);
$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 testYouthStudentsUseSeparateUnitPriceWithoutAffectingRegularDiscountOrder(): void
public function testYouthStudentsUseTheSameFamilyTuitionRule(): void
{
$service = new NewTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
@@ -61,19 +58,31 @@ class NewTuitionCalculatorServiceTest extends CIUnitTestCase
['student_id' => 2, 'student_name' => 'Regular Two', 'grade_level' => '5'],
], [
'grade_fee' => 9,
'new_tuition_full_amount' => '370.00',
'new_tuition_youth_amount' => '200.00',
'new_tuition_second_student_discount' => '150.00',
'new_tuition_third_student_discount' => '150.00',
'new_tuition_fourth_plus_discount' => '150.00',
'new_tuition_full_amount' => '380.00',
'new_tuition_second_student_discount' => '100.00',
]);
$this->assertSame('790.00', $result['total']);
$this->assertSame('new_first_student_full_amount', $result['details'][0]['rule']);
$this->assertSame('370.00', $result['details'][0]['amount']);
$this->assertSame('new_second_student_discount', $result['details'][1]['rule']);
$this->assertSame('220.00', $result['details'][1]['amount']);
$this->assertSame('new_youth_unit_price', $result['details'][2]['rule']);
$this->assertSame('200.00', $result['details'][2]['amount']);
$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']);
}
}
@@ -3,11 +3,11 @@
namespace Tests\App\Libraries;
use App\Libraries\Tuition\OldTuitionCalculatorService;
use CodeIgniter\Test\CIUnitTestCase;
use PHPUnit\Framework\TestCase;
class OldTuitionCalculatorServiceTest extends CIUnitTestCase
class OldTuitionCalculatorServiceTest extends TestCase
{
public function testRegularAndYouthStudentsUseLegacyRules(): void
public function testAllStudentsUseTheSameFirstAndAdditionalFeeRule(): void
{
$service = new OldTuitionCalculatorService();
$result = $service->calculateFamilyTuition([
@@ -16,14 +16,16 @@ class OldTuitionCalculatorServiceTest extends CIUnitTestCase
['student_id' => 2, 'student_name' => 'Second Regular', 'grade_level' => '5'],
], [
'grade_fee' => 9,
'first_student_fee' => '350.00',
'second_student_fee' => '200.00',
'youth_fee' => '180.00',
'first_student_fee' => '380.00',
'second_student_fee' => '280.00',
]);
$this->assertSame('730.00', $result['total']);
$this->assertSame('940.00', $result['total']);
$this->assertSame('old_first_student_fee', $result['details'][0]['rule']);
$this->assertSame('old_second_student_fee', $result['details'][1]['rule']);
$this->assertSame('old_youth_fee', $result['details'][2]['rule']);
$this->assertSame('380.00', $result['details'][0]['amount']);
$this->assertSame('old_additional_student_fee', $result['details'][1]['rule']);
$this->assertSame('280.00', $result['details'][1]['amount']);
$this->assertSame('old_additional_student_fee', $result['details'][2]['rule']);
$this->assertSame('280.00', $result['details'][2]['amount']);
}
}
@@ -56,12 +56,9 @@ class TuitionForecastServiceTest extends CIUnitTestCase
'grade_fee' => 9,
'first_student_fee' => '350.00',
'second_student_fee' => '200.00',
'youth_fee' => '200.00',
'youth_fee' => '350.00',
'new_tuition_full_amount' => $this->unitPriceOverride ?? '350.00',
'new_tuition_youth_amount' => $this->youthUnitPriceOverride ?? '200.00',
'new_tuition_second_student_discount' => '50.00',
'new_tuition_third_student_discount' => '50.00',
'new_tuition_fourth_plus_discount' => '100.00',
'new_tuition_second_student_discount' => '100.00',
];
}
};
@@ -70,18 +67,17 @@ class TuitionForecastServiceTest extends CIUnitTestCase
'include_payment_pending' => true,
'include_withdrawn_mode' => 'refund_deadline',
'unit_price' => '400.00',
'youth_unit_price' => '200.00',
]);
$this->assertSame(1, $result['summary']['family_count']);
$this->assertSame(4, $result['summary']['student_count']);
$this->assertSame(3, $result['summary']['billable_student_count']);
$this->assertSame('750.00', $result['summary']['old_projected_tuition']);
$this->assertSame('950.00', $result['summary']['new_projected_tuition']);
$this->assertSame('1000.00', $result['summary']['new_projected_tuition']);
$this->assertSame('750.00', $result['summary']['old_projected_income']);
$this->assertSame('950.00', $result['summary']['new_projected_income']);
$this->assertSame('1000.00', $result['summary']['new_projected_income']);
$this->assertSame('400.00', $result['summary']['unit_price']);
$this->assertSame('200.00', $result['summary']['youth_unit_price']);
$this->assertSame('400.00', $result['summary']['youth_unit_price']);
$this->assertSame('event_only', $result['families'][0]['student_details'][3]['excluded_reason']);
}
}