FAIL Tests\Unit\ApiDocsServiceTest ⨯ public bootstrap matches ci public flags 0.01s ⨯ full bootstrap enables try and welcome 0.01s FAIL Tests\Unit\ApiLoginSecurityServiceTest ✓ roles object map preserves role names 0.02s ⨯ build login response includes teacher class context 0.01s ⨯ build login response includes teacher assistant class context PASS Tests\Unit\AuthSessionServiceTest ✓ sanitize redirect relative 0.01s ✓ sanitize redirect empty ✓ sanitize rejects protocol relative PASS Tests\Unit\Http\Controllers\Api\AttendanceCommentTemplateControllerTest ✓ index returns success json 0.09s ✓ index passes active only true 0.01s ✓ show returns template 0.01s ✓ store returns created response 0.01s ✓ update returns success response 0.01s ✓ destroy returns success response 0.02s ✓ list data returns templates key 0.01s PASS Tests\Unit\Grading\ScoreValueValidatorTest ✓ blank score remains null 0.04s ✓ score must be inside range ✓ status inference preserves legacy pending behavior PASS Tests\Unit\Listeners\DeleteUnverifiedUserListenerTest ✓ listener invokes service 0.02s PASS Tests\Unit\Models\AdditionalChargeTest ✓ scope by parent term filters status and orders desc 0.04s ✓ mark applied updates status and invoice 0.01s ✓ list all for term falls back to year 0.01s ✓ list all for term filters by search query 0.01s PASS Tests\Unit\Models\AdminNotificationSubjectModelTest ✓ admin relationship returns user 0.04s ✓ timestamps are set on create 0.01s PASS Tests\Unit\Models\AttendanceCommentTemplateModelTest ✓ get active templates filters and orders 0.03s PASS Tests\Unit\Models\AttendanceDataTest ✓ get attendance by class and get attendance 0.02s ✓ unreported term rows filters unreported 0.01s ✓ get unreported absences and lates groups rows 0.01s ✓ mark reported and notified updates flags 0.01s PASS Tests\Unit\Models\AttendanceDayTest ✓ get or create draft creates once and reuses 0.28s ✓ find by section date returns model or null 0.01s ✓ submit sets submitted fields 0.01s ✓ finalize is alias to submit 0.01s ✓ publish sets published fields 0.01s ✓ reopen sets reopen fields and status 0.01s ✓ reopen rejects invalid status 0.01s ✓ is finalized true for published or legacy finalized 0.01s FAIL Tests\Unit\Models\AttendanceEmailTemplateTest ⨯ get template returns exact active variant when available 0.02s ⨯ get template falls back to default when requested variant missing 0.02s ⨯ get template ignores inactive exact variant and uses active default 0.01s ⨯ get template returns null when no active template exists 0.01s PASS Tests\Unit\Models\AttendanceRecordTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\AttendanceTrackingTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\AuthorizedUserTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\BadgePrintLogTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CalendarTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\ClassPrepAdjustmentTest ⨯ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\ClassPreparationLogTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ClassProgressAttachmentTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ClassProgressReportTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ClassSectionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ClassTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\CommunicationLogTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CompetitionClassWinnerTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CompetitionScoreTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CompetitionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CompetitionWinnerTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ConfigurationTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ContactUsTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\CurrentFlagTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\DiscountUsageTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\DiscountVoucherTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\EarlyDismissalSignatureTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\EmailTemplateTest ⨯ get template returns exact variant when active 0.02s ⨯ get template falls back to default variant 0.01s ⨯ get template ignores inactive templates and can return null 0.01s ⨯ get template prefers exact variant over default 0.01s PASS Tests\Unit\Models\EmergencyContactTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\EnrollmentTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\EventChargesTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\EventTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ExamDraftTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\ExamTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ExpenseTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\FamilyCommPrefTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\FamilyGuardianTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\FamilyStudentTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\FamilyTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\FinalExamTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\FinalScoreTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\GradingLockTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\HomeworkTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\IncidentTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\InventoryCategoryTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\InventoryItemTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\InventoryMovementTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\InvoiceEventTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\InvoiceStudentListTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\InvoiceTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\IpAttemptTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\LateSlipLogTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\LoginActivityTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ManualPaymentTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\MessageTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\MidtermExamTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\MissingScoreOverrideTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\NavItemTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\NotificationTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ParentAttendanceReportTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ParentMeetingScheduleTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ParentNotificationTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ParentTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\ParticipationTest ⨯ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\PasswordResetRequestTest ⨯ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\PasswordResetTest ⨯ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\PayPalPaymentTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PaymentErrorTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PaymentNotificationLogTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\PaymentTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PaymentTransactionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PaypalTransactionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PermissionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PlacementBatchTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PlacementLevelTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PlacementScoreTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PreferencesTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PrintRequestTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ProjectTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PromotionQueueTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\PurchaseOrderItemTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\PurchaseOrderTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\QuizTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\RefundTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ReimbursementBatchAdminFileTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ReimbursementBatchItemTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ReimbursementBatchTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\ReimbursementTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\RoleNavItemTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\RolePermissionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\RoleTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\ScoreCommentTest ⨯ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\SectionTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\SemesterScoreTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\SettingsTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StaffAttendanceTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\StaffTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StatsTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StudentAllergyTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StudentClassTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StudentMedicalConditionTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\StudentTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\SubjectCurriculumTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\TeacherClassTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\TeacherSubmissionNotificationHistoryTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\TeacherTest ⨯ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\UserNotificationTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\UserRoleTest ✓ model metadata is converted ✓ model class loads FAIL Tests\Unit\Models\UserTest ⨯ model metadata is converted ✓ model class loads ✓ password mutator preserves pbkdf2 hashes 0.62s PASS Tests\Unit\Models\WhatsappGroupLinkTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\WhatsappGroupMembershipTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Models\WhatsappInviteLogTest ✓ model metadata is converted ✓ model class loads PASS Tests\Unit\Http\Requests\AttendanceCommentTemplate\StoreAttendanceCommentTemplateRequestTest ✓ rules pass with valid data 0.01s ✓ rules fail when required fields missing 0.01s ✓ rules fail when max score less than min score 0.01s ✓ rules fail when score out of range 0.01s PASS Tests\Unit\Http\Requests\AttendanceCommentTemplate\UpdateAttendanceCommentTemplateRequestTest ✓ rules pass with partial valid data 0.01s ✓ rules pass when both scores valid 0.01s ✓ rules fail when both scores invalid relation 0.01s ✓ rules fail on invalid boolean 0.01s PASS Tests\Unit\Resources\ClassProgress\ClassProgressReportResourceTest ✓ resource has expected keys 0.02s PASS Tests\Unit\Resources\Frontend\FrontendPageResourceTest ✓ resource returns page 0.01s PASS Tests\Unit\Resources\Frontend\PageContentResourceTest ✓ resource returns content 0.01s FAIL Tests\Unit\Resources\Messaging\MessageResourceTest ⨯ resource returns expected shape 0.02s PASS Tests\Unit\Resources\Messaging\RecipientResourceTest ✓ resource returns expected shape 0.02s PASS Tests\Unit\Resources\Notifications\NotificationResourceTest ✓ resource returns expected shape 0.02s PASS Tests\Unit\Resources\Notifications\UserNotificationResourceTest ✓ resource returns expected shape 0.01s PASS Tests\Unit\Resources\Roles\PermissionResourceTest ✓ resource shape 0.02s PASS Tests\Unit\Resources\Roles\RolePermissionResourceTest ✓ resource shape 0.01s PASS Tests\Unit\Resources\Roles\RoleResourceTest ✓ resource shape 0.01s PASS Tests\Unit\Resources\Roles\UserWithRolesResourceTest ✓ resource shape 0.02s PASS Tests\Unit\Resources\Settings\SchoolCalendarEventResourceTest ✓ resource returns expected shape 0.01s PASS Tests\Unit\Resources\Settings\SettingsResourceTest ✓ resource returns expected shape 0.01s FAIL Tests\Unit\Resources\Staff\StaffResourceTest ⨯ resource returns expected shape 0.01s PASS Tests\Unit\Resources\Support\ContactMessageResourceTest ✓ resource returns expected shape 0.01s FAIL Tests\Unit\Resources\Support\SupportRequestResourceTest ⨯ resource returns expected shape 0.01s PASS Tests\Unit\Resources\Ui\UiStyleResourceTest ✓ resource returns expected shape 0.02s PASS Tests\Unit\Services\Administrator\AdminNotificationSubjectServiceTest ✓ alerts data includes admins 0.02s PASS Tests\Unit\Services\Administrator\AdminNotificationUserServiceTest ✓ fetch admin notification users excludes parents 0.02s PASS Tests\Unit\Services\Administrator\AdminPrintRecipientServiceTest ✓ data returns admins and assigned 0.02s FAIL Tests\Unit\Services\Administrator\AdministratorAbsenceServiceTest ⨯ submit requires reason 0.02s PASS Tests\Unit\Services\Administrator\AdministratorDashboardServiceTest ✓ delegates to metrics and search 0.02s FAIL Tests\Unit\Services\Administrator\AdministratorEnrollmentEventServiceTest ⨯ dispatch grouped events with empty groups 0.02s PASS Tests\Unit\Services\Administrator\AdministratorEnrollmentQueryServiceTest ✓ enrollment withdrawal data returns structure 0.01s PASS Tests\Unit\Services\Administrator\AdministratorEnrollmentRefundServiceTest ✓ process refunds reports missing invoice 0.02s PASS Tests\Unit\Services\Administrator\AdministratorEnrollmentServiceTest ✓ delegates to query and status services 0.02s PASS Tests\Unit\Services\Administrator\AdministratorEnrollmentStatusServiceTest ✓ update statuses requires payload 0.01s PASS Tests\Unit\Services\Administrator\AdministratorMetricsServiceTest ✓ metrics returns counts 0.01s PASS Tests\Unit\Services\Administrator\AdministratorNotificationServiceTest ✓ delegates to subject and print services 0.02s PASS Tests\Unit\Services\Administrator\AdministratorSharedServiceTest ✓ get previous school year 0.01s PASS Tests\Unit\Services\Administrator\AdministratorTeacherSubmissionServiceTest ✓ delegates to report and notification 0.01s PASS Tests\Unit\Services\Administrator\AdministratorUserSearchServiceTest ✓ empty query returns no results 0.01s FAIL Tests\Unit\Services\Administrator\TeacherSubmissionNotificationServiceTest ⨯ send requires targets 0.01s FAIL Tests\Unit\Services\Administrator\TeacherSubmissionReportServiceTest ⨯ report returns summary 0.01s PASS Tests\Unit\Services\Administrator\TeacherSubmissionSupportServiceTest ✓ submission status labels 0.02s ✓ build missing items 0.01s PASS Tests\Unit\Services\Assignment\AssignmentContextServiceTest ✓ get current term values 0.01s PASS Tests\Unit\Services\Assignment\AssignmentDataLoaderServiceTest ✓ load teacher classes includes teacher name 0.02s ✓ load student classes filters inactive 0.01s PASS Tests\Unit\Services\Assignment\AssignmentMetaServiceTest ✓ get school years uses fallback 0.01s ✓ get school years returns distinct sorted 0.01s ✓ first non empty returns first value 0.01s FAIL Tests\Unit\Services\Assignment\AssignmentSectionServiceTest ⨯ get section names map 0.01s FAIL Tests\Unit\Services\AssignmentServiceTest ✓ get current semester returns config value 0.02s ✓ get current school year returns config value 0.02s ⨯ get assignments overview returns grouped sections 0.02s ✓ get assignments overview uses fallback config values when metadata… 0.01s ✓ get assignments overview excludes inactive students 0.02s ⨯ get assignments overview sorts sections by name 0.01s ✓ get assignments overview collects school years descending 0.01s ✓ store assignment creates new row 0.02s ✓ store assignment updates existing row 0.03s ⨯ get class assignment data returns all sections 0.02s ✓ get class assignment data deduplicates teacher names 0.01s PASS Tests\Feature\Api\Attendance\AdminAttendanceApiControllerTest ✓ daily data returns success 0.05s PASS Tests\Unit\Services\Attendance\AttendanceAutoPublishJobServiceTest ✓ run publishes due records 0.01s PASS Tests\Unit\Services\Attendance\AttendanceAutoPublishServiceTest ✓ second sunday after end of day 0.01s ✓ second sunday backward date 0.01s PASS Tests\Unit\Services\Attendance\AttendanceCommentServiceTest ✓ comment from score uses template and name 0.01s ✓ comment from score falls back to this student 0.02s PASS Tests\Unit\Services\Attendance\AttendanceConsequenceServiceTest ✓ send follow up requires parent email 0.03s ✓ send follow up marks tracking and notifies 0.01s FAIL Tests\Unit\Services\Attendance\AttendanceDailySummaryServiceTest ⨯ send absentees summary notifies parent 0.02s PASS Tests\Unit\Services\Attendance\AttendancePolicyServiceTest ✓ teacher can edit draft 0.01s ✓ teacher cannot edit finalized 0.01s ✓ admin like by permission 0.01s ✓ can manage early dismissals for teacher 0.01s PASS Tests\Unit\Services\Attendance\AttendanceQueryServiceTest ✓ teacher grid returns section labels and grid 0.02s PASS Tests\Unit\Services\Attendance\AttendanceRecordSyncServiceTest ✓ update attendance record adjusts totals 0.02s ✓ add new attendance record creates row 0.01s FAIL Tests\Unit\Services\Attendance\AttendanceSemesterRangeServiceTest ⨯ get semester range 0.01s ✓ build sunday list returns sundays 0.01s PASS Tests\Unit\Services\Attendance\AttendanceServiceTest ✓ update attendance management throws when locked 0.02s ✓ update attendance management saves row 0.02s PASS Tests\Unit\Services\Attendance\AttendanceSummaryRebuildServiceTest ✓ rebuild inserts summary rows 0.02s FAIL Tests\Unit\Services\Attendance\LateSlipLogCommandServiceTest ⨯ delete removes log 0.01s FAIL Tests\Unit\Services\Attendance\LateSlipLogQueryServiceTest ⨯ paginate filters by date 0.01s FAIL Tests\Unit\Services\Attendance\SemesterRangeServiceTest ✓ normalize semester ⨯ get school year range ✓ build sunday list PASS Tests\Feature\Api\Attendance\StaffAttendanceApiControllerTest ✓ month data returns success 0.02s ✓ admins data returns success 0.02s PASS Tests\Unit\Services\Attendance\StaffAttendanceServiceTest ✓ month data returns sections and days 0.02s PASS Tests\Unit\Services\Attendance\StudentAttendanceWriterServiceTest ✓ resolve student school id from student 0.02s ✓ save or update updates existing and syncs record 0.01s PASS Tests\Feature\Api\Attendance\TeacherAttendanceApiControllerTest ✓ teacher grid endpoint returns success 0.02s ✓ teacher form endpoint returns success or validation message 0.02s PASS Tests\Unit\Services\Attendance\TeacherAttendanceSubmissionServiceTest ✓ submit requires attendance data 0.02s PASS Tests\Unit\Services\AttendanceManagement\AttendanceManagementServiceTest ✓ badge scan persists school year and semester for the event date 0.02s ✓ dashboard derives academic context for legacy rows and applies filt… 0.02s PASS Tests\Unit\Services\AttendanceTracking\AttendanceCaseQueryServiceTest ✓ returns not found when student missing 0.02s PASS Tests\Unit\Services\AttendanceTracking\AttendanceCommunicationSupportServiceTest ✓ compose requires student id 0.01s ✓ get violation dates for student 0.02s PASS Tests\Unit\Services\AttendanceTracking\AttendanceEmailComposerServiceTest ✓ render template replaces tokens 0.01s ✓ pick variant fallback 0.01s PASS Tests\Unit\Services\AttendanceTracking\AttendanceNotificationLogServiceTest ✓ log notification creates and updates 0.02s PASS Tests\Unit\Services\AttendanceTracking\AttendanceNotificationWorkflowServiceTest ✓ record requires parent email 0.02s PASS Tests\Unit\Services\AttendanceTracking\AttendanceParentLookupServiceTest ✓ get primary parent for student 0.01s ✓ get secondary parent falls back to parent row 0.01s PASS Tests\Unit\Services\AttendanceTracking\AttendancePendingViolationServiceTest ✓ returns error when no students 0.01s FAIL Tests\Unit\Services\AttendanceTracking\AttendanceTrackingServiceTest ⨯ service instantiates 0.01s PASS Tests\Unit\Services\AttendanceTracking\AttendanceViolationStudentResolverServiceTest ✓ resolve for school year returns students 0.02s PASS Tests\Unit\Services\AttendanceTracking\ViolationRuleEngineServiceTest ✓ school year helpers 0.01s ✓ window weeks for violation code 0.01s PASS Tests\Unit\Services\Auth\PasswordResetCleanupServiceTest ✓ cleanup removes old requests 0.02s PASS Tests\Unit\Services\Auth\PermissionCheckServiceTest ✓ has permission returns true when assigned 0.01s PASS Tests\Unit\Services\Auth\RegistrationCaptchaServiceTest ✓ generate sets cache value 0.01s ✓ verify and clear 0.02s PASS Tests\Unit\Services\Auth\RegistrationFormatterServiceTest ✓ format normalizes parent fields 0.01s ✓ format includes second parent when present 0.01s FAIL Tests\Unit\Services\Auth\RegistrationServiceTest ⨯ register creates parent user 0.02s ⨯ register rejects pending activation 0.32s PASS Tests\Unit\Services\Auth\UserRoleServiceTest ✓ has permission for crud checks roles 0.01s PASS Tests\Unit\Services\Badges\BadgeFormDataServiceTest ✓ build formats users and assigns latest class for teacherish roles 0.02s ✓ build defaults invalid active role to teacher 0.01s PASS Tests\Unit\Services\Badges\BadgePdfServiceTest ✓ generate returns pdf response and logs prints 0.10s ✓ generate returns empty state pdf when no valid users found 0.09s ✓ generate deduplicates same badge content 0.08s PASS Tests\Unit\Services\Badges\BadgePrintLogServiceTest ✓ get status normalizes ids before calling model 0.02s ✓ log normalizes ids and returns inserted count 0.01s ✓ log safely swallows exceptions and logs error 0.01s PASS Tests\Unit\Services\Badges\BadgeTextFormatterTest ✓ normalize ids filters and deduplicates 0.02s ✓ norm removes extra spaces and control chars 0.01s ✓ format role handles special words and acronyms 0.01s ✓ format roles csv formats each role 0.01s ✓ format class normalizes known values 0.01s ✓ resolve role prefers first available candidate 0.01s ✓ to pdf returns string 0.01s ✓ fit text returns size within bounds 0.01s FAIL Tests\Unit\Services\Billing\BalanceCalculationServiceTest ⨯ calculate family account applies balance formula 0.02s ✓ overpayment records account credit 0.01s ✓ student rows include event charges 0.01s FAIL Tests\Unit\Services\Billing\BillingTotalsServiceTest ⨯ event and additional subtotals 0.02s ⨯ additional subtotal by parent sums applied charges 0.01s ✓ event subtotals by student groups amounts 0.01s FAIL Tests\Unit\Services\Billing\ChargeServiceTest ✓ create extra charge blocks duplicate 0.02s ✓ create event charge blocks duplicate 0.01s ✓ create event charge succeeds 0.01s ⨯ cancel event charge zeros charge and creates credit 0.01s ✓ apply extra charge marks applied 0.02s ✓ list for parent returns both charge types 0.01s PASS Tests\Unit\Services\BroadcastEmail\BroadcastEmailComposerServiceTest ✓ sanitize removes script and events 0.01s ✓ compose replaces name when personalized 0.02s PASS Tests\Unit\Services\BroadcastEmail\BroadcastEmailRecipientServiceTest ✓ parents with emails filters missing email 0.02s ✓ recipients by ids returns names 0.02s PASS Tests\Unit\Services\BroadcastEmail\BroadcastEmailSenderOptionsServiceTest ✓ list options from env 0.02s PASS Tests\Unit\Services\CertificateAdminServiceTest ✓ dashboard groups students and uses saved decisions as source of tru… 0.02s ✓ issue certificates reuses existing record and creates new one for u… 0.02s ✓ audit log returns year summary and filtered records 0.02s PASS Tests\Unit\Services\ClassPrep\ClassRosterServiceTest ✓ list students by class 0.01s PASS Tests\Unit\Services\ClassPrep\StickerCountServiceTest ✓ list all returns totals excluding youth 0.01s ✓ list for class limits results 0.02s PASS Tests\Unit\Services\ClassPreparation\ClassPreparationAdjustmentServiceTest ✓ apply adjustments updates counts 0.01s FAIL Tests\Unit\Services\ClassPreparation\ClassPreparationAdjustmentWriterServiceTest ⨯ save adjustments persists allowed items 0.02s PASS Tests\Unit\Services\ClassPreparation\ClassPreparationCalculatorServiceTest ✓ get class level by section 0.02s ✓ calculate prep items for lower grades 0.01s PASS Tests\Unit\Services\ClassPreparation\ClassPreparationContextServiceTest ✓ has roster for semester 0.01s PASS Tests\Unit\Services\ClassPreparation\ClassPreparationInventoryServiceTest ✓ build availability uses max value 0.02s FAIL Tests\Unit\Services\ClassPreparation\ClassPreparationLogServiceTest ✓ has prep changed detects diff 0.01s ⨯ create log and get latest 0.01s FAIL Tests\Unit\Services\ClassPreparation\ClassPreparationPrintServiceTest ⨯ print prep creates log 0.02s ✓ print prep handles log failure 0.02s PASS Tests\Unit\Services\ClassPreparation\ClassPreparationRosterServiceTest ✓ get class section student counts 0.01s ✓ get student count for section 0.02s FAIL Tests\Unit\Services\ClassPreparation\ClassPreparationServiceTest ✓ list prep returns sections and totals 0.02s ⨯ mark printed creates logs 0.01s PASS Tests\Unit\Services\ClassProgress\ClassProgressAttachmentServiceTest ✓ store attachments persists records 0.04s PASS Tests\Unit\Services\ClassProgress\ClassProgressMetaServiceTest ✓ subject sections return configured values 0.01s FAIL Tests\Unit\Services\ClassProgress\ClassProgressMutationServiceTest ⨯ create reports persists multiple subjects 0.02s ⨯ update report changes status 0.02s ⨯ delete report removes record 0.01s PASS Tests\Unit\Services\ClassProgress\ClassProgressQueryServiceTest ✓ list reports filters by class section 0.02s PASS Tests\Unit\Services\ClassProgress\ClassProgressRuleServiceTest ✓ build unit chapter summary limits length ✓ ensure week end defaults to six days PASS Tests\Unit\Services\ClassSections\ClassAttendanceServiceTest ✓ get attendance payload includes students 0.02s PASS Tests\Unit\Services\ClassSections\ClassSectionCommandServiceTest ✓ create update delete 0.01s PASS Tests\Unit\Services\ClassSections\ClassSectionQueryServiceTest ✓ list filters by search 0.01s PASS Tests\Unit\Services\ClassSections\ClassSectionSeedServiceTest ✓ seed defaults creates rows 0.02s PASS Tests\Unit\Services\Communication\CommunicationTemplateServiceTest ✓ list active templates maps columns 0.01s PASS Tests\Unit\Services\CompetitionScores\CompetitionScoresSaveServiceTest ✓ filter scores rejects non integers 0.01s ✓ save scores upserts 0.02s PASS Tests\Unit\Services\Dashboard\DashboardRouteServiceTest ✓ resolve returns fallback when no roles 0.01s ✓ resolve returns dashboard route for role 0.02s FAIL Tests\Unit\Services\Discounts\DiscountApplyServiceTest ⨯ apply voucher returns error when no remaining uses 0.02s PASS Tests\Unit\Services\Email\EmailExtractorServiceTest ✓ list and compare emails 0.01s PASS Tests\Unit\Services\Email\EmailProfileServiceTest ✓ resolve profile maps aliases 0.01s ✓ env key from profile 0.01s ✓ sanitize reply to name 0.01s PASS Tests\Unit\Services\EmergencyContacts\EmergencyContactDirectoryServiceTest ✓ groups include parent students contacts and phones 0.02s PASS Tests\Unit\Services\Events\EventCategoryServiceTest ✓ categories returns list 0.02s PASS Tests\Unit\Services\Events\EventChargeQueryServiceTest ✓ list returns paginated charges 0.01s PASS Tests\Unit\Services\Events\EventChargeServiceTest ✓ seed charges creates event charges 0.01s PASS Tests\Unit\Services\Events\EventListServiceTest ✓ list filters active events 0.02s PASS Tests\Unit\Services\Events\EventManagementServiceTest ✓ update returns not found 0.01s FAIL Tests\Unit\Services\Events\EventStudentChargeServiceTest ⨯ list students with charges 0.01s PASS Tests\Unit\Services\Exams\ExamDraftTeacherServiceTest ✓ store creates draft 0.02s FAIL Tests\Unit\Services\Expenses\ExpenseReceiptServiceTest ⨯ store receipt returns filename and url 0.01s PASS Tests\Unit\Services\Expenses\ExpenseStaffServiceTest ✓ list staff users excludes parents 0.02s PASS Tests\Unit\Services\ExtraCharges\ExtraChargesMetaServiceTest ✓ get school years uses fallback 0.01s ✓ get school years merges sources 0.01s PASS Tests\Unit\Services\Families\FamilyFinanceServiceTest ✓ load financials for parents returns summary 0.01s PASS Tests\Unit\Services\Families\FamilyMutationServiceTest ✓ bootstrap creates family 0.02s ✓ attach second by email creates guardian 0.02s ✓ set primary home updates flag 0.02s PASS Tests\Unit\Services\Families\FamilyNotificationServiceTest ✓ send compose email delegates to dispatcher 0.02s PASS Tests\Unit\Services\Families\FamilyQueryServiceTest ✓ admin index returns families 0.02s ✓ search suggestions returns items 0.01s ✓ family card returns payload 0.02s PASS Tests\Unit\Services\FeeCalculationServiceTest ✓ calculate refund returns calculator amount 0.01s PASS Tests\Unit\Services\Fees\FeeGradeServiceTest ✓ grade level parsing 0.01s ✓ compare grades orders numeric then suffix 0.02s PASS Tests\Unit\Services\Fees\FeeRefundCalculatorServiceTest ✓ calculate refund caps at total paid 0.01s ✓ returns zero when parent has no payments 0.01s ✓ returns zero when no withdrawn students 0.02s ✓ withdrawn student breakdown carries assigned tuition fee 0.01s ✓ multi student family only refunds withdrawn students 0.01s ✓ withdrawal after deadline is not eligible 0.01s ✓ missing withdrawal date is skipped with reason 0.01s FAIL Tests\Unit\Services\Fees\FeeRefundDetailServiceTest ⨯ calculate refund details returns amount 0.01s PASS Tests\Unit\Services\Fees\FeeStudentFeeServiceTest ✓ total tuition fee applies tiers and youth fee 0.01s ✓ assign fees stores tuition fee and fee category on each student 0.02s ✓ calculate breakdown includes billable and non billable students 0.01s ✓ is billable and is withdrawn classifiers 0.01s PASS Tests\Unit\Services\Fees\TuitionCalculationServiceTest ✓ calculate returns family total and per student breakdown 0.02s ✓ calculate excludes non billable students from family total 0.01s ✓ calculate applies per student discount 0.01s ✓ family total helper 0.01s PASS Tests\Unit\Services\Files\ExamDraftDownloadNameServiceTest ✓ build returns slugified name 0.02s PASS Tests\Unit\Services\Files\FileServeServiceTest ✓ meta returns file metadata 0.01s ✓ serve inline returns 304 when etag matches 0.01s ✓ serve inline rejects invalid extension 0.02s PASS Tests\Unit\Services\Finance\FinancialChartServiceTest ✓ generate charts returns null in tests 0.01s PASS Tests\Unit\Services\Finance\FinancialPaymentServiceTest ✓ payment aggregates exclude void statuses 0.01s PASS Tests\Unit\Services\Finance\FinancialPdfReportServiceTest ✓ build pdf returns bytes 0.02s PASS Tests\Unit\Services\Finance\FinancialReportServiceTest ✓ report returns grouped data 0.02s PASS Tests\Unit\Services\Finance\FinancialSchoolYearServiceTest ✓ list years returns distinct sorted years 0.01s PASS Tests\Unit\Services\Finance\FinancialSummaryServiceTest ✓ summary calculates totals 0.02s PASS Tests\Unit\Services\Finance\FinancialUnpaidParentsServiceTest ✓ unpaid parents returns installment data 0.02s PASS Tests\Unit\Services\Frontend\ContactSubmissionServiceTest ✓ submit creates contact record 0.02s PASS Tests\Unit\Services\Frontend\FrontendPageServiceTest ✓ page returns payload 0.02s PASS Tests\Unit\Services\Frontend\LandingPageContextServiceTest ✓ context returns config values 0.01s PASS Tests\Unit\Services\Frontend\LandingPageParentDashboardServiceTest ✓ summary returns parent payload 0.01s PASS Tests\Unit\Services\Frontend\LandingPageRoleServiceTest ✓ resolve role returns guest when missing 0.02s ✓ resolve role returns first role 0.01s PASS Tests\Unit\Services\Frontend\LandingPageServiceTest ✓ dashboard for user returns guest 0.01s ✓ dashboard for user returns admin 0.02s PASS Tests\Unit\Services\Frontend\LandingPageTeacherSummaryServiceTest ✓ summary returns dashboard payload 0.02s PASS Tests\Unit\Services\Frontend\ProfileIconServiceTest ✓ build for user returns initials 0.02s PASS Tests\Unit\Services\Frontend\StaticPageServiceTest ✓ load returns content 0.02s ✓ load missing returns error 0.01s PASS Tests\Unit\Services\Grading\BelowSixtyEmailServiceTest ✓ send requires student id 0.01s ✓ send delivers to guardians 0.02s PASS Tests\Unit\Services\Grading\GradingBelowSixtyServiceTest ✓ list rows returns students below sixty 0.01s PASS Tests\Unit\Services\Grading\GradingLockServiceTest ✓ toggle creates lock 0.01s ✓ lock all locks sections 0.02s PASS Tests\Unit\Services\Grading\HomeworkTrackingServiceTest ✓ report returns teacher rows 0.02s PASS Tests\Unit\Services\Incidents\IncidentAnalysisServiceTest ✓ analyze groups incidents by student 0.01s PASS Tests\Unit\Services\Incidents\IncidentHistoryServiceTest ✓ processed enriches grade and updater names 0.02s PASS Tests\Unit\Services\Incidents\IncidentLookupServiceTest ✓ grade options with active students 0.01s ✓ updater name map 0.01s PASS Tests\Unit\Services\Inventory\InventoryCategoryServiceTest ✓ create category 0.02s ✓ update category 0.01s PASS Tests\Unit\Services\Inventory\InventoryItemServiceTest ✓ create creates item and movement 0.02s ✓ update updates item 0.02s PASS Tests\Unit\Services\Inventory\InventoryMovementServiceTest ✓ create movement 0.01s PASS Tests\Unit\Services\Inventory\InventorySummaryServiceTest ✓ summary returns items 0.01s PASS Tests\Unit\Services\Inventory\InventoryTeacherDistributionServiceTest ✓ form data requires teacher role 0.02s ✓ distribute success 0.02s PASS Tests\Unit\Services\Inventory\SupplierServiceTest ✓ create supplier 0.01s ✓ update supplier 0.02s PASS Tests\Unit\Services\Inventory\SupplyCategoryServiceTest ✓ create category 0.01s ✓ update category 0.01s PASS Tests\Unit\Services\Invoices\InvoiceConfigServiceTest ✓ config service reads values 0.02s PASS Tests\Unit\Services\Invoices\InvoiceGenerationServiceTest ✓ generate invoice creates new invoice 0.02s PASS Tests\Unit\Services\Invoices\InvoiceGradeServiceTest ✓ grade parsing handles common cases 0.01s ✓ compare grades orders numeric then suffix 0.02s PASS Tests\Unit\Services\Invoices\InvoiceManagementServiceTest ✓ management data returns parent invoice summary 0.02s PASS Tests\Unit\Services\Invoices\InvoicePaymentServiceTest ✓ parent invoice summary includes refunds and last payment 0.01s PASS Tests\Unit\Services\Invoices\InvoicePdfServiceTest ✓ build pdf returns bytes 0.02s PASS Tests\Unit\Services\Invoices\InvoiceServiceTest ✓ has class assignment returns true 0.02s PASS Tests\Unit\Services\Invoices\InvoiceTuitionServiceTest ✓ calculate tuition fee counts regular and youth 0.01s ✓ refund deadline includes withdrawn when passed 0.02s PASS Tests\Unit\Services\Messaging\MessageCommandServiceTest ✓ create sends message 0.02s ✓ create rejects invalid role 0.01s PASS Tests\Unit\Services\Messaging\MessageQueryServiceTest ✓ inbox filters messages 0.02s PASS Tests\Unit\Services\Messaging\MessageRecipientServiceTest ✓ teachers returns list 0.01s ✓ parents returns list 0.02s FAIL Tests\Unit\Services\Navigation\NavBuilderServiceTest ✓ save creates nav item and roles 0.02s ⨯ reorder updates sort order 0.01s PASS Tests\Unit\Services\Navigation\NavbarServiceTest ✓ get menu for roles builds tree 0.01s PASS Tests\Unit\Services\Notifications\NotificationActiveServiceTest ✓ list filters by target group 0.02s PASS Tests\Unit\Services\Notifications\NotificationCleanupServiceTest ✓ cleanup expired soft deletes rows 0.01s PASS Tests\Unit\Services\Notifications\NotificationDeletedServiceTest ✓ list returns deleted notifications 0.01s PASS Tests\Unit\Services\Notifications\NotificationDispatchServiceTest ✓ dispatch logs email and sms 0.02s PASS Tests\Unit\Services\Notifications\NotificationManagementServiceTest ✓ update modifies notification 0.01s ✓ update returns false when missing 0.01s ✓ delete and restore notification 0.02s PASS Tests\Unit\Services\Notifications\NotificationReadServiceTest ✓ mark read updates row 0.01s ✓ mark read returns false when missing 0.01s PASS Tests\Unit\Services\Notifications\NotificationRecipientServiceTest ✓ get recipients by role 0.02s FAIL Tests\Unit\Services\Notifications\NotificationSendServiceTest ⨯ send creates notification and user notifications 0.02s PASS Tests\Unit\Services\Notifications\NotificationShowServiceTest ✓ get for user returns notification 0.01s ✓ get for user returns null when missing 0.02s PASS Tests\Unit\Services\Notifications\NotificationTriggerServiceTest ✓ trigger dispatches event 0.01s ✓ to user dispatches event 0.01s PASS Tests\Unit\Services\Notifications\NotificationUserListServiceTest ✓ list filters by read status 0.02s PASS Tests\Unit\Services\Notifications\UserNotificationDispatchServiceTest ✓ notify user creates notification 0.02s ✓ notify user rejects invalid user 0.01s PASS Tests\Unit\Services\Parents\ParentAttendanceReportServiceTest ✓ form data returns students 0.02s PASS Tests\Unit\Services\Parents\ParentAttendanceServiceTest ✓ list attendance returns rows 0.02s PASS Tests\Unit\Services\Parents\ParentConfigServiceTest ✓ context returns config values 0.01s PASS Tests\Unit\Services\Parents\ParentEmergencyContactServiceTest ✓ store creates contact 0.02s PASS Tests\Unit\Services\Parents\ParentEnrollmentServiceTest ✓ overview returns students 0.02s PASS Tests\Unit\Services\Parents\ParentInvoiceServiceTest ✓ list invoices filters by parent 0.02s PASS Tests\Unit\Services\Parents\ParentRegistrationServiceTest ✓ register creates student and contact 0.02s PASS Tests\Unit\Services\Payments\PaymentBalanceServiceTest ✓ update balance adjusts payment totals 0.01s PASS Tests\Unit\Services\Payments\PaymentEnrollmentEventServiceTest ✓ build event data requires parent 0.02s ✓ build event data returns parent payload when no students 0.02s PASS Tests\Unit\Services\Payments\PaymentEventChargesServiceTest ✓ get enrolled students returns grade 0.01s PASS Tests\Unit\Services\Payments\PaymentLookupServiceTest ✓ get by parent filters school year 0.01s PASS Tests\Unit\Services\Payments\PaymentManualServiceTest ✓ record payment rejects invalid method 0.02s ✓ suggest returns matches 0.01s PASS Tests\Unit\Services\Payments\PaymentMissedCheckServiceTest ✓ find users with missed payments 0.01s ✓ send reminders sends email and notification 0.01s PASS Tests\Unit\Services\Payments\PaymentNotificationDispatchServiceTest ✓ notify user creates notification records 0.01s PASS Tests\Unit\Services\Payments\PaymentNotificationServiceTest ✓ send records log and returns sent count 0.02s ✓ list logs filters by type 0.02s PASS Tests\Unit\Services\Payments\PaymentPlanServiceTest ✓ create plan uses defaults when missing 0.02s PASS Tests\Unit\Services\Payments\PaymentTestNotificationServiceTest ✓ send logs and sends email 0.02s PASS Tests\Unit\Services\Payments\PaymentTransactionServiceTest ✓ create and update transaction 0.02s PASS Tests\Unit\Services\Payments\PaypalPaymentServiceTest ✓ create payment falls back to hosted when sdk missing 0.01s ✓ execute payment throws when sdk missing 0.01s PASS Tests\Unit\Services\Payments\PaypalPaymentSyncServiceTest ✓ sync applies payment and marks synced 0.02s PASS Tests\Unit\Services\Payments\PaypalTransactionsServiceTest ✓ list all filters by keyword 0.01s PASS Tests\Unit\Services\Phone\PhoneFormatterServiceTest ✓ format returns null for invalid 0.01s ✓ format formats digits 0.01s PASS Tests\Unit\Services\Policy\PolicyContentServiceTest ✓ get policy returns content 0.01s PASS Tests\Unit\Services\Preferences\PreferencesCommandServiceTest ✓ upsert creates record 0.01s PASS Tests\Unit\Services\Preferences\PreferencesOptionsServiceTest ✓ defaults include expected keys 0.02s PASS Tests\Unit\Services\Preferences\PreferencesQueryServiceTest ✓ get for user returns defaults when missing 0.01s ✓ paginate filters by user id 0.01s PASS Tests\Unit\Services\Promotions\LevelProgressionServiceTest ✓ seed defaults creates baseline levels 0.02s ✓ resolve by class id uses mapping when present 0.02s ✓ resolve falls back to class id plus one when no mapping 0.01s ✓ upsert mapping updates existing row 0.01s FAIL Tests\Unit\Services\Promotions\PromotionEligibilityServiceTest ✓ passing student becomes awaiting parent enrollment 0.02s ✓ failing student becomes repeated 0.01s ✓ missing scores marks on hold 0.01s ⨯ terminal level is graduated 0.02s ✓ audit log records status changes 0.01s PASS Tests\Unit\Services\Promotions\PromotionEnrollmentServiceTest ✓ completing checklist finalises promotion and creates enrollment 0.02s ✓ partial checklist keeps status in progress 0.02s ✓ submit requires complete checklist 0.01s ✓ other parent cannot act on record 0.01s ✓ expired records become not enrolled 0.02s PASS Tests\Unit\Services\Promotions\PromotionStatusServiceTest ✓ allowed transition updates status and audit log 0.02s ✓ disallowed transition throws 0.01s ✓ force status bypasses transition map 0.02s ✓ no op transition returns record unchanged 0.02s PASS Tests\Unit\Services\PurchaseOrders\PurchaseOrderCreateServiceTest ✓ create persists purchase order and items 0.01s FAIL Tests\Unit\Services\PurchaseOrders\PurchaseOrderReceiveServiceTest ⨯ receive updates items and inventory 0.01s PASS Tests\Unit\Services\PurchaseOrders\PurchaseOrderStatusServiceTest ✓ cancel marks purchase order canceled 0.02s PASS Tests\Unit\Services\Refunds\RefundDecisionServiceTest ✓ approve updates refund status 0.01s PASS Tests\Unit\Services\Refunds\RefundInvoiceAdjustmentServiceTest ✓ apply book charge inserts additional charge 0.01s PASS Tests\Unit\Services\Refunds\RefundNotificationServiceTest ✓ notify pending logs event 0.02s FAIL Tests\Unit\Services\Refunds\RefundOverpaymentServiceTest ⨯ recalculate creates overpayment refund 0.01s PASS Tests\Unit\Services\Refunds\RefundPayoutServiceTest ✓ record payment marks partial 0.01s FAIL Tests\Unit\Services\Refunds\RefundPolicyServiceTest ⨯ process withdrawal refund creates refund 0.02s PASS Tests\Unit\Services\Refunds\RefundQueryServiceTest ✓ list filters by status 0.01s FAIL Tests\Unit\Services\Refunds\RefundRequestServiceTest ⨯ request overpayment creates refund 0.01s FAIL Tests\Unit\Services\Refunds\RefundSummaryServiceTest ⨯ summary calculates unapplied balance 0.02s PASS Tests\Unit\Services\Reimbursements\ReimbursementBatchAssignmentServiceTest ✓ assign and unassign batch item 0.02s PASS Tests\Unit\Services\Reimbursements\ReimbursementBatchServiceTest ✓ create batch assigns sequence and title 0.01s PASS Tests\Unit\Services\Reimbursements\ReimbursementDonationServiceTest ✓ mark donation updates expense and unassigns 0.02s PASS Tests\Unit\Services\Reimbursements\ReimbursementRecipientServiceTest ✓ recipient options include staff and specials 0.02s PASS Tests\Unit\Services\Reports\ReportCards\ReportCardServiceTest ✓ meta returns data sets 0.01s ✓ completeness returns summary 0.02s ✓ acknowledgement returns signed data 0.01s ✓ generate single report returns pdf 0.02s ✓ generate single report handles missing scores 0.01s PASS Tests\Unit\Services\Reports\SlipPrinterFormatterServiceTest ✓ to db date parses us format 0.02s ✓ to db time parses string 0.01s PASS Tests\Unit\Services\Reports\Stickers\StickerPresetServiceTest ✓ presets include alias fields 0.01s PASS Tests\Unit\Services\Reports\Stickers\StickerPrintServiceTest ✓ generate returns pdf content 0.02s ✓ generate returns error when no students 0.01s PASS Tests\Unit\Services\Reports\Stickers\StickerQueryServiceTest ✓ list students by class returns rows 0.01s ✓ list students for print all excludes youth and kg 0.02s PASS Tests\Unit\Services\Roles\PermissionCrudServiceTest ✓ create and update permission 0.01s FAIL Tests\Unit\Services\Roles\RoleAssignmentServiceTest ⨯ assign roles creates user roles and staff 0.01s PASS Tests\Unit\Services\Roles\RoleCrudServiceTest ✓ create and update role 0.02s PASS Tests\Unit\Services\Roles\RoleDashboardServiceTest ✓ best dashboard route for returns route 0.01s PASS Tests\Unit\Services\Roles\RolePermissionServiceTest ✓ save role permissions persists rows 0.01s PASS Tests\Unit\Services\Roles\RoleQueryServiceTest ✓ list roles returns paginator 0.02s ✓ list users with roles returns roles 0.01s PASS Tests\Unit\Services\Roles\RoleSwitchServiceTest ✓ get user role names returns roles 0.02s PASS Tests\Unit\Services\School\AccountEventServiceTest ✓ new account added creates family links 0.02s ✓ delete unverified user handles missing admin emails 0.01s FAIL Tests\Unit\Services\School\EnrollmentEventServiceTest ⨯ admission under review sends email 0.01s ⨯ admission under review requires email 0.02s FAIL Tests\Unit\Services\School\PaymentEventServiceTest ⨯ payment received sends email 0.01s ⨯ extra charge requires email 0.01s PASS Tests\Unit\Services\School\SemesterSelectionServiceTest ✓ selected teacher semester prefers session value 0.02s ✓ selected teacher semester falls back to config 0.01s FAIL Tests\Unit\Services\SchoolIds\SchoolIdAssignmentServiceTest ⨯ assigns school id when missing 0.01s ✓ assign returns existing school id 0.02s PASS Tests\Unit\Services\SchoolIds\SchoolIdGenerationServiceTest ✓ generates student school id with prefix 0.01s ✓ generates user school id with prefix 0.01s PASS Tests\Unit\Services\Scores\AttendanceCalculatorTest ✓ calculate uses configured days 0.02s PASS Tests\Unit\Services\Scores\ExamScoreServiceTest ✓ list returns latest exam score 0.01s ✓ update creates exam score and missing override 0.01s PASS Tests\Unit\Services\Scores\HomeworkCalculatorTest ✓ calculate returns average score 0.02s PASS Tests\Unit\Services\Scores\HomeworkScoreServiceTest ✓ list includes semester variants 0.02s ✓ add column inserts next index 0.01s PASS Tests\Unit\Services\Scores\ParticipationScoreServiceTest ✓ list returns participation scores 0.02s ✓ update updates existing scores 0.01s FAIL Tests\Unit\Services\Scores\ProjectCalculatorTest ⨯ calculate returns average score 0.01s PASS Tests\Unit\Services\Scores\ProjectScoreServiceTest ✓ list returns headers and scores 0.02s ✓ update creates scores and missing overrides 0.01s ✓ add column inserts next index 0.01s PASS Tests\Unit\Services\Scores\QuizCalculatorTest ✓ calculate returns average score 0.02s PASS Tests\Unit\Services\Scores\QuizScoreServiceTest ✓ list returns headers and scores 0.02s ✓ update creates scores and missing overrides 0.01s ✓ add column inserts next index 0.02s PASS Tests\Unit\Services\Scores\ScoreCommentServiceTest ✓ list returns comments for students 0.01s ✓ save returns validation errors for short comment 0.01s PASS Tests\Unit\Services\Scores\ScoreDashboardServiceTest ✓ overview returns students and scores 0.02s ✓ view student scores groups by year and semester 0.01s PASS Tests\Unit\Services\Scores\ScorePredictorServiceTest ✓ report builds predictions 0.01s PASS Tests\Unit\Services\Scores\ScoreTermServiceTest ✓ semester and school year fallback to configuration 0.02s ✓ normalize and variants 0.01s PASS Tests\Unit\Services\Scores\SemesterScoreServiceTest ✓ update student scores upserts semester scores 0.03s FAIL Tests\Unit\Services\Security\IpBanCommandServiceTest ⨯ ban now updates blocked until 0.02s ⨯ unban all resets active 0.01s FAIL Tests\Unit\Services\Security\IpBanQueryServiceTest ⨯ paginate filters active 0.01s PASS Tests\Unit\Services\Security\Pbkdf2HasherTest ✓ hash and verify 0.95s PASS Tests\Unit\Services\Semesters\SemesterConfigServiceTest ✓ reads dates from configuration 0.01s PASS Tests\Unit\Services\Semesters\SemesterRangeServiceTest ✓ get school year range falls back when config missing 0.01s ✓ get semester for date uses config dates 0.02s ✓ normalize semester 0.01s PASS Tests\Unit\Services\Settings\ConfigurationServiceTest ✓ store creates config 0.01s PASS Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarContextServiceTest ✓ event types returns list 0.02s PASS Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarFormatterServiceTest ✓ format event sets background for no school 0.01s ✓ format event normalizes iso dates to plain calendar date 0.01s PASS Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarMeetingServiceTest ✓ list meetings filters for parent 0.02s FAIL Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarMutationServiceTest ✓ create persists event 0.02s ⨯ update persists changes 0.01s FAIL Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarNotificationServiceTest ⨯ notify returns empty when no targets 0.02s PASS Tests\Unit\Services\Settings\SchoolCalendar\SchoolCalendarQueryServiceTest ✓ list events filters by school year 0.01s ✓ filter events for audience limits visibility 0.01s PASS Tests\Unit\Services\Settings\SettingsServiceTest ✓ update persists settings 0.02s PASS Tests\Unit\Services\Staff\StaffCommandServiceTest ✓ create requires user 0.01s ✓ create with user id 0.01s PASS Tests\Unit\Services\Staff\StaffQueryServiceTest ✓ paginate returns staff 0.02s PASS Tests\Unit\Services\Staff\StaffTimeOffLinkServiceTest ✓ token round trip 0.01s ✓ token invalid on expiry 2.02s PASS Tests\Unit\Services\Students\StudentAssignmentServiceTest ✓ assign creates student class rows 0.04s ✓ remove deletes assignment 0.01s FAIL Tests\Unit\Services\Students\StudentProfileServiceTest ⨯ update student saves allergies 0.01s FAIL Tests\Unit\Services\Students\StudentScoreCardServiceTest ⨯ score card returns rows and comments 0.02s PASS Tests\Unit\Services\Subjects\SubjectCurriculumServiceTest ✓ store creates entry 0.01s ✓ update changes title 0.01s PASS Tests\Unit\Services\Support\ContactMessageServiceTest ✓ send returns payload 0.02s PASS Tests\Unit\Services\Support\SupportRequestServiceTest ✓ create persists request 0.02s PASS Tests\Unit\Services\System\CleanupSchedulerServiceTest ✓ should run when no cache 0.01s ✓ mark run sets cache 0.02s ✓ run unverified cleanup calls artisan 0.01s PASS Tests\Unit\Services\System\ConfigUpdateServiceTest ✓ run task rejects unknown task 0.01s ✓ run task sets config when forced 0.02s PASS Tests\Unit\Services\System\GlobalConfigServiceTest ✓ get semester and school year 0.01s PASS Tests\Unit\Services\System\HealthCheckServiceTest ✓ check returns payload 0.01s PASS Tests\Unit\Services\System\TimeServiceTest ✓ to utc and to local round trip 0.02s FAIL Tests\Unit\Services\Teachers\TeacherAbsenceServiceTest ⨯ form data returns available dates 0.02s ⨯ submit creates staff attendance 0.01s PASS Tests\Unit\Services\Teachers\TeacherAssignmentServiceTest ✓ assign creates teacher class row 0.02s ✓ delete removes assignment 0.01s PASS Tests\Unit\Services\Teachers\TeacherDashboardServiceTest ✓ class view returns students 0.02s PASS Tests\Unit\Services\TrophyReportServiceTest ✓ calculate threshold enforces minimum of three winners 0.02s ✓ projection marks students without fall scores as not projected 0.02s ✓ final report classifies confirmed surprise and missed winners 0.02s PASS Tests\Unit\Services\Ui\UiStyleServiceTest ✓ update creates preferences 0.02s PASS Tests\Unit\Services\Users\DeleteUnverifiedUserServiceTest ✓ delete after timeout deletes user 0.02s ✓ delete after timeout skips recent user 0.01s PASS Tests\Unit\Services\Users\InactiveUserCleanupServiceTest ✓ cleanup removes inactive users and roles 0.02s PASS Tests\Unit\Services\Users\LoginActivityServiceTest ✓ list returns paginated payload 0.01s PASS Tests\Unit\Services\Users\UserEventServiceTest ✓ handle new account sends email 0.01s ✓ handle new account requires email 0.02s PASS Tests\Unit\Services\Users\UserListServiceTest ✓ list includes roles and second parent flag 0.02s PASS Tests\Unit\Services\Users\UserManagementServiceTest ✓ create persists user and role and sends welcome 0.02s ✓ update changes user fields 0.02s ✓ delete removes user and roles 0.01s PASS Tests\Unit\Services\Whatsapp\WhatsappContactServiceTest ✓ list parent contacts returns primary and second 0.02s PASS Tests\Unit\Services\Whatsapp\WhatsappContextServiceTest ✓ school year aliases generate expected values 0.02s ✓ has roster for year 0.01s PASS Tests\Unit\Services\Whatsapp\WhatsappInviteBundleServiceTest ✓ bundle for parent returns links and emails 0.02s ✓ consolidate bundles merges by parent 0.02s PASS Tests\Unit\Services\Whatsapp\WhatsappInviteEmailServiceTest ✓ send requires recipients 0.01s ✓ send dispatches email 0.01s FAIL Tests\Unit\Services\Whatsapp\WhatsappInviteNotificationServiceTest ⨯ dispatch returns error when no listeners 0.02s ✓ dispatch triggers event when listener registered 0.03s PASS Tests\Unit\Services\Whatsapp\WhatsappInviteServiceTest ✓ send returns success for parent mode 0.02s PASS Tests\Unit\Services\Whatsapp\WhatsappLinkServiceTest ✓ upsert creates link 0.02s ✓ paginate filters by active 0.01s PASS Tests\Unit\Services\Whatsapp\WhatsappMembershipServiceTest ✓ update membership saves primary 0.01s ✓ update membership returns error when table missing 0.02s PASS Tests\Feature\Api\ApiAttendanceTemplateFeatureTest ✓ attendance comment templates can be managed through current api 0.03s ✓ attendance comment template validation blocks bad ranges 0.02s ✓ legacy attendance template aliases still work 0.03s FAIL Tests\Feature\Api\ApiAuthenticationAndAuthorizationTest ✓ api login returns token and user object 0.06s ✓ session login also returns token and user object for spa clients 0.04s ✓ auth me requires authentication 0.02s ✓ auth me returns the current authenticated user 0.02s ⨯ admin only routes reject non admin users 0.03s ✓ protected api routes reject anonymous requests before business logi… 0.14s PASS Tests\Feature\Api\ApiPreferencesFeatureTest ✓ authenticated user can create read update and delete preferences 0.03s ✓ non admin cannot list or manage another users preferences 0.03s ✓ admin can list and delete any users preferences 0.03s ✓ preferences validation rejects invalid options 0.02s PASS Tests\Feature\Api\ApiPublicEndpointsTest ✓ health endpoint is available 0.01s ✓ public policy endpoints are available 0.02s ✓ public static pages are available 0.01s ✓ public frontend content endpoints do not server error 0.01s ✓ registration captcha endpoint returns captcha payload 0.02s ✓ invalid login payload is rejected cleanly 0.01s PASS Tests\Feature\Api\ApiRolePermissionFeatureTest ✓ admin can manage roles permissions and assign roles 0.04s ✓ role permission validation rejects bad payloads 0.02s FAIL Tests\Feature\Api\ApiRouteContractTest ⨯ every api route points to an existing controller method 0.01s ✓ api routes do not duplicate method and uri pairs 0.02s ✓ mutating api routes are protected unless explicitly public 0.05s PASS Tests\Feature\Api\ApiUseCaseCoverageMatrixTest ✓ every api route is mapped to an explicit use case domain 0.01s ✓ required use case domains have route coverage 0.01s ✓ every protected api route rejects anonymous requests 0.21s PASS Tests\Feature\Api\ApiUserManagementFeatureTest ✓ admin can create list update and delete a user through api 0.04s ✓ user creation validates required payload and unique email 0.02s ✓ user creation rejects nonexistent role id 0.02s PASS Tests\Feature\Api\V1\Admin\AdministratorAbsenceControllerTest ✓ guest cannot access absence index 0.01s ✓ authenticated user can get absence index 0.02s ✓ absence store requires reason 0.01s ✓ absence store requires valid date format 0.01s ✓ absence store calls service and returns success 0.02s PASS Tests\Feature\Api\V1\Administrator\AdministratorDashboardControllerTest ✓ metrics require authentication 0.02s ✓ metrics are forbidden for non admin users 0.02s ✓ metrics return payload for admin 0.03s ✓ user search passes query to service 0.02s PASS Tests\Feature\Api\Administrator\AdministratorEnrollmentControllerTest ✓ guest cannot update enrollment statuses 0.03s ✓ can fetch enrollment withdrawal data 0.02s ✓ can fetch new students 0.02s ✓ update statuses requires valid status values 0.02s ✓ update statuses calls service 0.02s PASS Tests\Feature\Api\V1\Admin\AdministratorEnrollmentQueryApiTest ✓ enrollment withdrawal endpoint returns students classes and years 0.02s ✓ new students endpoint returns transformed rows 0.02s PASS Tests\Feature\Api\Administrator\AdministratorEnrollmentUpdateStatusesApiTest ✓ update statuses requires enrollment status payload 0.02s ✓ update statuses rejects invalid status value 0.02s ✓ update statuses creates new enrollment row 0.02s ✓ update statuses updates existing enrollment row 0.02s ✓ update statuses creates or updates refund when status is refund pen… 0.02s ✓ update statuses returns partial success when some students are inva… 0.02s PASS Tests\Feature\Api\Administrator\AdministratorNotificationControllerTest ✓ can get alerts data 0.02s ✓ save alerts requires subjects payload 0.02s ✓ save alerts calls subject service 0.01s ✓ can get print recipients data 0.02s ✓ save print recipients requires notify payload 0.01s ✓ save print recipients calls service 0.01s PASS Tests\Feature\Api\Administrator\AdministratorTeacherSubmissionControllerTest ✓ can get teacher submission report 0.02s ✓ notify requires notify payload 0.02s ✓ notify calls service 0.01s PASS Tests\Feature\Api\Administrator\AdministratorTeacherSubmissionNotifyApiTest ✓ notify endpoint requires notify payload 0.02s ✓ notify endpoint sends email and creates history row 0.02s ✓ notify endpoint marks failed when teacher email is invalid 0.02s ✓ notify endpoint accepts flat teacher ids from spa payload 0.02s ✓ notify endpoint accepts flat teacher ids when teacher class has no… 0.02s PASS Tests\Feature\Api\Administrator\AdministratorTeacherSubmissionReportApiTest ✓ teacher submission report endpoint returns rows summary and history 0.03s ✓ teacher submission report returns no students status for empty sect… 0.02s ✓ teacher submission report handles teacher class without semester co… 0.02s ✓ teacher submission report limits history to three entries 0.02s ✓ teacher submission report honors school year and semester query fil… 0.02s PASS Tests\Feature\Api\V1\Administrator\EmergencyContactControllerTest ✓ index returns grouped contacts 0.03s ✓ update changes emergency contact 0.02s ✓ destroy deletes emergency contact 0.02s ✓ show returns single contact for parent 0.02s ✓ update requires matching parent id 0.02s ✓ destroy requires matching parent id 0.02s PASS Tests\Feature\Api\V1\Administrator\TeacherClassAssignmentControllerTest ✓ index returns teachers and classes 0.02s ✓ store and delete assignment 0.02s PASS Tests\Feature\Api\V1\Administrator\TrophyControllerTest ✓ index requires authentication 0.02s ✓ index is forbidden for non admin users 0.02s ✓ index returns projection for admin 0.02s ✓ winners returns data for admin 0.03s ✓ final returns data for admin 0.02s ✓ index validates percentile range 0.02s PASS Tests\Feature\Api\AssignmentApiControllerTest ✓ index returns assignment overview 0.02s ✓ index filters by school year 0.02s ✓ index sorts sections by name 0.02s ✓ index excludes inactive students 0.02s ✓ store creates new assignment 0.02s ✓ store updates existing assignment for same unique keys 0.02s ✓ store validates required fields 0.02s ✓ store validates foreign keys 0.02s ✓ class assignment data returns expected structure 0.02s ✓ class assignment data deduplicates teacher names 0.02s PASS Tests\Feature\Api\AssignmentApiTest ✓ it returns assignment sections json 0.02s ✓ it filters assignments by school year 0.02s ✓ it creates or updates student assignment 0.02s ✓ it validates required fields when storing assignment 0.01s ✓ store is idempotent for same student semester and year 0.02s ✓ guest cannot access assignment api when auth is required 0.02s PASS Tests\Feature\Api\V1\Attendance\LateSlipLogsControllerTest ✓ index requires admin 0.02s ✓ index returns logs 0.02s ✓ show returns log 0.02s ✓ destroy deletes log 0.02s ✓ index validation rejects bad dates 0.02s PASS Tests\Feature\Api\AttendanceCommentTemplateApiTest ✓ can list templates 0.02s ✓ can list templates active only 0.02s ✓ can create template 0.01s ✓ store validation fails when max less than min 0.01s ✓ can show template 0.02s ✓ can update template 0.01s ✓ update validation fails if both scores invalid relation 0.01s ✓ can delete template 0.02s ✓ legacy list data endpoint returns templates key 0.01s PASS Tests\Feature\Api\V1\AttendanceTracking\AttendanceTrackingControllerTest ✓ pending violations returns json response 0.02s ✓ notified violations returns json response 0.02s ✓ student case returns service payload 0.01s ✓ student case returns service status code when not found 0.01s ✓ record validates and returns service response 0.02s ✓ record returns validation errors for bad payload 0.01s ✓ send auto emails returns service response 0.01s ✓ compose returns service response 0.02s ✓ send manual email returns service response 0.01s ✓ send manual email validates payload 0.01s ✓ parents info returns service response 0.02s ✓ save notification note returns service response 0.01s ✓ save notification note validates payload 0.01s PASS Tests\Feature\Api\V1\Auth\IpBanControllerTest ✓ index requires admin 0.03s ✓ index returns bans 0.02s ✓ show returns ban 0.02s ✓ ban creates block 0.02s ✓ unban single 0.02s ✓ unban all 0.02s ✓ ban validation requires ip or id 0.02s PASS Tests\Feature\Api\V1\Auth\RegisterControllerTest ✓ captcha endpoint returns value 0.01s ✓ register creates user 0.33s PASS Tests\Feature\Api\V1\Auth\RegisterPayloadDebugTest ✓ debug payload shows json body 0.01s PASS Tests\Feature\Api\BadgeControllerTest ✓ form data returns success response 0.02s ✓ print status returns success response 0.02s ✓ print status returns 500 when service throws 0.02s ✓ log print returns success response 0.02s ✓ log print returns 500 when service throws 0.01s ✓ generate pdf returns pdf response 0.02s ✓ generate pdf validates required user ids 0.01s ✓ log print validates required user ids 0.02s ✓ endpoints require authentication 0.02s PASS Tests\Feature\Api\V1\BadgeScan\BadgeScanControllerTest ✓ scan is public but validates badge value 0.02s ✓ scan returns 404 for unrecognized badge 0.02s ✓ logs require authentication 0.01s ✓ logs are forbidden for non staff roles 0.02s ✓ logs return data for staff 0.02s PASS Tests\Feature\Api\V1\BroadcastEmail\BroadcastEmailControllerTest ✓ options returns parents and senders 0.02s ✓ send test only dispatches email 0.02s