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.10s
✓ index passes active only true 0.01s
✓ show returns template 0.01s
✓ store returns created response 0.02s
✓ 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.03s
✓ 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.30s
✓ 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.03s
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.01s
PASS Tests\Unit\Resources\Notifications\UserNotificationResourceTest
✓ resource returns expected shape 0.01s
PASS Tests\Unit\Resources\Roles\PermissionResourceTest
✓ resource shape 0.01s
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.02s
PASS Tests\Unit\Resources\Settings\SettingsResourceTest
✓ resource returns expected shape 0.01s
FAIL Tests\Unit\Resources\Staff\StaffResourceTest
⨯ resource returns expected shape 0.02s
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.01s
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.01s
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.02s
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.01s
⨯ 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.02s
✓ 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.02s
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.02s
✓ 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.02s
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.02s
✓ 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.01s
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.01s
⨯ mark printed creates logs 0.01s
PASS Tests\Unit\Services\ClassProgress\ClassProgressAttachmentServiceTest
✓ store attachments persists records 0.03s
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.02s
✓ resolve returns dashboard route for role 0.01s
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.01s
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.01s
✓ 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.02s
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.02s
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.02s
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.02s
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.02s
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.02s
✓ missing scores marks on hold 0.01s
⨯ terminal level is graduated 0.02s
✓ audit log records status changes 0.02s
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.01s
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.01s
✓ no op transition returns record unchanged 0.01s
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.02s
✓ 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.02s
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.02s
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.02s
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.01s
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.01s
✓ 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.02s
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.94s
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.01s
⨯ 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.02s
✓ token invalid on expiry 2.02s
PASS Tests\Unit\Services\Students\StudentAssignmentServiceTest
✓ assign creates student class rows 0.03s
✓ 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.02s
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.01s
✓ 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.03s
✓ session login also returns token and user object for spa clients 0.03s
✓ 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.06s
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.20s
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.01s
✓ metrics are forbidden for non admin users 0.02s
✓ metrics return payload for admin 0.02s
✓ user search passes query to service 0.02s
PASS Tests\Feature\Api\Administrator\AdministratorEnrollmentControllerTest
✓ guest cannot update enrollment statuses 0.02s
✓ can fetch enrollment withdrawal data 0.02s
✓ can fetch new students 0.01s
✓ update statuses requires valid status values 0.01s
✓ 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.03s
✓ 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.01s
✓ 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.02s
✓ 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.01s
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.01s
✓ 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.02s
✓ 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.02s
✓ 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.02s
✓ 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
PASS Tests\Feature\Api\V1\ClassPreparation\ClassPreparationControllerTest
✓ sticker counts returns payload 0.02s
✓ students by class returns roster 0.02s
PASS Tests\Feature\Api\V1\ClassProgress\ClassProgressControllerTest
✓ meta returns sections 0.02s
✓ index returns paginated reports 0.03s
✓ store creates reports 0.02s
✓ show returns weekly reports 0.02s
✓ update modifies report 0.02s
✓ destroy deletes report 0.02s
✓ authorization blocks other teachers 0.02s
✓ validation rejects invalid payload 0.02s
✓ attachment download returns file 0.02s
PASS Tests\Feature\Api\V1\Classes\ClassSectionControllerTest
✓ index returns sections 0.02s
✓ store requires admin 0.02s
✓ store creates class section 0.02s
✓ update requires admin 0.02s
✓ show returns section 0.02s
✓ update modifies class section 0.02s
✓ destroy deletes class section 0.01s
✓ attendance returns students 0.02s
✓ seed defaults creates classes 0.02s
✓ validation rejects invalid payload 0.01s
PASS Tests\Feature\Api\V1\Communication\CommunicationControllerTest
✓ options returns students and templates 0.03s
✓ preview returns rendered subject and body 0.02s
✓ send dispatches email 0.02s
PASS Tests\Feature\Api\V1\CompetitionScores\CompetitionScoresControllerTest
✓ index returns competitions and counts 0.02s
✓ edit returns students and scores 0.02s
✓ save updates scores 0.02s
PASS Tests\Feature\Api\V1\CompetitionWinners\CompetitionWinnersControllerTest
✓ index returns admin competitions with ids 0.02s
✓ lock and unlock toggle competition 0.02s
✓ export quiz creates quiz rows 0.02s
PASS Tests\Feature\Api\V1\Discounts\DiscountControllerTest
✓ options returns vouchers and parents 0.03s
✓ apply voucher applies discount 0.02s
✓ store voucher creates row 0.02s
✓ show voucher returns resource 0.02s
✓ delete voucher removes row 0.02s
PASS Tests\Feature\Api\V1\Email\EmailControllerTest
✓ senders endpoint returns options 0.02s
✓ send endpoint uses dispatch service 0.02s
PASS Tests\Feature\Api\V1\Email\EmailExtractorControllerTest
✓ emails endpoint returns users and parents 0.02s
✓ legacy emails endpoint returns top level arrays 0.02s
✓ compare endpoint returns comparison 0.02s
PASS Tests\Feature\Api\V1\Exams\ExamDraftControllerTest
✓ teacher store creates draft 0.03s
✓ admin review updates status 0.02s
PASS Tests\Feature\Api\V1\Expenses\ExpenseControllerTest
✓ options returns staff and retailors 0.02s
✓ store creates expense 0.02s
✓ index lists expenses 0.02s
✓ show returns expense 0.02s
✓ update status changes status 0.02s
PASS Tests\Feature\Api\V1\ExtraCharges\ExtraChargesControllerTest
✓ list returns rows 0.03s
✓ options returns parent options 0.02s
✓ parent options returns results 0.02s
✓ invoices for parent returns results 0.02s
✓ store creates charge and updates invoice 0.03s
✓ update adjusts charge 0.02s
✓ void changes status 0.02s
✓ reverse changes status 0.02s
PASS Tests\Feature\Api\V1\Family\FamilyAdminControllerTest
✓ index returns family admin payload 0.02s
✓ search returns items 0.02s
✓ card returns family details 0.02s
✓ compose email returns error on failure 0.02s
✓ requires authentication 0.01s
✓ compose email validation fails 0.02s
PASS Tests\Feature\Api\V1\Family\FamilyControllerTest
✓ families by student returns families 0.02s
✓ guardians by family returns guardians 0.02s
✓ bootstrap creates family and links 0.02s
✓ attach second by user links guardian 0.02s
✓ attach second by email creates user and links 0.02s
✓ set primary home updates record 0.02s
✓ set guardian flags updates record 0.02s
✓ set guardian flags requires payload 0.02s
✓ unlink guardian removes record 0.02s
✓ unlink student removes record 0.02s
✓ import legacy second parents links guardian 0.02s
✓ requires authentication 0.02s
✓ attach second by user validation fails 0.02s
PASS Tests\Feature\Api\V1\Finance\ChargeControllerTest
✓ list charges for parent 0.02s
✓ store extra charge returns 409 on duplicate 0.02s
✓ store event charge creates row 0.02s
✓ cancel extra charge voids row 0.02s
✓ charges endpoints require authentication 0.01s
PASS Tests\Feature\Api\V1\Finance\EventChargeControllerTest
✓ show requires authentication 0.02s
✓ show returns event charge 0.03s
✓ show returns 404 for unknown charge 0.02s
✓ update modifies event charge 0.03s
✓ approve marks charge as charged 0.02s
✓ void clears charged flag 0.02s
✓ destroy voids the charge 0.03s
PASS Tests\Feature\Api\V1\Finance\FeeCalculationControllerTest
✓ refund endpoint returns amount 0.02s
✓ tuition breakdown endpoint returns per student detail 0.02s
✓ tuition breakdown endpoint requires authentication 0.01s
✓ tuition breakdown endpoint validates payload 0.02s
✓ family balance endpoint returns account summary 0.02s
✓ family balance endpoint requires authentication 0.01s
✓ tuition total endpoint returns total 0.02s
✓ refund endpoint requires authentication 0.01s
✓ tuition total endpoint requires authentication 0.02s
✓ refund endpoint validates payload 0.02s
✓ tuition total endpoint validates payload 0.02s
✓ refund endpoint handles service failure 0.02s
✓ tuition total endpoint handles service failure 0.02s
PASS Tests\Feature\Api\V1\Finance\FinancialControllerTest
✓ report returns financial report 0.03s
✓ summary returns totals 0.02s
✓ unpaid parents lists balances 0.02s
PASS Tests\Feature\Api\V1\Finance\InvoiceControllerTest
✓ management returns parent invoice data 0.02s
✓ generate creates invoice 0.03s
✓ by parent returns invoices 0.02s
PASS Tests\Feature\Api\V1\Finance\PaymentControllerTest
✓ store creates payment plan 0.02s
✓ by parent returns payments 0.02s
✓ update balance updates payment 0.02s
PASS Tests\Feature\Api\V1\Finance\PaymentEventChargesControllerTest
✓ store creates event charges 0.02s
PASS Tests\Feature\Api\V1\Finance\PaymentManualControllerTest
✓ search returns parent data 0.02s
✓ suggest returns items 0.02s
PASS Tests\Feature\Api\V1\Finance\PaymentNotificationControllerTest
✓ send creates log 0.02s
✓ index lists logs 0.02s
PASS Tests\Feature\Api\V1\Finance\PaymentTransactionControllerTest
✓ store creates transaction 0.02s
✓ by payment returns transactions 0.02s
✓ update status updates transaction 0.02s
PASS Tests\Feature\Api\V1\Finance\PaypalTransactionsControllerTest
✓ index returns transactions 0.02s
✓ csv download 0.02s
PASS Tests\Feature\Api\V1\Finance\PurchaseOrderControllerTest
✓ index returns orders 0.02s
✓ options returns suppliers and supplies 0.02s
✓ store creates purchase order and items 0.02s
✓ receive updates inventory 0.02s
✓ cancel marks purchase order 0.02s
PASS Tests\Feature\Api\V1\Finance\RefundControllerTest
✓ index requires authentication 0.02s
✓ index returns paginated refunds 0.02s
✓ show returns refund 0.02s
✓ store overpayment creates refund 0.02s
✓ store validates payload 0.02s
✓ update approves refund 0.02s
✓ reject requires reason 0.02s
✓ record payment updates refund 0.02s
✓ recalculate overpayments creates refund 0.02s
✓ destroy cancels refund 0.02s
PASS Tests\Feature\Api\V1\Finance\ReimbursementControllerTest
✓ create batch creates open batch 0.02s
✓ mark donation updates expense 0.02s
✓ store reimbursement creates record and updates expense 0.02s
✓ update reimbursement updates fields 0.02s
PASS Tests\Feature\Api\V1\Frontend\FrontendControllerTest
✓ index returns page 0.02s
✓ fetch user requires auth 0.01s
✓ fetch user returns profile 0.01s
PASS Tests\Feature\Api\V1\Frontend\InfoIconControllerTest
✓ profile icon returns initials 0.02s
PASS Tests\Feature\Api\V1\Frontend\LandingPageControllerTest
✓ index returns admin dashboard 0.02s
✓ teacher dashboard returns summary 0.02s
✓ parent dashboard returns summary 0.02s
PASS Tests\Feature\Api\V1\Frontend\PageControllerTest
✓ privacy returns content 0.01s
✓ help missing returns error 0.01s
✓ submit contact persists 0.02s
PASS Tests\Feature\Api\V1\FullSurface\ApiAcademicAttendanceFullSurfaceContractTest
✓ academic attendance and grading surfaces have controlled contracts 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiAccountStatusLifecycleContractTest
✓ suspended disabled and pending status values do not gain access thr… 0.15s
PASS Tests\Feature\Api\V1\FullSurface\ApiAdminOperationsFullSurfaceContractTest
✓ administrator operational surface responds with controlled contract… 0.16s
PASS Tests\Feature\Api\V1\FullSurface\ApiAttachmentUploadContentSafetyContractTest
✓ upload endpoints reject executable or misleading files cleanly 0.08s
✓ download and file response routes do not allow path traversal param… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiAuditLogAndAdministrativeTraceabilityContractTest
✓ admin mutations return traceable status without exposing internal l… 0.18s
✓ audit and log routes are not mutable by public or low privilege use… 0.26s
PASS Tests\Feature\Api\V1\FullSurface\ApiAuthenticationLifecycleDepthContractTest
✓ authentication lifecycle handles login me refresh logout and invali… 0.08s
✓ password reset and registration like routes do not leak account exi… 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiAuthorizationCacheInvalidationContractTest
⨯ role and permission mutations do not make low privilege actor admin… 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch11RouteRegressionNetTest
✓ every api family has at least one negative contract probe in batch… 0.05s
✓ batch 11 high risk routes return controlled responses under combine… 0.21s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12AcademicGradeBoundaryContractTest
✓ grade and score routes reject out of range and wrong student contex… 0.20s
✓ locked or finalized grade routes do not accept low privilege overri… 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12AttachmentLifecycleContractTest
✓ attachment upload routes handle multiple file shapes cleanly 0.06s
✓ file download routes reject path and storage driver probing 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12AttendanceCorrectionAuditContractTest
✓ attendance corrections require valid actor date status and reason 0.20s
✓ parent and student cannot correct attendance records 0.10s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch12BulkMutationBoundaryContractTest
⨯ bulk mutation routes reject empty and cross domain targets cleanly 0.08s
✓ bulk routes do not accept unbounded target lists 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12CombinedRegressionSweepTest
✓ batch 12 combined security business rule and contract probe 0.26s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12ConsistencyUnderPartialPayloadContractTest
✓ patch routes do not null identity or ownership when optional fields… 0.06s
✓ post routes handle sparse payloads as validation not crashes 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12CrossActorDataLeakageContractTest
✓ parent teacher and student scoped reads do not leak admin only fiel… 0.32s
✓ actor cannot select a different owner scope with query parameters 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12FinancialLedgerIntegrityContractTest
✓ financial mutations reject ledger breaking amounts and cross invoic… 0.44s
✓ parent cannot force finance scope to all families 0.34s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12GuardianDelegationExpirationContractTest
✓ guardian and authorized user routes validate expiration relationshi… 0.10s
✓ student cannot manage guardians or authorized users 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12LongRunningExportJobContractTest
✓ export report and generation routes handle async parameters without… 0.14s
✓ low privilege users cannot request full school exports 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12MaintenanceModeAndOperationalControlContractTest
✓ operational control routes are admin only and controlled 0.07s
✓ public requests cannot toggle system state 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12RouteMetadataRiskRegisterTest
✓ high risk route families exist in the contract risk register 0.05s
✓ mutating high risk routes have specific route names when available 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12SearchEnumerationResistanceContractTest
✓ search autocomplete and lookup routes resist identifier enumeration 0.37s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12SensitiveConfigurationExposureContractTest
✓ configuration and bootstrap responses do not expose secrets 0.07s
✓ low privilege users cannot read sensitive configuration domains 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch12WebhookProviderMatrixContractTest
✓ provider callbacks reject missing mismatched and replayed signature… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13AccountRecoveryCredentialChangeContractTest
✓ password reset and credential routes do not leak user existence or… 0.05s
✓ low privilege users cannot change other users credentials 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13ApiPaginationPerformanceGuardContractTest
✓ list routes cap unbounded pagination and include requests 0.12s
✓ search routes handle unicode and extreme terms without leaking sql 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13ContactMessagingAbuseModerationContractTest
✓ message and contact routes handle spam headers and html payloads 0.11s
✓ broadcast routes remain admin only under channel spoofing 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13DiscountVoucherScholarshipAbuseContractTest
✓ discount and voucher routes reject abusive amounts and scope overri… 0.06s
✓ parent cannot self grant discounts or scholarships 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13FullSurfaceRegressionSuperSweepTest
✓ batch13 super sweep keeps major route families under controlled fai… 0.23s
✓ batch13 major mutation families are represented 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13InventoryProcurementReceivingIntegrityContractTest
✓ inventory receiving routes reject negative or impossible stock move… 0.07s
✓ non admins cannot adjust inventory or procurement state 0.11s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch13LocaleCalendarReligiousDateContractTest
⨯ calendar and event routes handle locale specific dates cleanly 0.07s
✓ attendance and academic routes reject out of term religious calenda… 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13MobileOfflineSyncConflictContractTest
✓ offline sync headers do not override authorization or state 0.13s
✓ duplicate offline submissions have controlled outcome 0.26s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13ObservableErrorCorrelationContractTest
✓ malformed requests preserve safe error correlation without reflecti… 0.07s
✓ error responses do not disclose controller or model stack details 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13ParentPortalInvoicePrivacyContractTest
✓ parent finance queries cannot request all families or other parent… 0.21s
✓ parent cannot mark invoice paid or refunded directly 0.26s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13PaymentProviderLedgerReconciliationContractTest
✓ payment provider payloads do not bypass ledger validation 0.27s
✓ duplicate provider reference is controlled across payment routes 0.29s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13ReportCardTranscriptCertificateForgeryContractTest
✓ document generation rejects forged finalization and signer payloads 0.26s
✓ students and parents cannot generate admin documents for other stud… 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13RolePermissionMutationRaceContractTest
✓ permission mutations reject wildcards and recursive assignments 0.06s
✓ non admin cannot gain permission by replaying role payload 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13StaffHrPayrollBoundaryContractTest
✓ staff and payroll routes redact sensitive personnel fields 0.11s
✓ low privilege users cannot mutate staff or payroll routes 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13StudentEnrollmentLifecycleIntegrityContractTest
✓ enrollment routes reject cross family and cross class payloads clea… 0.08s
✓ parent cannot self enroll or move student into arbitrary class 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch13TeacherRosterAndAssignmentBoundaryContractTest
✓ teacher roster routes ignore forced teacher and class scope overrid… 0.25s
✓ unassigned teacher mutations are denied or validated 0.11s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch14AcademicPromotionRollbackIntegrityContractTest
⨯ promotion and school year routes reject unsafe rollback payloads 0.10s
✓ low privilege actors cannot close reopen or promote school years 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14AccountEnumerationAndIdentityPrivacyContractTest
✓ identity recovery routes do not reveal whether user exists 0.05s
✓ identity payloads do not leak internal auth fields 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14AdminDelegationApprovalWorkflowContractTest
✓ approval and delegation routes reject forged approval metadata 0.08s
✓ low privilege users cannot self approve or delegate privileges 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14ApiConsumerContractCompatibilityTest
✓ core identity contracts remain compatible for web mobile and api cl… 0.13s
✓ successful login like responses keep token and user contract when p… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14AttendanceDeviceAndKioskAbuseContractTest
✓ kiosk scanner and attendance routes reject forged device identity 0.11s
✓ student and parent cannot self mark attendance through device paylo… 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14AuditTrailTamperResistanceContractTest
✓ audit and log routes reject client supplied actor and timestamp fie… 0.09s
✓ non admin users cannot clear or rewrite audit history 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14BulkAssignmentCollisionContractTest
✓ bulk assignment routes handle duplicate and conflicting ids cleanly 0.07s
✓ parent and student cannot force bulk assignment scope 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14CrossModuleInvariantRiskRegisterTest
✓ batch14 route families have cross module risk coverage 0.05s
✓ batch14 high risk mutation families exist 0.04s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch14DataLifecycleArchivePurgeContractTest
⨯ archive purge and retention routes require safe controlled requests 0.05s
✓ non admin users cannot purge or restore global records 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14FinanceReconciliationAndRefundAbuseContractTest
✓ finance reconciliation routes reject mismatched invoice parent and… 0.13s
✓ parent cannot self refund or self reconcile 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14NotificationTemplateInjectionContractTest
✓ notification and template routes reject template injection payloads 0.08s
✓ non admin users cannot broadcast by template override 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14PrintExportTamperingContractTest
✓ print export and document generation routes reject tampered scope f… 0.10s
✓ low privilege users cannot generate full school exports 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14RegressionMegaSweepTest
✓ batch14 mega sweep keeps new risk payloads under controlled failure 0.23s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14RelationshipOwnershipMatrixExpansionTest
✓ relationship owner override fields are not trusted across route fam… 0.09s
✓ student user cannot read or write other relationship graphs 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14SessionCookieCsrfBoundaryContractTest
✓ api auth routes do not depend on browser session cookies 0.09s
✓ browser only session headers do not grant api privileges 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch14StoragePathAndSignedUrlContractTest
✓ file and signed url routes reject path and disk overrides 0.08s
✓ public file routes do not honor expired or forged signature paramet… 0.05s
WARN Tests\Feature\Api\V1\FullSurface\ApiBatch15AdminImpersonationSessionBoundaryContractTest
! batch15 impersonation and acting as routes require real admin conte… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15AuthTokenRotationAndRevocationContractTest
✓ batch15 token rotation revocation and identity routes do not accept… 0.10s
✓ batch15 repeat logout and refresh replay are controlled 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15BackgroundCommandAndSchedulerContractTest
✓ batch15 command scheduler and job trigger routes are admin only and… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15ConsentPrivacyAndDataSubjectRightsContractTest
✓ batch15 privacy consent erasure and export routes are admin or owne… 0.05s
✓ batch15 student actor cannot request family wide or school wide pri… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15CrossSchoolIdentityCollisionContractTest
✓ batch15 duplicate external identifiers and cross school aliases fai… 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15DataResidencyBackupAndRestoreContractTest
✓ batch15 backup restore residency and snapshot routes do not expose… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15DomainEventOutboxAndNotificationConsistencyContractTest
✓ batch15 event outbox and notification trigger routes reject forged… 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15FeatureFlagExperimentAndRolloutContractTest
✓ batch15 feature flag and rollout routes reject low privilege overri… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15FormRequestAuthorizationCoverageContractTest
✓ batch15 mutating routes do not allow public or low privilege form r… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15GlobalSearchAndDirectoryEnumerationContractTest
✓ batch15 global search directory and lookup routes resist enumeratio… 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15LocalizationContentDirectionAndEncodingContractTest
✓ batch15 rtl unicode and encoding payloads remain controlled across… 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15MetadataFilteringAndSparseFieldsetSecurityContractTest
✓ batch15 sparse fieldsets metadata and embeds do not reveal sensitiv… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15RateLimitAndAbusePatternContractTest
✓ batch15 repeated sensitive requests return controlled responses wit… 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15RegressionUltraSweepTest
✓ batch15 ultra sweep keeps cross domain hostile payloads under contr… 0.24s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15ReportDrilldownAndAggregatePrivacyContractTest
✓ batch15 report drilldown filters do not allow scope escape or sensi… 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15RouteParameterPoisoningExpansionTest
✓ batch15 route parameters reject encoded path script and type confus… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch15StudentSafetyIncidentEscalationContractTest
✓ batch15 safety incident escalation routes are not mutable by parent… 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16AccessibilityAndClientHintsContractTest
✓ batch16 client hints accessibility headers and locale variants do n… 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16AdaptivePublicEndpointAbuseContractTest
✓ batch16 public endpoints ignore identity spoofing and privileged qu… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16DeviceTrustAndScannerReplayContractTest
✓ batch16 kiosk scanner and device routes do not trust client asserte… 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16EmergencyContactAndPickupSafetyContractTest
✓ batch16 pickup guardian and emergency contact routes reject wrong f… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16EventualConsistencyAndRetryContractTest
✓ batch16 retry headers and client operation ids are scoped per actor… 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16ImportPreviewCommitSeparationContractTest
✓ batch16 import preview payloads cannot force commit or skip validat… 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16MoneyPrecisionCurrencyContractTest
✓ batch16 money routes reject precision currency and rounding abuse c… 0.35s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16MultiStepWorkflowCompensationContractTest
✓ batch16 multi step school operations fail safely when later steps a… 0.10s
✓ batch16 compensation flags cannot be user supplied by low privilege… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16NotificationDeliverySuppressionContractTest
✓ batch16 notification suppression and delivery flags cannot be overr… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16OptimisticLockingAndVersionFieldContractTest
✓ batch16 version and lock fields cannot be forged to override newer… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16PermissionDriftDetectionContractTest
✓ batch16 permission names and route families do not drift into ungua… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16ReadModelProjectionConsistencyContractTest
✓ batch16 summary dashboard and projection routes resist privileged i… 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16RegressionHyperSweepTest
✓ batch16 hyper sweep applies cross cutting hostile payloads to high… 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16RouteGraphInvariantRegisterTest
✓ batch16 route graph has contract pressure for new risk families 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch16SchemaEvolutionDeprecationContractTest
✓ batch16 deprecated aliases remain controlled and do not return inco… 0.09s
✓ batch16 removed or deprecated fields are not required for current c… 0.07s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch16TemporalConsistencyAndClockSkewContractTest
⨯ batch16 clock skew and temporal boundaries do not bypass business r… 0.29s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17AcademicPrerequisiteAndDependencyContractTest
✓ academic actions do not skip required prerequisites or locks 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17ApiContractDiffAndCriticalKeyRegisterTest
✓ critical identity finance attendance and academic payloads keep con… 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17AttendanceTamperWindowContractTest
✓ attendance cutoff backdate future and reason requirements are contr… 0.15s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17CommunicationRecipientExpansionContractTest
✓ message broadcast and notification recipient scope cannot be expand… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17DataLineageAndSourceAttributionContractTest
✓ client supplied lineage and audit source fields are not authoritati… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17ExportColumnLevelSecurityContractTest
✓ export field selection cannot request secrets or cross scope column… 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17ExternalIdAndNaturalKeyCollisionContractTest
✓ external ids student numbers and emails are not cross domain author… 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17FinancialPeriodCloseAndAdjustmentContractTest
✓ closed period adjustments writeoffs and credit transfers are guarde… 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17InventoryAssetCustodyContractTest
✓ inventory asset custody transfers and disposal are not client autho… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17MultiGuardBoundaryContractTest
✓ api guard boundaries are not crossed by session or web identity 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17PartialFailureErrorDetailRedactionContractTest
✓ bulk partial failure details are actionable without leaking databas… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17PerResourceRateLimitIdentityContractTest
✓ repeated sensitive actions are scoped by actor resource and operati… 0.16s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17RegressionOmegaSweepTest
✓ batch17 omega sweep combines headers payloads queries and route par… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17SearchRankingAndPermissionFilterContractTest
✓ search autocomplete and lookup do not bypass permission filters 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17StudentIdentityMergeSplitContractTest
✓ merge split and duplicate student identity routes reject unsafe pay… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch17ZeroTrustInternalHeaderContractTest
✓ internal proxy and service headers do not grant privilege 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18ApiKeyServiceAccountAndMachineIdentityContractTest
✓ batch18 apikeyserviceaccountandmachineidentity stays controlled 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18CanonicalIdentifierImmutabilityContractTest
✓ batch18 canonicalidentifierimmutability stays controlled 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18ClassCapacityWaitlistAndScheduleConflictContractTest
✓ batch18 classcapacitywaitlistandscheduleconflict stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18ConsentRevocationAndCommunicationComplianceContractTest
✓ batch18 consentrevocationandcommunicationcompliance stays controlle… 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18CrossModuleBusinessInvariantRegisterTest
✓ batch18 business invariant route families remain present 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18ExportWatermarkAndAuditabilityContractTest
✓ batch18 exportwatermarkandauditability stays controlled 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18FeatureEntitlementAndLicenseBoundaryContractTest
✓ batch18 featureentitlementandlicenseboundary stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18FileVirusScanAndQuarantineContractTest
✓ batch18 filevirusscanandquarantine stays controlled 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18FinanceChargebackDisputeContractTest
✓ batch18 financechargebackdispute stays controlled 0.09s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch18OrphanedRecordAndCascadeBoundaryContractTest
⨯ batch18 orphanedrecordandcascadeboundary stays controlled 0.24s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18PrivilegeBoundaryAfterRoleMutationContractTest
✓ batch18 privilegeboundaryafterrolemutation stays controlled 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18RegressionFinalitySweepTest
✓ batch18 combined hostile payload sweep stays controlled 0.20s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18ReportDrillthroughAndRowLevelSecurityContractTest
✓ batch18 reportdrillthroughandrowlevelsecurity stays controlled 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18StudentMedicalAndSafetyDataMinimizationContractTest
✓ batch18 studentmedicalandsafetydataminimization stays controlled 0.15s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch18TemporalAuditAndTimezoneForgeryContractTest
⨯ batch18 temporalauditandtimezoneforgery stays controlled 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18TwoPersonApprovalAndSegregationContractTest
✓ batch18 twopersonapprovalandsegregation stays controlled 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch18WebhookOrderingAndOutOfSequenceContractTest
✓ batch18 webhookorderingandoutofsequence stays controlled 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19AggregateDashboardScopeContractTest
✓ batch19 aggregate dashboard scope stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19AppendOnlyAuditLedgerContractTest
✓ batch19 append only audit ledger stays controlled 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19AttendanceExcuseDocumentLifecycleContractTest
✓ batch19 attendance excuse document lifecycle stays controlled 0.34s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19AttributeBasedAccessConditionContractTest
✓ batch19 attribute based access condition stays controlled 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19BackupRestoreIsolationContractTest
✓ batch19 backup restore isolation stays controlled 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19ClassTransferTranscriptContinuityContractTest
✓ batch19 class transfer transcript continuity stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19CommunicationBounceAndSuppressionWebhookContractTest
✓ batch19 communication bounce and suppression webhook stays controll… 0.16s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19CustodyRestrictionPickupAuthorizationContractTest
✓ batch19 custody restriction pickup authorization stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19NestedRelationshipRedactionContractTest
✓ batch19 nested relationship redaction stays controlled 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19OperationalAndPrivacyInvariantRegisterTest
✓ batch19 operational and privacy route families remain present 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19PaymentAllocationAndBalanceContractTest
✓ batch19 payment allocation and balance stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19RefundMethodAndSettlementBoundaryContractTest
✓ batch19 refund method and settlement boundary stays controlled 0.30s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19RegressionContinuitySweepTest
✓ batch19 continuity and privacy sweep stays controlled 0.42s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19ReportCacheInvalidationContractTest
✓ batch19 report cache invalidation stays controlled 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19RevokedDeletedUserTokenBoundaryContractTest
✓ batch19 revoked deleted user token boundary stays controlled 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19TeacherSubstitutionCoverageContractTest
✓ batch19 teacher substitution coverage stays controlled 0.21s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19TemporaryUrlExpirationRevocationContractTest
✓ batch19 temporary url expiration revocation stays controlled 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch19ThirdPartySyncCanonicalizationContractTest
✓ batch19 third party sync canonicalization stays controlled 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20AdminAuditExportRedactionContractTest
✓ batch20 admin audit export redaction stays controlled 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ApiSunsetDeprecationAndCompatibilityContractTest
✓ batch20 api sunset deprecation and compatibility stays controlled 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20AttendanceGeofenceAndDeviceTrustContractTest
✓ batch20 attendance geofence and device trust stays controlled 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20CashDrawerManualPaymentIntegrityContractTest
✓ batch20 cash drawer manual payment integrity stays controlled 0.20s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ClassCapacityLotteryAndWaitlistContractTest
✓ batch20 class capacity lottery and waitlist stays controlled 0.37s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ContinuityComplianceRiskRegisterTest
✓ batch20 continuity and compliance route families remain visible 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20DataWarehouseAnalyticsExportContractTest
✓ batch20 data warehouse analytics export stays controlled 0.20s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20EmergencyClosureBroadcastContractTest
✓ batch20 emergency closure broadcast stays controlled 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20GradebookLockAndAmendmentContractTest
✓ batch20 gradebook lock and amendment stays controlled 0.21s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch20LegalHoldRetentionAndPurgeConflictContractTest
⨯ batch20 legal hold retention and purge conflict stays controlled 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20MultilingualContentAndTranslationContractTest
✓ batch20 multilingual content and translation stays controlled 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20NotificationDeadLetterAndRetryContractTest
✓ batch20 notification dead letter and retry stays controlled 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ParentDisputeAndCustodyReviewContractTest
✓ batch20 parent dispute and custody review stays controlled 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ReceiptNumberingAndTaxDocumentIntegrityContractTest
✓ batch20 receipt numbering and tax document integrity stays controll… 0.18s
FAIL Tests\Feature\Api\V1\FullSurface\ApiBatch20RegressionContinuityComplianceSweepTest
⨯ batch20 continuity compliance and export sweep stays controlled 0.28s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20ScholarshipRenewalAndEligibilityContractTest
✓ batch20 scholarship renewal and eligibility stays controlled 0.21s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20SiblingFamilyDiscountAbuseContractTest
✓ batch20 sibling family discount abuse stays controlled 0.20s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20SyntheticMonitoringAndHealthProbeContractTest
✓ batch20 synthetic monitoring and health probe stays controlled 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20TransportationPickupRouteSafetyContractTest
✓ batch20 transportation pickup route safety stays controlled 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiBatch20WebhookSecretRotationContractTest
✓ batch20 webhook secret rotation stays controlled 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBulkImportExportAndPartialFailureExpansionTest
✓ bulk routes handle mixed valid and invalid ids cleanly 0.08s
✓ import routes reject wrong file types with validation not crashes 0.05s
✓ export download routes do not return mutating statuses 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiBusinessRuleEdgeCaseContractTest
✓ school year semester and class mismatch payloads fail without crash… 0.16s
✓ financial amount rules reject zero negative and precision abuse cle… 0.35s
✓ attendance status and time edge cases are controlled 0.41s
PASS Tests\Feature\Api\V1\FullSurface\ApiCacheFreshnessAndConditionalRequestContractTest
✓ private authenticated resources are not publicly cacheable 0.17s
✓ conditional headers do not bypass authorization or return wrong use… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiCalendarScheduleConflictContractTest
✓ calendar event and school schedule routes handle conflicts and inva… 0.07s
✓ calendar list routes tolerate window queries and do not leak unscop… 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiClientCompatibilityVersioningContractTest
✓ publicly registered api routes remain versioned or explicitly legac… 0.04s
✓ route names are unique enough for client generation 0.05s
✓ legacy and current auth contracts return compatible failure shapes 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiConcurrencyAndStaleWriteContractTest
⨯ duplicate update payloads remain controlled and do not throw server… 0.07s
✓ stale if match headers do not force successful mutations 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiContentNegotiationAndMediaTypeContractTest
✓ json accept header receives controlled api responses across major d… 0.14s
✓ unsupported accept headers do not trigger server errors 0.09s
✓ malformed content type for mutations fails cleanly 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiContractCoverageHeatmapExpansionTest
✓ every major route family has a meaningful contract probe bucket 0.05s
✓ mutating route surface is not accidentally unowned by contract suit… 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiContractSnapshotSeedTest
✓ core success payloads keep contract keys when available 0.07s
✓ auth identity payload never drops user identity when successful 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiCrossModuleReferentialWorkflowExpansionTest
✓ wrong but existing ids across modules do not silently cross link re… 0.18s
PASS Tests\Feature\Api\V1\FullSurface\ApiCrossVersionRouteCompatibilityMatrixTest
✓ v1 and unversioned auth routes keep failure contract compatible 0.06s
✓ legacy routes do not expand beyond documented aliases silently 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiCsvExcelFormulaInjectionContractTest
✓ exportable and importable text fields handle excel formula payloads 0.67s
PASS Tests\Feature\Api\V1\FullSurface\ApiDataExportLeastPrivilegeContractTest
✓ export and download routes do not grant low privilege bulk access 0.12s
✓ export filters respect actor scope parameters 0.10s
PASS Tests\Feature\Api\V1\FullSurface\ApiDataMinimizationByRoleContractTest
✓ parent and student responses do not expose back office finance or a… 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiDataShapeBackwardCompatibilityContractTest
✓ collection endpoints keep backward compatible envelope keys 0.19s
✓ successful detail endpoints keep identifier or data keys 0.13s
FAIL Tests\Feature\Api\V1\FullSurface\ApiDatabaseTransactionRollbackContractTest
✓ multi step mutations do not leave obvious partial records after val… 0.17s
⨯ delete failures do not remove parent or student fixtures 0.25s
FAIL Tests\Feature\Api\V1\FullSurface\ApiDateMoneyAndTimezoneBoundaryContractTest
⨯ date accepting endpoints reject impossible or ambiguous dates clean… 0.25s
✓ money accepting endpoints reject negative nan and overflow amounts… 0.50s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepAuthorizationIsolationMatrixTest
✓ role isolation matrix blocks cross portal access for sensitive surf… 0.26s
✓ owner scoped parent routes do not expose another family student 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepDocumentationAndRouteParityContractTest
✓ every named api route has a stable route name or explicit public ex… 0.05s
✓ openapi or docs catalog endpoint is reachable and route table remai… 0.06s
✓ route use case catalog covers new deep contract domains 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepFileImportExportAndPrintableContractTest
✓ export download and printable routes are controlled for authenticat… 0.10s
✓ import upload routes accept test files or return validation without… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepIdempotencyAndDuplicateSubmissionContractTest
✓ duplicate sensitive mutations do not create uncontrolled server err… 0.19s
✓ repeat delete or archive requests are safe to retry or fail cleanly 0.11s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepPaginationSearchAndFilterContractTest
✓ list endpoints tolerate pagination search sort and filter parameter… 0.46s
✓ date range filters fail cleanly when dates are invalid 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepResponseShapeAndEnvelopeContractTest
✓ successful json api responses use parseable json envelopes across m… 0.19s
✓ collection endpoints expose list like payloads or explicit empty st… 0.45s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepStateTransitionInvariantContractTest
✓ school year close reopen and promotion transition routes preserve c… 0.06s
✓ finance transition routes do not allow negative balance crashes or… 0.06s
✓ attendance transition routes keep single day student context contro… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiDeepValidationFailureContractTest
✓ mutating routes return controlled validation or authorization for h… 0.50s
✓ required field validation uses machine readable error shape when va… 0.08s
FAIL Tests\Feature\Api\V1\FullSurface\ApiDestructiveActionSafeguardContractTest
✓ delete routes handle missing and foreign ids without crashing 0.08s
✓ bulk delete style routes require explicit targets 0.06s
⨯ archive remove cancel and void routes are idempotent or conflict sa… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiEmptyDatasetAndNullStateContractTest
✓ list endpoints return stable empty shapes when filters match nothin… 0.07s
✓ current school year null state is handled without crash 0.06s
✓ empty class roster and attendance context are controlled 0.06s
FAIL Tests\Feature\Api\V1\FullSurface\ApiEnumAndStateMachineContractTest
⨯ status fields reject unknown states without defaulting to success 0.18s
✓ terminal states are not reopened by low privilege users 0.06s
FAIL Tests\Feature\Api\V1\FullSurface\ApiErrorEnvelopeConsistencyContractTest
✓ not found api responses are json or controlled redirects 0.05s
✓ validation error envelopes have machine readable fields 0.12s
⨯ authorization error envelopes do not leak stack traces 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiEtagConditionalMutationContractTest
✓ mutating routes do not succeed silently with stale conditional head… 0.13s
PASS Tests\Feature\Api\V1\FullSurface\ApiFailureModeResilienceExpansionTest
✓ mutation routes fail cleanly when required relationships are null 0.17s
✓ mutation routes fail cleanly when relationships are strings instead… 0.17s
PASS Tests\Feature\Api\V1\FullSurface\ApiFamilyPortalFullSurfaceContractTest
✓ family portal surface has controlled contracts and privacy boundari… 0.08s
FAIL Tests\Feature\Api\V1\FullSurface\ApiFeatureFlagAndConfigurationDriftContractTest
⨯ feature flagged routes fail closed when configuration is missing or… 0.11s
✓ configuration mutations reject unrecognized or privileged keys from… 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiFileMediaMetadataSafetyContractTest
✓ upload routes reject misleading metadata and path names cleanly 0.05s
✓ download routes do not accept path traversal identifiers 0.08s
PASS Tests\Feature\Api\V1\FullSurface\ApiFinanceInventoryCommunicationsFullSurfaceContractTest
✓ back office and communications surfaces have controlled contracts 0.14s
PASS Tests\Feature\Api\V1\FullSurface\ApiFrontendBackendContractParityTest
✓ frontend identity and api identity do not drift apart 0.06s
✓ login aliases return compatible token and user contracts 0.05s
✓ frontend bootstrap routes do not require admin privilege when they… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiFullSurfaceEndToEndContractTest
✓ every registered api route has a controlled e2e contract response 0.77s
✓ all mutating api routes reject empty or malformed payloads without… 0.58s
✓ portal routes enforce wrong actor boundaries across the full surfac… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiHtmlJavaScriptEscapingContractTest
✓ text fields accept or reject script payloads without reflecting exe… 0.21s
PASS Tests\Feature\Api\V1\FullSurface\ApiHttpSemanticsAndMethodSafetyContractTest
✓ get routes do not accept mutating payloads as state changes 0.19s
✓ wrong methods fail with controlled statuses not framework explosion… 0.11s
✓ delete routes do not require json body to be safe 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiIdempotencyScopeAndReplayContractTest
✓ same idempotency key cannot be replayed across unrelated routes to… 0.24s
✓ idempotency keys with control characters are rejected or ignored cl… 0.12s
WARN Tests\Feature\Api\V1\FullSurface\ApiImpersonationDelegationAndActingAsContractTest
! impersonation and delegation routes are admin only and auditable →… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiImportTemplateAndCsvContractTest
✓ import routes reject malformed csv rows without server errors 0.05s
✓ template download routes are not public when templates include priv… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiLegacyCurrentAliasParityExpansionTest
✓ auth aliases return compatible login shapes 0.06s
✓ legacy teacher aliases and current v1 teacher routes have compatibl… 0.06s
✓ legacy non versioned routes do not drift into 5xx 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiLocalizationAndLocaleFallbackContractTest
✓ supported and unsupported accept language headers stay controlled 0.53s
✓ timezone parameters do not corrupt attendance or finance queries 0.59s
PASS Tests\Feature\Api\V1\FullSurface\ApiMassAssignmentAndOverpostingContractTest
✓ write endpoints ignore or reject privilege escalation fields 0.41s
✓ parent and teacher cannot overpost owner ids to reassign records 0.30s
FAIL Tests\Feature\Api\V1\FullSurface\ApiMigrationSafeDefaultContractTest
✓ core routes survive missing optional configuration rows 0.09s
⨯ routes handle missing optional school year context with controlled… 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiMobileClientToleranceContractTest
✓ api routes handle mobile headers without contract drift 0.16s
✓ api routes handle offline retry headers without duplicate server er… 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiModelLifecycleInvariantExpansionTest
✓ create update show index lifecycle routes remain controlled for cor… 0.21s
✓ identity fields are not overwritten by update payloads 0.30s
PASS Tests\Feature\Api\V1\FullSurface\ApiMutationReadAfterWriteConsistencyContractTest
✓ created resources return identifier or location to support follow u… 0.28s
✓ update successes preserve resource identity when identity is presen… 0.30s
PASS Tests\Feature\Api\V1\FullSurface\ApiNestedPayloadAndArrayAbuseContractTest
✓ mutation routes fail cleanly for deeply nested payloads 0.15s
✓ mutation routes fail cleanly for large sparse arrays 0.22s
FAIL Tests\Feature\Api\V1\FullSurface\ApiNotificationMessagingDeliveryContractTest
✓ message notification and broadcast routes validate recipients and c… 0.08s
⨯ read archive star and delete message actions are idempotent 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiNotificationPreferenceAndOptOutContractTest
✓ notification preference routes validate channels recipients and opt… 0.18s
✓ low privilege users cannot broadcast notifications to everyone 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiNullBooleanAndTypeCoercionContractTest
✓ mutation routes handle null false zero and string booleans without… 0.20s
PASS Tests\Feature\Api\V1\FullSurface\ApiObservabilityRequestIdAndLoggingContractTest
✓ api accepts correlation ids without echoing unsafe values 0.18s
✓ malformed request ids do not break error handling 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiOpenApiDocumentationDriftContractTest
✓ api surface has documentation entry points and route inventory rema… 0.06s
✓ named api routes use stable names when names exist 0.04s
✓ documented routes do not point to missing actions 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiOpenRedirectAndReturnUrlContractTest
✓ login and navigation routes do not accept external return urls 0.09s
✓ redirect like query parameters do not poison get responses 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiOperationalEndpointExposureContractTest
✓ operational debug and maintenance routes are not publicly exposed w… 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiOperationalResiliencePayloadSizeContractTest
✓ mutating routes reject huge payloads and deep arrays without memory… 0.50s
✓ get routes reject abusive include expand and field lists cleanly 0.16s
PASS Tests\Feature\Api\V1\FullSurface\ApiOwnerBoundaryAndPrivacyExpansionTest
✓ parent family endpoints do not expose other parent records 0.06s
✓ teacher class endpoints do not expose unassigned class records 0.07s
✓ serialized users do not leak sensitive auth material 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiPaginationCursorAndOffsetAbuseContractTest
✓ list routes handle cursor offset and per page abuse without crashin… 0.26s
PASS Tests\Feature\Api\V1\FullSurface\ApiPermissionMatrixExhaustiveContractTest
✓ core domain permission matrix is enforced across roles 0.06s
✓ admin only mutations are not available to lower roles 0.06s
✓ student role cannot access parent teacher or admin portals 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiPolicyAuthorizationDiscoveryContractTest
⨯ protected mutation routes are not publicly mutable 0.06s
✓ permission like routes reject wildcards from non admins 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiPolymorphicOwnershipBoundaryContractTest
✓ owner type and owner id fields cannot be overposted by low privileg… 0.08s
✓ cross actor owner queries do not return private data 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiPrivacyRetentionAndErasureContractTest
✓ erasure archive and privacy routes are never publicly mutable 0.05s
✓ privacy related exports do not leak sensitive user fields 0.09s
FAIL Tests\Feature\Api\V1\FullSurface\ApiPublicAndAuthFullSurfaceContractTest
⨯ public and auth surface has stable contracts 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiPublicPrivateCacheSeparationContractTest
✓ authenticated private routes do not emit public cache headers 0.13s
✓ conditional cache headers do not bypass authorization 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiQueryParameterFuzzingContractTest
✓ collection endpoints handle hostile query parameters without 5xx 0.11s
✓ date range endpoints reject inverted or impossible ranges cleanly 0.07s
✓ sorting contract does not allow raw sql fragments 0.06s
PASS Tests\Feature\Api\V1\FullSurface\ApiQueueJobAndAsyncTriggerContractTest
✓ async trigger routes are admin or owner scoped and fail cleanly 0.08s
✓ async triggers tolerate duplicate client request ids 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiRateLimitTokenAndSessionHardeningContractTest
✓ repeated bad login attempts stay controlled and never return a toke… 0.08s
✓ expired or garbage bearer tokens are rejected without fallback iden… 0.10s
✓ logout is safe to repeat and does not leak token state 0.04s
FAIL Tests\Feature\Api\V1\FullSurface\ApiReferentialIntegrityAndForeignKeyContractTest
⨯ mutations with missing foreign keys fail cleanly not with database… 0.06s
✓ delete routes for parent records protect children or fail cleanly 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiRelationshipCardinalityContractTest
✓ routes expect single ids do not crash when receiving arrays or obje… 0.19s
PASS Tests\Feature\Api\V1\FullSurface\ApiReportConsistencyAndAggregationExpansionTest
✓ report routes handle date window filter and group by combinations 0.27s
✓ parent and teacher report access is scoped not global 0.12s
PASS Tests\Feature\Api\V1\FullSurface\ApiReportExportPrivacyAndAggregationContractTest
✓ teacher and parent report exports are scoped to their assignments 0.11s
✓ aggregate dashboard numbers do not include other family details for… 0.07s
FAIL Tests\Feature\Api\V1\FullSurface\ApiReportMathAndFinancialInvariantContractTest
✓ financial endpoints reject non decimal and currency confusion input… 0.34s
⨯ report filters do not create negative or impossible aggregation win… 0.11s
FAIL Tests\Feature\Api\V1\FullSurface\ApiRequestHeaderSpoofingContractTest
⨯ forwarded and override headers do not bypass authorization 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiRoleWorkflowNegativeMatrixContractTest
✓ each non admin actor is blocked from administrative mutations 0.18s
⨯ actor specific read routes do not collapse into admin visible data 0.04s
✓ suspended disabled or unverified users do not gain api access 0.08s
FAIL Tests\Feature\Api\V1\FullSurface\ApiRouteNamingVersioningAndHygieneTest
✓ api routes do not use debug or temporary names 0.05s
⨯ versioned api routes stay inside v1 or documented legacy aliases 0.05s
✓ duplicate uri method pairs do not exist 0.04s
✓ route placeholders use consistent identifier names 0.04s
FAIL Tests\Feature\Api\V1\FullSurface\ApiRouteParameterAbuseContractTest
⨯ parameterized routes reject path traversal and script values cleanl… 0.05s
⨯ parameterized routes fail cleanly for overflowing integer ids 0.10s
FAIL Tests\Feature\Api\V1\FullSurface\ApiRouteUseCaseCatalogCompletenessTest
⨯ every api route is owned by an explicit user journey 0.02s
✓ each declared journey has at least one registered route 0.01s
FAIL Tests\Feature\Api\V1\FullSurface\ApiSchemaKeyStabilityExpansionContractTest
⨯ core resource success payloads keep identity and display keys 0.06s
✓ error payloads keep client actionable fields 0.37s
FAIL Tests\Feature\Api\V1\FullSurface\ApiSchoolCalendarAcademicBoundaryExpansionTest
✓ academic routes reject dates outside school year without server err… 0.57s
⨯ semester and term values are not free form privilege channels 0.07s
FAIL Tests\Feature\Api\V1\FullSurface\ApiSchoolOperationsRegressionBackstopTest
⨯ administrator can probe core school operations without route level… 0.11s
✓ user facing portals have at least one reachable read contract per a… 0.21s
PASS Tests\Feature\Api\V1\FullSurface\ApiSearchIndexAndAutocompleteContractTest
✓ search autocomplete and lookup routes handle empty short and hostil… 0.08s
✓ cross domain search does not bypass role scope 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiSecurityAndTransportContractTest
⨯ authenticated api routes do not accept plain browser session assump… 0.06s
⨯ state changing api routes reject wrong http method cleanly 0.05s
✓ options preflight for major domains is controlled 0.04s
PASS Tests\Feature\Api\V1\FullSurface\ApiSerializationSensitiveDataRedactionContractTest
✓ successful api responses never serialize sensitive user or payment… 0.19s
✓ error responses do not echo credentials or uploaded file contents 0.09s
FAIL Tests\Feature\Api\V1\FullSurface\ApiSoftDeleteRestoreArchiveLifecycleContractTest
⨯ archive restore and unarchive routes are controlled and role protec… 0.06s
⨯ destructive soft delete style routes tolerate repeated requests 0.05s
PASS Tests\Feature\Api\V1\FullSurface\ApiSortingFieldSelectionAndIncludeContractTest
✓ list routes handle sort fields includes and sparse fieldsets 0.64s
FAIL Tests\Feature\Api\V1\FullSurface\ApiTenantSchoolYearAndSemesterIsolationContractTest
⨯ school year scoped routes reject foreign or closed school year cont… 0.08s
✓ cross school year filters do not return unscoped private data 0.11s
FAIL Tests\Feature\Api\V1\FullSurface\ApiTimezoneCalendarRecurrenceDepthContractTest
⨯ calendar and schedule routes reject ambiguous recurrence and timezo… 0.15s
PASS Tests\Feature\Api\V1\FullSurface\ApiUnicodeNormalizationAndInputContractTest
✓ text inputs accept or reject unicode cleanly without corrupting jso… 0.15s
✓ emails and phone fields reject visually confusable values cleanly 0.09s
PASS Tests\Feature\Api\V1\FullSurface\ApiUrlFetchSsrfAndCallbackSafetyContractTest
✓ url accepting routes reject internal network targets cleanly 0.16s
PASS Tests\Feature\Api\V1\FullSurface\ApiWebhookExternalProviderAndCallbackContractTest
✓ external callback routes reject unsigned or malformed payloads 0.05s
✓ external provider status routes never expose provider secrets 0.07s
PASS Tests\Feature\Api\V1\FullSurface\ApiWebhookReplayAndSignatureDepthContractTest
✓ external callback routes reject missing bad and replayed signatures… 0.05s
FAIL Tests\Feature\Api\V1\FullSurface\ApiWriteAuditAndTimestampContractTest
⨯ successful create responses expose identifier or resource envelope 0.13s
✓ successful write responses do not emit broken timestamp fields 0.11s
⨯ audit like routes are not publicly mutable 0.05s
PASS Tests\Feature\Api\V1\Grading\GradingControllerTest
✓ overview returns grading data 0.02s
✓ toggle lock locks section 0.03s
PASS Tests\Feature\Api\V1\Grading\HomeworkTrackingControllerTest
✓ index returns tracking payload 0.02s
PASS Tests\Feature\Api\V1\Incidents\IncidentControllerTest
✓ current returns incidents and grades 0.02s
✓ store and close moves incident to history 0.02s
PASS Tests\Feature\Api\V1\Inventory\InventoryCategoriesControllerTest
✓ index returns categories 0.02s
✓ store creates category 0.02s
✓ update changes category 0.02s
✓ destroy deletes category 0.02s
✓ validation fails 0.02s
PASS Tests\Feature\Api\V1\Inventory\InventoryItemsControllerTest
✓ index returns items 0.03s
✓ show returns item 0.02s
✓ store creates item 0.02s
✓ update changes item 0.02s
✓ destroy deletes item 0.01s
✓ audit updates classroom item 0.02s
✓ adjust creates movement 0.02s
✓ summary returns aggregates 0.02s
✓ summary all returns rows 0.02s
✓ teacher distribution endpoints 0.02s
✓ validation fails for store 0.02s
✓ requires authentication 0.02s
PASS Tests\Feature\Api\V1\Inventory\InventoryMovementsControllerTest
✓ index returns movements 0.02s
✓ store creates movement 0.02s
✓ update changes movement 0.02s
✓ destroy deletes movement 0.01s
✓ bulk delete removes movements 0.02s
PASS Tests\Feature\Api\V1\Inventory\SuppliersControllerTest
✓ index returns suppliers 0.02s
✓ store creates supplier 0.02s
✓ update changes supplier 0.02s
✓ destroy deletes supplier 0.02s
PASS Tests\Feature\Api\V1\Inventory\SupplyCategoriesControllerTest
✓ index returns categories 0.02s
✓ store creates category 0.02s
✓ update changes category 0.01s
✓ destroy deletes category 0.02s
PASS Tests\Feature\Api\V1\Messaging\MessagesControllerTest
✓ inbox requires auth 0.01s
✓ store creates message 0.03s
✓ show marks read 0.02s
✓ update changes status 0.02s
✓ destroy marks trashed 0.02s
✓ recipients teacher returns list 0.02s
✓ validation rejects missing subject 0.02s
✓ show forbidden for other users 0.02s
PASS Tests\Feature\Api\V1\Notifications\NotificationControllerTest
✓ index requires authentication 0.02s
✓ index returns notifications 0.02s
✓ show returns notification 0.02s
✓ store creates notification 0.02s
✓ store validates payload 0.02s
✓ store handles service exception 0.02s
✓ mark read updates user notification 0.02s
✓ active and deleted lists 0.02s
✓ update and delete notification 0.02s
✓ restore notification 0.02s
FAIL Tests\Feature\Api\V1\Parents\AuthorizedUsersControllerTest
✓ index requires authentication 0.02s
✓ index is forbidden for non parent users 0.03s
⨯ index returns only the parents own authorized users 0.03s
✓ show returns 404 for unknown authorized user 0.03s
✓ show returns 404 for another parents authorized user 0.03s
✓ destroy deletes the parents authorized user 0.02s
✓ parent cannot delete another parents authorized user 0.03s
FAIL Tests\Feature\Api\V1\Parents\ParentAttendanceReportControllerTest
⨯ form returns students and sundays 0.02s
⨯ submit creates report and attendance 0.02s
⨯ check existing returns rows 0.02s
⨯ update report updates reason 0.01s
FAIL Tests\Feature\Api\V1\Parents\ParentControllerTest
⨯ attendance returns rows 0.02s
⨯ registration creates student and contact 0.02s
PASS Tests\Feature\Api\V1\PrintRequests\PrintRequestsWorkflowTest
✓ teacher can create hand copy request and admin can advance statuses 0.03s
✓ admin status rejects invalid transition 0.02s
✓ teacher routes reject non teacher roles and admin routes reject tea… 0.02s
✓ teacher cannot update delete or download another teachers request 0.02s
✓ teacher cannot delete request after processing has started 0.01s
✓ upload requires valid file and page selection format 0.01s
✓ teacher can upload and download own file and admin can download any… 0.02s
PASS Tests\Feature\Api\V1\Promotions\ParentPromotionControllerTest
✓ overview returns actionable records for parent 0.02s
✓ parent completes full enrollment flow 0.03s
✓ parent cannot view other parents promotion 0.02s
✓ unauthenticated request is unauthorized 0.01s
PASS Tests\Feature\Api\V1\Public\PublicWinnersControllerTest
✓ competition index is public and returns published competitions 0.02s
✓ competition index returns empty collection when none published 0.01s
✓ competition show returns payload for published competition 0.01s
✓ competition show returns 404 for unknown competition 0.02s
✓ competition show returns 404 for unpublished competition 0.01s
PASS Tests\Feature\Api\V1\Reports\FilesControllerTest
✓ receipt meta returns file payload 0.02s
✓ exam draft teacher streams with download name 0.02s
PASS Tests\Feature\Api\V1\Reports\ReportCardsControllerTest
✓ meta returns expected payload 0.02s
✓ completeness returns summary and students 0.03s
✓ acknowledgement returns record 0.02s
✓ student report returns pdf 0.03s
✓ class report returns pdf 0.02s
✓ student report returns error when missing scores 0.02s
✓ completeness requires class section id 0.02s
✓ acknowledgement requires student id 0.02s
✓ requires authentication 0.01s
PASS Tests\Feature\Api\V1\Reports\SlipPrinterControllerTest
✓ preview returns text 0.03s
✓ print creates log and returns pdf 0.06s
✓ logs returns rows 0.02s
PASS Tests\Feature\Api\V1\Reports\StickersControllerTest
✓ form data returns classes students and presets 0.02s
✓ students by class returns students 0.02s
✓ print returns pdf 0.02s
✓ print validation rejects missing selection 0.02s
✓ requires authentication 0.01s
FAIL Tests\Feature\Api\V1\Roles\RolePermissionControllerTest
✓ roles index returns roles 0.02s
✓ store role creates role 0.02s
✓ update role updates role 0.02s
✓ delete role removes role 0.02s
✓ users index returns users with roles 0.02s
✓ assign roles updates user roles 0.02s
✓ permissions crud 0.02s
✓ role permissions update 0.01s
✓ validation rejects invalid role payload 0.01s
⨯ store role returns error on service exception 0.02s
✓ requires authentication 0.01s
PASS Tests\Feature\Api\V1\Roles\RoleSwitcherControllerTest
✓ index returns roles 0.03s
✓ switch sets role 0.02s
✓ requires authentication 0.01s
✓ switch rejects role that user does not have 0.02s
✓ switch validates empty role payload 0.02s
✓ index returns not found when authenticated user has no roles 0.02s
PASS Tests\Feature\Api\V1\ScannerControllerTest
✓ process requires a badge code 0.02s
✓ process returns 404 for unknown badge 0.01s
✓ process accepts alternative badge field names 0.01s
FAIL Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest
⨯ preview close returns promotion and balance preview 0.03s
✓ parent cannot close school year 0.02s
✓ school year closure routes have explicit permission middleware 0.01s
⨯ admin can create draft school year via api 0.02s
⨯ admin can update draft school year via api 0.02s
⨯ close school year creates new active year enrollment and balance tr… 0.02s
⨯ closed school year blocks legacy invoice generation 0.02s
PASS Tests\Feature\Api\V1\Scores\FinalControllerTest
✓ index returns final scores 0.02s
PASS Tests\Feature\Api\V1\Scores\HomeworkControllerTest
✓ index returns homework scores 0.03s
PASS Tests\Feature\Api\V1\Scores\MidtermControllerTest
✓ index returns midterm scores 0.02s
PASS Tests\Feature\Api\V1\Scores\ParticipationControllerTest
✓ index returns participation scores 0.03s
PASS Tests\Feature\Api\V1\Scores\ProjectControllerTest
✓ index returns project scores 0.02s
PASS Tests\Feature\Api\V1\Scores\QuizControllerTest
✓ index returns quiz scores 0.03s
PASS Tests\Feature\Api\V1\Scores\ScoreCommentControllerTest
✓ store rejects short comment 0.02s
✓ index returns comments 0.02s
PASS Tests\Feature\Api\V1\Scores\ScoreControllerTest
✓ overview returns students 0.02s
✓ lock creates grading lock 0.02s
PASS Tests\Feature\Api\V1\Scores\ScorePredictorControllerTest
✓ index returns predictions 0.02s
PASS Tests\Feature\Api\V1\Settings\ConfigurationControllerTest
✓ index returns configs 0.02s
✓ store creates config 0.02s
PASS Tests\Feature\Api\V1\Settings\EventControllerTest
✓ index requires authentication 0.02s
✓ index returns events 0.02s
✓ store creates event 0.02s
✓ store requires authentication 0.02s
✓ store validates payload 0.02s
✓ store handles service exception 0.02s
✓ update updates event 0.02s
✓ destroy deletes event 0.02s
✓ charges list returns data 0.02s
✓ update charges updates participation 0.02s
✓ students with charges returns students 0.02s
PASS Tests\Feature\Api\V1\Settings\PolicyControllerTest
✓ school policy endpoint returns payload 0.02s
✓ picture policy endpoint returns payload 0.01s
FAIL Tests\Feature\Api\V1\Settings\PreferencesControllerTest
⨯ show returns defaults 0.02s
⨯ store creates preferences 0.02s
⨯ list requires admin 0.02s
⨯ list returns rows for admin 0.02s
⨯ update for user by admin 0.02s
⨯ destroy requires admin 0.01s
⨯ destroy deletes preferences 0.01s
⨯ store validates payload 0.02s
FAIL Tests\Feature\Api\V1\Settings\SchoolCalendarControllerTest
✓ options returns event types and defaults 0.02s
✓ index returns events and meetings 0.02s
✓ show returns event 0.02s
✓ store creates event 0.02s
⨯ update updates event 0.02s
✓ destroy deletes event 0.02s
✓ store validation rejects invalid payload 0.02s
⨯ store returns error on service exception 0.01s
✓ requires authentication 0.02s
PASS Tests\Feature\Api\V1\Settings\SettingsControllerTest
✓ index requires admin 0.02s
✓ index returns settings 0.02s
✓ update validation rejects bad email 0.02s
✓ update persists settings 0.02s
PASS Tests\Feature\Api\V1\Staff\StaffControllerTest
✓ index requires admin 0.02s
✓ index returns staff 0.02s
✓ store creates staff 0.02s
✓ store validation 0.02s
✓ update modifies staff 0.02s
✓ destroy deletes staff 0.02s
PASS Tests\Feature\Api\V1\Students\StudentControllerTest
✓ assign and remove class 0.03s
✓ score card returns rows 0.02s
✓ store creates emergency contact for first parent 0.02s
✓ index returns students without parent filter 0.02s
PASS Tests\Feature\Api\V1\Subjects\SubjectCurriculumControllerTest
✓ index returns entries 0.02s
✓ store creates entry 0.02s
PASS Tests\Feature\Api\V1\Support\ContactControllerTest
✓ send requires valid payload 0.01s
✓ send returns success 0.02s
PASS Tests\Feature\Api\V1\Support\SupportControllerTest
✓ index requires auth 0.01s
✓ index returns requests 0.02s
✓ store validation 0.02s
✓ store creates request 0.02s
PASS Tests\Feature\Api\V1\System\DashboardControllerTest
✓ route requires authentication 0.02s
✓ route returns dashboard for role 0.02s
PASS Tests\Feature\Api\V1\System\DatabaseHealthControllerTest
✓ db check returns ok 0.01s
FAIL Tests\Feature\Api\V1\System\HealthControllerTest
⨯ health returns payload 0.02s
FAIL Tests\Feature\Api\V1\System\NavBuilderControllerTest
✓ menu returns items for roles 0.02s
✓ data requires admin 0.02s
✓ store creates nav item 0.02s
⨯ delete removes nav item 0.02s
⨯ reorder updates items 0.01s
FAIL Tests\Feature\Api\V1\System\SchoolIdControllerTest
✓ generate student returns id 0.02s
✓ generate user returns id 0.02s
⨯ assign sets user school id 0.02s
PASS Tests\Feature\Api\V1\System\SemesterRangeControllerTest
✓ school year range uses config dates 0.02s
✓ resolve returns semester for date 0.02s
PASS Tests\Feature\Api\V1\System\StatsControllerTest
✓ stats require authentication 0.02s
✓ stats index returns rows for authenticated user 0.02s
✓ stats index returns empty array when no stats 0.01s
PASS Tests\Feature\Api\V1\Teachers\TeacherControllerTest
✓ classes returns students and assignments 0.02s
✓ switch class returns active id 0.02s
✓ absence submit creates staff attendance 0.03s
PASS Tests\Feature\Api\V1\Ui\UiControllerTest
✓ style requires auth 0.01s
✓ style updates preferences 0.02s
PASS Tests\Feature\Api\V1\Users\UserControllerTest
✓ user list returns users with roles 0.03s
✓ create user creates user and role 0.02s
✓ login activity returns paginated results 0.02s
PASS Tests\Feature\Api\V1\Utilities\PhoneFormatterControllerTest
✓ format returns formatted phone 0.02s
✓ format rejects invalid number 0.02s
✓ format validates payload 0.02s
PASS Tests\Feature\Api\V1\Utilities\ProofreadControllerTest
✓ proofread requires authentication 0.01s
✓ proofread rejects empty text 0.01s
✓ proofread rejects text that is too long 0.02s
✓ proofread proxies languagetool and returns result 0.04s
✓ proofread returns 502 when upstream fails 0.01s
FAIL Tests\Feature\Api\V1\Whatsapp\WhatsappInviteControllerTest
✓ parent contacts endpoint returns contacts 0.02s
✓ parent contacts by class endpoint returns sections 0.02s
✓ send invites returns success when listener registered 0.02s
⨯ send invites returns error when no listener 0.02s
✓ membership update saves record 0.02s
✓ send invites validation rejects payload 0.01s
PASS Tests\Feature\Api\V1\Whatsapp\WhatsappLinkControllerTest
✓ index returns paginated links 0.02s
✓ show returns single link 0.02s
✓ store creates link 0.02s
✓ update updates link 0.02s
✓ destroy deletes link 0.01s
✓ store validation rejects invalid payload 0.01s
✓ requires authentication 0.02s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioAFamilyEnrollmentTest
⨯ admin onboards family through active enrollment 0.05s
⨯ parent cannot update unrelated student 0.05s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioBSundaySchoolDayTest
⨯ teacher submits attendance and parent views report 0.03s
✓ teacher cannot submit attendance for unassigned class 0.05s
✓ admin views daily attendance summary 0.04s
PASS Tests\Feature\Api\V1\Workflows\ScenarioCAcademicTermTest
✓ teacher enters scores admin locks grading and report card is genera… 0.05s
✓ teacher invalid homework score is rejected 0.03s
PASS Tests\Feature\Api\V1\Workflows\ScenarioDFamilyBillingTest
✓ admin runs invoice discount payment and reporting workflow 0.06s
PASS Tests\Feature\Api\V1\Workflows\ScenarioEFinanceEdgeTest
✓ admin carries forward balance and manages installments 0.06s
PASS Tests\Feature\Api\V1\Workflows\ScenarioFTeacherSubmissionTest
✓ admin detects missing submission and notifies teacher 0.05s
✓ duplicate notify requires valid payload 0.03s
PASS Tests\Feature\Api\V1\Workflows\ScenarioGPrintBadgeTest
✓ print request badge log and scan workflow 0.05s
PASS Tests\Feature\Api\V1\Workflows\ScenarioHSecurityUnauthorizedAccessTest
✓ cross role and anonymous access is blocked 0.07s
PASS Tests\Feature\Api\V1\Workflows\ScenarioIPublicAuthAndSystemUseCaseTest
✓ guest can use public content contact and health endpoints without a… 0.02s
✓ user can login read current profile and logout through api 0.03s
✓ invalid inactive and suspended login paths fail safely 0.03s
PASS Tests\Feature\Api\V1\Workflows\ScenarioJCrossModuleApiUseCaseSmokeTest
✓ admin can reach core operational dashboards without server errors 0.07s
✓ major mutating use cases validate bad payloads instead of crashing 0.06s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioKParentSelfServiceAndPrivacyTest
✓ parent reviews household data and updates contact details 0.05s
⨯ parent cannot mutate another family student or emergency contact 0.04s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioLTeacherAcademicOperationsTest
⨯ teacher manages class progress and homework scores end to end 0.05s
✓ unassigned teacher cannot view or update another teachers progress… 0.05s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioMAdministratorEnrollmentAndClassOperationsTest
⨯ admin builds classroom roster from parent registration to teacher a… 0.05s
✓ admin can reverse roster and teacher assignments without orphaning… 0.05s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioNCommunicationsAndSupportLifecycleTest
⨯ parent and teacher exchange message and read state is preserved 0.03s
⨯ public contact support ticket and admin support queue are connected 0.02s
PASS Tests\Feature\Api\V1\Workflows\ScenarioOInventoryFinanceAndAuditControlsTest
✓ admin tracks inventory item from creation to adjustment and summary 0.04s
✓ finance followup records notes promises and resolution for unpaid p… 0.05s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioPSettingsConfigurationAndCalendarGovernanceTest
✓ admin manages calendar event configuration and notification lifecyc… 0.03s
⨯ configuration admin crud keeps school year context explicit 0.03s
PASS Tests\Feature\Api\V1\Workflows\ScenarioQSchoolYearPromotionClosureLifecycleTest
✓ admin and parent work through promotion before year close 0.04s
✓ admin previews closes and reopens school year with balance transfer… 0.04s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioRAttendanceOperationsAndExceptionHandlingTest
⨯ teacher admin and staff handle attendance day end to end 0.05s
⨯ early dismissal late slip and violation tracking are connected 0.05s
⨯ attendance comment templates support create update delete and legac… 0.03s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioSScoringGradingAndReportCardLifecycleTest
⨯ teacher records every score type and admin reviews grading outputs 0.06s
⨯ grading locks and below sixty intervention are visible and mutable 0.05s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioTDocumentsPrintBadgesAndCertificatesLifecycleTest
⨯ teacher print request moves from upload to admin status and file ac… 0.05s
✓ badges stickers slips and certificates are generated or validated w… 0.14s
PASS Tests\Feature\Api\V1\Workflows\ScenarioUFinanceBillingPaymentRefundAndInstallmentLifecycleTest
✓ admin generates invoice records payment transaction and receipt not… 0.06s
✓ admin creates installment plan refund and balance carryforward deci… 0.05s
PASS Tests\Feature\Api\V1\Workflows\ScenarioVProcurementReimbursementAndSupplyLifecycleTest
✓ admin manages suppliers supply categories purchase order and receip… 0.03s
✓ reimbursement request batch lock export and mark donation flow 0.03s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioWAccessControlRolesNavigationAndPreferencesTest
⨯ admin creates role permission assigns user and builds navigation 0.04s
⨯ user preferences and role switcher preserve selected context 0.03s
✓ non admin cannot manage role permissions or admin nav builder 0.02s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioXPublicKioskScannerAndVerificationLifecycleTest
✓ public content documentation and policy endpoints are reachable wit… 0.04s
✓ badge scan and scanner process known and unknown codes safely 0.04s
⨯ public verification and invite tokens fail closed for invalid value… 0.01s
PASS Tests\Feature\Api\V1\Workflows\ScenarioYFamilyGuardianAuthorizedUserAndWhatsappLifecycleTest
✓ admin builds family links and manages guardian flags 0.05s
✓ parent authorized user invite and household privacy flow 0.04s
FAIL Tests\Feature\Api\V1\Workflows\ScenarioZLegacyAliasesValidationAndCompatibilityTest
✓ legacy teacher aliases match modern teacher and score surfaces 0.07s
✓ legacy post aliases validate payloads without 500s 0.06s
⨯ validation errors are structured for representative public and auth… 0.01s
⨯ legacy redirects and non versioned auth aliases remain available 0.01s
FAIL Tests\Feature\Api\V1\Workflows\StudentEnrollmentWorkflowTest
✓ admin creates account adds student and enrolls them 0.04s
⨯ admin can withdraw an enrolled student 0.03s
✓ creating a user requires a valid role 0.03s
✓ student registration requires first child contact details 0.02s
FAIL Tests\Feature\BulkUserRoleCreationTest
⨯ it creates one thousand parents teachers and admins through the ap… 11.44s
PASS Tests\Feature\Console\AttendanceCommandsTest
✓ attendance auto publish command runs 0.03s
✓ attendance recalculate summary command runs 0.01s
✓ attendance absentees summary command runs 0.01s
✓ attendance lates summary command runs 0.01s
PASS Tests\Feature\Console\DeleteUnverifiedUsersCommandTest
✓ command dispatches event for expired user 0.02s
PASS Tests\Feature\Console\PaymentsCommandsTest
✓ check missed payments command runs 0.01s
✓ monthly reminder command sends to email 0.01s
✓ send test payment notification command runs 0.01s
✓ sync paypal payments command runs 0.01s
PASS Tests\Feature\Console\SystemCommandsTest
✓ cleanup expired notifications command runs 0.01s
✓ cleanup password resets command runs 0.01s
✓ config update command runs 0.01s
✓ delete inactive users command runs 0.01s
PASS Tests\Feature\HealthEndpointTest
✓ health endpoint is reachable 0.03s
PASS Tests\Feature\Middleware\RequirePermissionMiddlewareTest
✓ denies when missing permission 0.03s
✓ allows when permission assigned 0.02s
PASS Tests\Feature\TeacherAbsenceVacationRouteTest
✓ authenticated teacher absence vacation route redirects to spa page 0.02s
✓ authenticated legacy teacher absence vacation route redirects to sp… 0.02s
PASS Tests\Feature\Web\AdminCalendarPageTest
✓ admin calendar view lists school calendar events for selected year 0.02s
PASS Tests\Feature\Web\SchoolYearAdminPageTest
✓ admin can view school year page 0.02s
✓ admin can create draft school year from page 0.02s
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\ApiDocsServiceTest > public boo… ClassIsFinalException
Class "App\Services\ApplicationUrlService" is declared "final" and cannot be doubled
at tests/Unit/ApiDocsServiceTest.php:14
10▕ class ApiDocsServiceTest extends TestCase
11▕ {
12▕ private function docsService(): ApiDocsService
13▕ {
➜ 14▕ $urls = $this->createMock(ApplicationUrlService::class);
15▕ $urls->method('docsSwaggerMergedJsonUrl')->with(false)->willReturn('/api/documentation/swagger.json');
16▕
17▕ return new ApiDocsService($urls);
18▕ }
1 tests/Unit/ApiDocsServiceTest.php:14
2 tests/Unit/ApiDocsServiceTest.php:22
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\ApiDocsServiceTest > full boots… ClassIsFinalException
Class "App\Services\ApplicationUrlService" is declared "final" and cannot be doubled
at tests/Unit/ApiDocsServiceTest.php:14
10▕ class ApiDocsServiceTest extends TestCase
11▕ {
12▕ private function docsService(): ApiDocsService
13▕ {
➜ 14▕ $urls = $this->createMock(ApplicationUrlService::class);
15▕ $urls->method('docsSwaggerMergedJsonUrl')->with(false)->willReturn('/api/documentation/swagger.json');
16▕
17▕ return new ApiDocsService($urls);
18▕ }
1 tests/Unit/ApiDocsServiceTest.php:14
2 tests/Unit/ApiDocsServiceTest.php:39
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\ApiLoginSecurityServiceTes… BindingResolutionException
Target class [config] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:1124
1120▕
1121▕ try {
1122▕ $reflector = new ReflectionClass($concrete);
1123▕ } catch (ReflectionException $e) {
➜ 1124▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
1125▕ }
1126▕
1127▕ // If the type is not instantiable, the developer is attempting to resolve
1128▕ // an abstract type such as an Interface or Abstract Class and there is
[2m+7 vendor frames [22m
8 app/Services/Auth/ApiLoginSecurityService.php:148
9 tests/Unit/ApiLoginSecurityServiceTest.php:43
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\ApiLoginSecurityServiceTes… BindingResolutionException
Target class [config] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:1124
1120▕
1121▕ try {
1122▕ $reflector = new ReflectionClass($concrete);
1123▕ } catch (ReflectionException $e) {
➜ 1124▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
1125▕ }
1126▕
1127▕ // If the type is not instantiable, the developer is attempting to resolve
1128▕ // an abstract type such as an Interface or Abstract Class and there is
[2m+7 vendor frames [22m
8 app/Services/Auth/ApiLoginSecurityService.php:148
9 tests/Unit/ApiLoginSecurityServiceTest.php:76
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\AttendanceEmailTemplateTest > g… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_absent, default, Default Subject,
Default
, 1, 2026-07-05 22:09:15, 2026-07-05 22:09:15))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/AttendanceEmailTemplateTest.php:15
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\AttendanceEmailTemplateTest > g… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_late, default, Late Default, Late default
, 1, 2026-07-05 22:09:15, 2026-07-05 22:09:15))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/AttendanceEmailTemplateTest.php:40
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\AttendanceEmailTemplateTest > g… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_present, no_answer, Inactive SMS, Inactive
, 0, 2026-07-05 22:09:15, 2026-07-05 22:09:15))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/AttendanceEmailTemplateTest.php:57
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\AttendanceEmailTemplateTest > g… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_unknown, default, Inactive Default, Inactive
, 0, 2026-07-05 22:09:15, 2026-07-05 22:09:15))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/AttendanceEmailTemplateTest.php:82
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\ClassPrepAdjustmentTest > model metadata is con…
Failed asserting that true is identical to false.
at tests/Unit/Models/ClassPrepAdjustmentTest.php:16
12▕ $model = new ClassPrepAdjustment;
13▕
14▕ $this->assertSame('class_prep_adjustments', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['class_section_id', 'item_name', 'adjustment', 'adjustable', 'school_year', 'created_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/ClassPrepAdjustmentTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\ClassPreparationLogTest > model metadata is con…
Failed asserting that true is identical to false.
at tests/Unit/Models/ClassPreparationLogTest.php:16
12▕ $model = new ClassPreparationLog;
13▕
14▕ $this->assertSame('class_preparation_log', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['class_section_id', 'class_section', 'school_year', 'prep_data', 'created_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/ClassPreparationLogTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\CommunicationLogTest > model metadata is conver…
Failed asserting that true is identical to false.
at tests/Unit/Models/CommunicationLogTest.php:16
12▕ $model = new CommunicationLog;
13▕
14▕ $this->assertSame('communication_logs', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['student_id', 'family_id', 'student_name', 'template_key', 'subject', 'body', 'recipients', 'cc', 'bcc', 'attachments', 'status', 'error_message', 'sent_by', 'metadata'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/CommunicationLogTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\EmailTemplateTest > get template retur… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_absent, default, Default Subject, Default
, 1, 2026-07-05 22:09:15, 2026-07-05 22:09:15))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/EmailTemplateTest.php:15
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\EmailTemplateTest > get template falls… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_late, default, Late Default, Late default
, 1, 2026-07-05 22:09:16, 2026-07-05 22:09:16))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/EmailTemplateTest.php:42
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\EmailTemplateTest > get template ignor… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_present, default, Present Default, Present
, 0, 2026-07-05 22:09:16, 2026-07-05 22:09:16))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/EmailTemplateTest.php:60
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\EmailTemplateTest > get template prefe… QueryException
SQLSTATE[HY000]: General error: 1 table email_templates has no column named created_at (Connection: sqlite, Database: :memory:, SQL: insert into "email_templates" ("code", "variant", "subject", "body_html", "is_active", "updated_at", "created_at") values (attendance_notice, default, Default Notice, Default
, 1, 2026-07-05 22:09:16, 2026-07-05 22:09:16))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Models/EmailTemplateTest.php:76
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\EventChargesTest > model metadata is converted
Failed asserting that two arrays are identical.
Array &0 [
0 => 'event_id',
- 1 => 'parent_id',
- 2 => 'student_id',
- 3 => 'participation',
- 4 => 'charged',
- 5 => 'semester',
- 6 => 'school_year',
- 7 => 'updated_by',
- 8 => 'created_at',
- 9 => 'updated_at',
+ 1 => 'event_name',
+ 2 => 'description',
+ 3 => 'amount',
+ 4 => 'parent_id',
+ 5 => 'student_id',
+ 6 => 'participation',
+ 7 => 'charged',
+ 8 => 'semester',
+ 9 => 'school_year',
+ 10 => 'updated_by',
+ 11 => 'created_at',
+ 12 => 'updated_at',
]
at tests/Unit/Models/EventChargesTest.php:17
13▕
14▕ $this->assertSame('event_charges', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
16▕ $this->assertSame(true, $model->timestamps);
➜ 17▕ $this->assertSame(['event_id', 'parent_id', 'student_id', 'participation', 'charged', 'semester', 'school_year', 'updated_by', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
21▕ {
1 tests/Unit/Models/EventChargesTest.php:17
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\ExamTest > model metadata is converted
Failed asserting that true is identical to false.
at tests/Unit/Models/ExamTest.php:16
12▕ $model = new Exam;
13▕
14▕ $this->assertSame('exams', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['student_id', 'student_school_id', 'class_section_id', 'exam_name', 'created_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/ExamTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\FinalExamTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/FinalExamTest.php:16
12▕ $model = new FinalExam;
13▕
14▕ $this->assertSame('final_exam', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['student_id', 'school_id', 'class_section_id', 'updated_by', 'score', 'semester', 'school_year', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/FinalExamTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\HomeworkTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/HomeworkTest.php:16
12▕ $model = new Homework;
13▕
14▕ $this->assertSame('homework', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['student_id', 'school_id', 'class_section_id', 'updated_by', 'homework_index', 'score', 'comment', 'semester', 'school_year', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/HomeworkTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\InvoiceTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/InvoiceTest.php:16
12▕ $model = new Invoice;
13▕
14▕ $this->assertSame('invoices', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['parent_id', 'invoice_number', 'total_amount', 'balance', 'paid_amount', 'has_discount', 'issue_date', 'due_date', 'status', 'description', 'school_year', 'created_at', 'updated_at', 'updated_by', 'semester'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/InvoiceTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\MidtermExamTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/MidtermExamTest.php:16
12▕ $model = new MidtermExam;
13▕
14▕ $this->assertSame('midterm_exam', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['student_id', 'school_id', 'class_section_id', 'updated_by', 'score', 'comment', 'semester', 'school_year', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/MidtermExamTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\ParticipationTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/ParticipationTest.php:16
12▕ $model = new Participation;
13▕
14▕ $this->assertSame('participation', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['student_id', 'school_id', 'class_section_id', 'updated_by', 'score', 'comment', 'semester', 'school_year', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/ParticipationTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\PasswordResetRequestTest > model metadata is co…
Failed asserting that true is identical to false.
at tests/Unit/Models/PasswordResetRequestTest.php:16
12▕ $model = new PasswordResetRequest;
13▕
14▕ $this->assertSame('password_reset_requests', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['ip_address', 'requested_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/PasswordResetRequestTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\PasswordResetTest > model metadata is converted
Failed asserting that true is identical to false.
at tests/Unit/Models/PasswordResetTest.php:16
12▕ $model = new PasswordReset;
13▕
14▕ $this->assertSame('password_resets', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['email', 'token', 'created_at', 'expires_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/PasswordResetTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\PayPalPaymentTest > model metadata is converted
Failed asserting that true is identical to false.
at tests/Unit/Models/PayPalPaymentTest.php:16
12▕ $model = new PayPalPayment;
13▕
14▕ $this->assertSame('paypal_payments', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['webhook_id', 'parent_school_id', 'order_id', 'transaction_id', 'status', 'amount', 'currency', 'paypal_fee', 'net_amount', 'payer_email', 'merchant_id', 'event_type', 'summary', 'raw_payload', 'synced', 'sync_attempts', 'created_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/PayPalPaymentTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\PaymentTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/PaymentTest.php:16
12▕ $model = new Payment;
13▕
14▕ $this->assertSame('payments', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['parent_id', 'invoice_id', 'total_amount', 'paid_amount', 'balance', 'number_of_installments', 'transaction_id', 'check_file', 'check_number', 'payment_method', 'payment_date', 'semester', 'school_year', 'status', 'updated_by', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/PaymentTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\PurchaseOrderItemTest > model metadata is conve…
Failed asserting that two arrays are identical.
Array &0 [
0 => 'purchase_order_id',
1 => 'supply_id',
- 2 => 'description',
- 3 => 'quantity',
- 4 => 'received_qty',
- 5 => 'unit_cost',
+ 2 => 'inventory_item_id',
+ 3 => 'description',
+ 4 => 'quantity',
+ 5 => 'received_qty',
+ 6 => 'unit_cost',
]
at tests/Unit/Models/PurchaseOrderItemTest.php:17
13▕
14▕ $this->assertSame('purchase_order_items', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
16▕ $this->assertSame(true, $model->timestamps);
➜ 17▕ $this->assertSame(['purchase_order_id', 'supply_id', 'description', 'quantity', 'received_qty', 'unit_cost'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
21▕ {
1 tests/Unit/Models/PurchaseOrderItemTest.php:17
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\QuizTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/QuizTest.php:16
12▕ $model = new Quiz;
13▕
14▕ $this->assertSame('quiz', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['student_id', 'school_id', 'class_section_id', 'updated_by', 'quiz_index', 'score', 'comment', 'semester', 'school_year', 'created_at', 'updated_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/QuizTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\ScoreCommentTest > model metadata is converted
Failed asserting that true is identical to false.
at tests/Unit/Models/ScoreCommentTest.php:16
12▕ $model = new ScoreComment;
13▕
14▕ $this->assertSame('score_comments', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['student_id', 'class_section_id', 'score_type', 'semester', 'school_year', 'comment', 'comment_review', 'reviewed_by', 'commented_by', 'created_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/ScoreCommentTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\SectionTest > model metadata is converted
Failed asserting that true is identical to false.
at tests/Unit/Models/SectionTest.php:16
12▕ $model = new Section;
13▕
14▕ $this->assertSame('sections', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(false, $model->timestamps);
17▕ $this->assertSame(['section_name', 'description', 'updated_at', 'updated_by'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/SectionTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\StaffTest > model metadata is converted
Failed asserting that false is identical to true.
at tests/Unit/Models/StaffTest.php:16
12▕ $model = new Staff;
13▕
14▕ $this->assertSame('staff', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
➜ 16▕ $this->assertSame(true, $model->timestamps);
17▕ $this->assertSame(['firstname', 'lastname', 'email', 'phone', 'role_name', 'school_year', 'active_role', 'created_at', 'updated_at', 'user_id'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
1 tests/Unit/Models/StaffTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\TeacherTest > model metadata is converted
Failed asserting that two arrays are identical.
Array &0 [
- 0 => 'school_id',
- 1 => 'firstname',
+ 0 => 'password',
+ 1 => 'account_id',
2 => 'lastname',
- 3 => 'gender',
- 4 => 'cellphone',
- 5 => 'email',
- 6 => 'address_street',
- 7 => 'apt',
- 8 => 'city',
- 9 => 'state',
- 10 => 'zip',
- 11 => 'accept_school_policy',
- 12 => 'is_verified',
- 13 => 'status',
- 14 => 'is_suspended',
- 15 => 'failed_attempts',
- 16 => 'password',
- 17 => 'created_at',
- 18 => 'updated_at',
- 19 => 'token',
- 20 => 'account_id',
- 21 => 'user_type',
- 22 => 'semester',
- 23 => 'school_year',
- 24 => 'rfid_tag',
- 25 => 'last_failed_at',
+ 3 => 'firstname',
+ 4 => 'gender',
+ 5 => 'cellphone',
+ 6 => 'email',
+ 7 => 'address_street',
+ 8 => 'apt',
+ 9 => 'city',
+ 10 => 'state',
+ 11 => 'zip',
+ 12 => 'accept_school_policy',
+ 13 => 'user_type',
+ 14 => 'rfid_tag',
+ 15 => 'school_id',
+ 16 => 'failed_attempts',
+ 17 => 'last_failed_at',
+ 18 => 'semester',
+ 19 => 'school_year',
+ 20 => 'status',
+ 21 => 'is_suspended',
+ 22 => 'is_verified',
+ 23 => 'token',
+ 24 => 'updated_at',
+ 25 => 'created_at',
]
at tests/Unit/Models/TeacherTest.php:17
13▕
14▕ $this->assertSame('users', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
16▕ $this->assertSame(true, $model->timestamps);
➜ 17▕ $this->assertSame(['school_id', 'firstname', 'lastname', 'gender', 'cellphone', 'email', 'address_street', 'apt', 'city', 'state', 'zip', 'accept_school_policy', 'is_verified', 'status', 'is_suspended', 'failed_attempts', 'password', 'created_at', 'updated_at', 'token', 'account_id', 'user_type', 'semester', 'school_year', 'rfid_tag', 'last_failed_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
21▕ {
1 tests/Unit/Models/TeacherTest.php:17
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Models\UserTest > model metadata is converted
Failed asserting that two arrays are identical.
Array &0 [
- 0 => 'school_id',
- 1 => 'firstname',
+ 0 => 'password',
+ 1 => 'account_id',
2 => 'lastname',
- 3 => 'gender',
- 4 => 'cellphone',
- 5 => 'email',
- 6 => 'address_street',
- 7 => 'apt',
- 8 => 'city',
- 9 => 'state',
- 10 => 'zip',
- 11 => 'accept_school_policy',
- 12 => 'is_verified',
- 13 => 'status',
- 14 => 'is_suspended',
- 15 => 'failed_attempts',
- 16 => 'password',
- 17 => 'created_at',
- 18 => 'updated_at',
- 19 => 'token',
- 20 => 'account_id',
- 21 => 'user_type',
- 22 => 'semester',
- 23 => 'school_year',
- 24 => 'rfid_tag',
- 25 => 'last_failed_at',
+ 3 => 'firstname',
+ 4 => 'gender',
+ 5 => 'cellphone',
+ 6 => 'email',
+ 7 => 'address_street',
+ 8 => 'apt',
+ 9 => 'city',
+ 10 => 'state',
+ 11 => 'zip',
+ 12 => 'accept_school_policy',
+ 13 => 'user_type',
+ 14 => 'rfid_tag',
+ 15 => 'school_id',
+ 16 => 'failed_attempts',
+ 17 => 'last_failed_at',
+ 18 => 'semester',
+ 19 => 'school_year',
+ 20 => 'status',
+ 21 => 'is_suspended',
+ 22 => 'is_verified',
+ 23 => 'token',
+ 24 => 'updated_at',
+ 25 => 'created_at',
]
at tests/Unit/Models/UserTest.php:17
13▕
14▕ $this->assertSame('users', $model->getTable());
15▕ $this->assertSame('id', $model->getKeyName());
16▕ $this->assertSame(true, $model->timestamps);
➜ 17▕ $this->assertSame(['school_id', 'firstname', 'lastname', 'gender', 'cellphone', 'email', 'address_street', 'apt', 'city', 'state', 'zip', 'accept_school_policy', 'is_verified', 'status', 'is_suspended', 'failed_attempts', 'password', 'created_at', 'updated_at', 'token', 'account_id', 'user_type', 'semester', 'school_year', 'rfid_tag', 'last_failed_at'], $model->getFillable());
18▕ }
19▕
20▕ public function test_model_class_loads(): void
21▕ {
1 tests/Unit/Models/UserTest.php:17
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Resources\Messaging\MessageResourceTes… QueryException
SQLSTATE[HY000]: General error: 1 no such table: users (Connection: sqlite, Database: :memory:, SQL: select * from "users" where "users"."id" = 2 limit 1)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+19 vendor frames [22m
20 app/Http/Resources/Messaging/MessageResource.php:27
21 tests/Unit/Resources/Messaging/MessageResourceTest.php:28
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Resources\Staff\StaffResourceTest > resource returns e…
Failed asserting that null is identical to 1.
at tests/Unit/Resources/Staff/StaffResourceTest.php:26
22▕ ]);
23▕
24▕ $payload = (new StaffResource($staff))->toArray(request());
25▕
➜ 26▕ $this->assertSame(1, $payload['id']);
27▕ $this->assertSame('teacher', $payload['role_name']);
28▕ }
29▕ }
30▕
1 tests/Unit/Resources/Staff/StaffResourceTest.php:26
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Resources\Support\SupportRequestResourceTest > resourc…
Failed asserting that null is identical to 1.
at tests/Unit/Resources/Support/SupportRequestResourceTest.php:25
21▕ ]);
22▕
23▕ $payload = (new SupportRequestResource($model))->toArray(request());
24▕
➜ 25▕ $this->assertSame(1, $payload['id']);
26▕ $this->assertSame('Help', $payload['subject']);
27▕ }
28▕ }
29▕
1 tests/Unit/Resources/Support/SupportRequestResourceTest.php:25
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Administrator\Administrat… ArgumentCountError
Too few arguments to function App\Services\Administrator\AdministratorAbsenceService::__construct(), 5 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Administrator/AdministratorAbsenceServiceTest.php on line 28 and exactly 6 expected
at app/Services/Administrator/AdministratorAbsenceService.php:23
19▕ protected User $userModel,
20▕ protected StaffAttendance $staffAttendanceModel,
21▕ protected SemesterRangeService $semesterRangeService,
22▕ protected StaffTimeOffLinkService $staffTimeOffLinkService,
➜ 23▕ protected ApplicationUrlService $urls,
24▕ ) {}
25▕
26▕ public function getAbsenceFormData(int $userId): array
27▕ {
1 app/Services/Administrator/AdministratorAbsenceService.php:23
2 tests/Unit/Services/Administrator/AdministratorAbsenceServiceTest.php:28
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Administrator\Administrat… ArgumentCountError
Too few arguments to function App\Services\Administrator\AdministratorEnrollmentEventService::__construct(), 0 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Administrator/AdministratorEnrollmentEventServiceTest.php on line 18 and exactly 1 expected
at app/Services/Administrator/AdministratorEnrollmentEventService.php:12
8▕
9▕ class AdministratorEnrollmentEventService
10▕ {
11▕ public function __construct(
➜ 12▕ private ApplicationUrlService $urls,
13▕ ) {}
14▕
15▕ public function dispatchGroupedEvents(
16▕ array $groupsByParentStatus,
1 app/Services/Administrator/AdministratorEnrollmentEventService.php:12
2 tests/Unit/Services/Administrator/AdministratorEnrollmentEventServiceTest.php:18
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Administrator\TeacherSubm… ArgumentCountError
Too few arguments to function App\Services\Administrator\TeacherSubmissionNotificationService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Administrator/TeacherSubmissionNotificationServiceTest.php on line 22 and exactly 3 expected
at app/Services/Administrator/TeacherSubmissionNotificationService.php:19
15▕ {
16▕ public function __construct(
17▕ protected AdministratorSharedService $shared,
18▕ protected TeacherSubmissionSupportService $support,
➜ 19▕ protected ApplicationUrlService $urls,
20▕ ) {}
21▕
22▕ public function send(Request $request, int $adminId): array
23▕ {
1 app/Services/Administrator/TeacherSubmissionNotificationService.php:19
2 tests/Unit/Services/Administrator/TeacherSubmissionNotificationServiceTest.php:22
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Administrator\Teacher… BadMethodCallException
Received Mockery_4_App_Services_Administrator_AdministratorSharedService::teacherClassSupportsSemester(), but no expectations were specified
at app/Services/Administrator/TeacherSubmissionReportService.php:23
19▕ public function report(array $filters = []): array
20▕ {
21▕ $semester = $this->shared->getSemester($filters['semester'] ?? null);
22▕ $schoolYear = $this->shared->getSchoolYear($filters['school_year'] ?? null);
➜ 23▕ $teacherClassSupportsSemester = $this->shared->teacherClassSupportsSemester();
24▕
25▕ $assignmentQuery = DB::table('teacher_class as tc')
26▕ ->select([
27▕ 'tc.class_section_id',
1 app/Services/Administrator/TeacherSubmissionReportService.php:23
2 tests/Unit/Services/Administrator/TeacherSubmissionReportServiceTest.php:38
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Assignment\AssignmentSectionS… ErrorException
Undefined array key 1
at tests/Unit/Services/Assignment/AssignmentSectionServiceTest.php:29
25▕
26▕ $service = new AssignmentSectionService(new ClassSection);
27▕ $map = $service->getSectionNamesMap([1]);
28▕
➜ 29▕ $this->assertSame('1-A', $map[1]);
30▕ }
31▕ }
32▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\AssignmentServiceTest > get assignments overv…
Failed asserting that two strings are identical.
-'Alpha Section'
+''
at tests/Unit/Services/AssignmentServiceTest.php:147
143▕
144▕ $section = $result['classSections'][0];
145▕
146▕ $this->assertSame($this->sectionA->id, $section['class_section_id']);
➜ 147▕ $this->assertSame('Alpha Section', $section['class_section_name']);
148▕ $this->assertSame(['John Doe'], $section['main_teachers']);
149▕ $this->assertSame(['Jane Smith'], $section['teacher_assistants']);
150▕ $this->assertSame('Fall', $section['semester']);
151▕ $this->assertSame('2025-2026', $section['school_year']);
1 tests/Unit/Services/AssignmentServiceTest.php:147
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\AssignmentServiceTest > get assignments overv…
Failed asserting that two strings are identical.
-'Alpha Section'
+''
at tests/Unit/Services/AssignmentServiceTest.php:233
229▕
230▕ $result = $this->service->getAssignmentsOverview();
231▕
232▕ $this->assertCount(2, $result['classSections']);
➜ 233▕ $this->assertSame('Alpha Section', $result['classSections'][0]['class_section_name']);
234▕ $this->assertSame('Beta Section', $result['classSections'][1]['class_section_name']);
235▕ }
236▕
237▕ public function test_get_assignments_overview_collects_school_years_descending(): void
1 tests/Unit/Services/AssignmentServiceTest.php:233
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\AssignmentServiceTest > get class assignment…
Failed asserting that two strings are identical.
-'Alpha Section'
+''
at tests/Unit/Services/AssignmentServiceTest.php:366
362▕
363▕ $this->assertSame('Fall', $result['semester']);
364▕ $this->assertSame('2025-2026', $result['school_year']);
365▕ $this->assertCount(2, $result['classSections']);
➜ 366▕ $this->assertSame('Alpha Section', $result['classSections'][0]['class_section_name']);
367▕ $this->assertSame('Beta Section', $result['classSections'][1]['class_section_name']);
368▕ }
369▕
370▕ public function test_get_class_assignment_data_deduplicates_teacher_names(): void
1 tests/Unit/Services/AssignmentServiceTest.php:366
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Attendance\AttendanceDailySummaryServiceTest…
Failed asserting that 0 is identical to 1.
at tests/Unit/Services/Attendance/AttendanceDailySummaryServiceTest.php:66
62▕ $service = new AttendanceDailySummaryService($notifier, $email);
63▕
64▕ $count = $service->sendAbsenteesSummary();
65▕
➜ 66▕ $this->assertSame(1, $count);
67▕ }
68▕ }
69▕
1 tests/Unit/Services/Attendance/AttendanceDailySummaryServiceTest.php:66
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Attendance\AttendanceSemesterRangeServiceTest…
Failed asserting that two arrays are identical.
Array &0 [
- 0 => '2025-09-21',
- 1 => '2026-01-18',
+ 0 => '2025-09-01',
+ 1 => '2026-01-24',
]
at tests/Unit/Services/Attendance/AttendanceSemesterRangeServiceTest.php:18
14▕ {
15▕ $service = new SemesterRangeService;
16▕ $range = $service->getSemesterRange('2025-2026', 'fall');
17▕
➜ 18▕ $this->assertSame(['2025-09-21', '2026-01-18'], $range);
19▕ }
20▕
21▕ public function test_build_sunday_list_returns_sundays(): void
22▕ {
1 tests/Unit/Services/Attendance/AttendanceSemesterRangeServiceTest.php:18
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Attendance\LateSlipLogCommand… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: late_slip_logs.printed_at (Connection: sqlite, Database: :memory:, SQL: insert into "late_slip_logs" ("school_year", "semester", "student_name", "slip_date", "time_in", "grade", "reason", "admin_name") values (2025-2026, Fall, Student X, 2025-09-01 00:00:00, 08:05:00, 4, Traffic, Admin User))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 tests/Unit/Services/Attendance/LateSlipLogCommandServiceTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Attendance\LateSlipLogQuerySe… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: late_slip_logs.printed_at (Connection: sqlite, Database: :memory:, SQL: insert into "late_slip_logs" ("school_year", "semester", "slip_date", "student_name") values (2025-2026, Fall, 2025-09-01, Student A), (2025-2026, Fall, 2025-10-01, Student B))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Attendance/LateSlipLogQueryServiceTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Attendance\Semest… BindingResolutionException
Target class [config] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:1124
1120▕
1121▕ try {
1122▕ $reflector = new ReflectionClass($concrete);
1123▕ } catch (ReflectionException $e) {
➜ 1124▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
1125▕ }
1126▕
1127▕ // If the type is not instantiable, the developer is attempting to resolve
1128▕ // an abstract type such as an Interface or Abstract Class and there is
[2m+17 vendor frames [22m
18 app/Models/Configuration.php:50
19 app/Services/Attendance/SemesterRangeService.php:124
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\AttendanceTracking\Attend… ArgumentCountError
Too few arguments to function App\Services\AttendanceTracking\AttendanceTrackingService::__construct(), 0 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/AttendanceTracking/AttendanceTrackingServiceTest.php on line 15 and exactly 4 expected
at app/Services/AttendanceTracking/AttendanceTrackingService.php:16
12▕ */
13▕ class AttendanceTrackingService
14▕ {
15▕ public function __construct(
➜ 16▕ protected AttendancePendingViolationService $pendingViolationService,
17▕ protected AttendanceCaseQueryService $caseQueryService,
18▕ protected AttendanceNotificationWorkflowService $workflowService,
19▕ protected AttendanceCommunicationSupportService $communicationSupportService,
20▕ ) {}
1 app/Services/AttendanceTracking/AttendanceTrackingService.php:16
2 tests/Unit/Services/AttendanceTracking/AttendanceTrackingServiceTest.php:15
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Auth\RegistrationServiceT… ArgumentCountError
Too few arguments to function App\Services\Auth\RegistrationService::__construct(), 4 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Auth/RegistrationServiceTest.php on line 44 and exactly 5 expected
at app/Services/Auth/RegistrationService.php:22
18▕ private EmailService $emailService,
19▕ private SchoolIdService $schoolIdService,
20▕ private RegistrationFormatterService $formatter,
21▕ private RegistrationCaptchaService $captchaService,
➜ 22▕ private ApplicationUrlService $urls,
23▕ ) {}
24▕
25▕ public function register(array $payload): array
26▕ {
1 app/Services/Auth/RegistrationService.php:22
2 tests/Unit/Services/Auth/RegistrationServiceTest.php:44
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Auth\RegistrationServiceT… ArgumentCountError
Too few arguments to function App\Services\Auth\RegistrationService::__construct(), 4 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Auth/RegistrationServiceTest.php on line 124 and exactly 5 expected
at app/Services/Auth/RegistrationService.php:22
18▕ private EmailService $emailService,
19▕ private SchoolIdService $schoolIdService,
20▕ private RegistrationFormatterService $formatter,
21▕ private RegistrationCaptchaService $captchaService,
➜ 22▕ private ApplicationUrlService $urls,
23▕ ) {}
24▕
25▕ public function register(array $payload): array
26▕ {
1 app/Services/Auth/RegistrationService.php:22
2 tests/Unit/Services/Auth/RegistrationServiceTest.php:124
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Billing\BalanceCalculationServiceTest > calcu…
Failed asserting that 0.0 is identical to 100.0.
at tests/Unit/Services/Billing/BalanceCalculationServiceTest.php:105
101▕ ], $parentId);
102▕
103▕ $this->assertSame($parentId, $result['parent_id']);
104▕ $this->assertSame(550.0, $result['charges']['tuition']);
➜ 105▕ $this->assertSame(100.0, $result['charges']['extra_charges']);
106▕ $this->assertSame(50.0, $result['charges']['event_charges']);
107▕ $this->assertSame(700.0, $result['charges']['total']);
108▕ $this->assertSame(500.0, $result['payments']);
109▕ $this->assertSame(80.0, $result['credits']['total']);
1 tests/Unit/Services/Billing/BalanceCalculationServiceTest.php:105
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Billing\BillingTotalsServiceT… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: additional_charges.title (Connection: sqlite, Database: :memory:, SQL: insert into "additional_charges" ("amount", "charge_type", "id", "invoice_id", "parent_id", "school_year", "semester", "status") values (15, add, 1, 99, 10, 2025-2026, Fall, applied), (5, deduct, 2, 99, 10, 2025-2026, Fall, applied))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Billing/BillingTotalsServiceTest.php:31
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Billing\BillingTotalsServiceTest > additional…
Failed asserting that 0.0 is identical to 30.0.
at tests/Unit/Services/Billing/BillingTotalsServiceTest.php:100
96▕ ]);
97▕
98▕ $service = new BillingTotalsService;
99▕
➜ 100▕ $this->assertSame(30.0, $service->additionalSubtotalByParent(10, '2025-2026'));
101▕ }
102▕
103▕ public function test_event_subtotals_by_student_groups_amounts(): void
104▕ {
1 tests/Unit/Services/Billing/BillingTotalsServiceTest.php:100
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Billing\ChargeServiceTest > cancel event char…
Failed asserting that true is identical to 'no'.
at tests/Unit/Services/Billing/ChargeServiceTest.php:124
120▕ $this->assertTrue($result['ok']);
121▕ $this->assertSame('canceled', $result['cancellation_status']);
122▕
123▕ $charge = EventCharges::query()->find($chargeId);
➜ 124▕ $this->assertSame('no', $charge->participation);
125▕ $this->assertSame(0.0, (float) $charge->charged);
126▕
127▕ $this->assertDatabaseHas('additional_charges', [
128▕ 'parent_id' => 10,
1 tests/Unit/Services/Billing/ChargeServiceTest.php:124
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassPreparation\ClassPrepara… QueryException
SQLSTATE[HY000]: General error: 1 table class_prep_adjustments has no column named updated_at (Connection: sqlite, Database: :memory:, SQL: insert into "class_prep_adjustments" ("class_section_id", "item_name", "adjustment", "school_year", "adjustable", "updated_at", "created_at") values (101, Small Table, 2, 2025-2026, 1, 2026-07-05 22:09:19, 2026-07-05 22:09:19))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+16 vendor frames [22m
17 app/Services/ClassPreparation/ClassPreparationAdjustmentWriterService.php:39
[2m+3 vendor frames [22m
21 app/Services/ClassPreparation/ClassPreparationAdjustmentWriterService.php:14
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassPreparation\ClassPreparationLogServiceTe…
Failed asserting that false is true.
at tests/Unit/Services/ClassPreparation/ClassPreparationLogServiceTest.php:26
22▕ {
23▕ $service = new ClassPreparationLogService;
24▕ $created = $service->createLog('101', '1-A', '2025-2026', ['Small Table' => 2], '2025-09-01 00:00:00');
25▕
➜ 26▕ $this->assertTrue($created);
27▕ $this->assertDatabaseHas('class_preparation_log', [
28▕ 'class_section_id' => 101,
29▕ 'school_year' => '2025-2026',
30▕ ]);
1 tests/Unit/Services/ClassPreparation/ClassPreparationLogServiceTest.php:26
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassPreparation\ClassPreparationPrintService…
Failed asserting that false is true.
at tests/Unit/Services/ClassPreparation/ClassPreparationPrintServiceTest.php:33
29▕
30▕ $service = app(ClassPreparationPrintService::class);
31▕ $payload = $service->printPrep('101', '2025-2026', 'Fall');
32▕
➜ 33▕ $this->assertTrue($payload['ok']);
34▕ $this->assertDatabaseHas('class_preparation_log', [
35▕ 'class_section_id' => 101,
36▕ 'school_year' => '2025-2026',
37▕ ]);
1 tests/Unit/Services/ClassPreparation/ClassPreparationPrintServiceTest.php:33
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassPreparation\ClassPreparationServiceTest…
Failed asserting that 0 is identical to 1.
at tests/Unit/Services/ClassPreparation/ClassPreparationServiceTest.php:34
30▕
31▕ $service = app(ClassPreparationService::class);
32▕ $count = $service->markPrinted('2025-2026', 'Fall', [101]);
33▕
➜ 34▕ $this->assertSame(1, $count);
35▕ $this->assertDatabaseHas('class_preparation_log', [
36▕ 'class_section_id' => 101,
37▕ 'school_year' => '2025-2026',
38▕ ]);
1 tests/Unit/Services/ClassPreparation/ClassPreparationServiceTest.php:34
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassProgress\ClassProgre… ArgumentCountError
Too few arguments to function App\Services\ClassProgress\ClassProgressMutationService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php on line 24 and exactly 4 expected
at app/Services/ClassProgress/ClassProgressMutationService.php:21
17▕ {
18▕ public function __construct(
19▕ private ClassProgressRuleService $rules,
20▕ private ClassProgressAttachmentService $attachments,
➜ 21▕ private ClassProgressQueryService $queries,
22▕ private SchoolYearContextService $schoolYears,
23▕ ) {}
24▕
25▕ public function createReports(User $user, array $payload, array $filesBySubject): Collection
1 app/Services/ClassProgress/ClassProgressMutationService.php:21
2 tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php:24
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassProgress\ClassProgre… ArgumentCountError
Too few arguments to function App\Services\ClassProgress\ClassProgressMutationService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php on line 49 and exactly 4 expected
at app/Services/ClassProgress/ClassProgressMutationService.php:21
17▕ {
18▕ public function __construct(
19▕ private ClassProgressRuleService $rules,
20▕ private ClassProgressAttachmentService $attachments,
➜ 21▕ private ClassProgressQueryService $queries,
22▕ private SchoolYearContextService $schoolYears,
23▕ ) {}
24▕
25▕ public function createReports(User $user, array $payload, array $filesBySubject): Collection
1 app/Services/ClassProgress/ClassProgressMutationService.php:21
2 tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php:49
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\ClassProgress\ClassProgre… ArgumentCountError
Too few arguments to function App\Services\ClassProgress\ClassProgressMutationService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php on line 62 and exactly 4 expected
at app/Services/ClassProgress/ClassProgressMutationService.php:21
17▕ {
18▕ public function __construct(
19▕ private ClassProgressRuleService $rules,
20▕ private ClassProgressAttachmentService $attachments,
➜ 21▕ private ClassProgressQueryService $queries,
22▕ private SchoolYearContextService $schoolYears,
23▕ ) {}
24▕
25▕ public function createReports(User $user, array $payload, array $filesBySubject): Collection
1 app/Services/ClassProgress/ClassProgressMutationService.php:21
2 tests/Unit/Services/ClassProgress/ClassProgressMutationServiceTest.php:62
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Discounts\DiscountApplySe… ArgumentCountError
Too few arguments to function App\Services\Discounts\DiscountInvoiceService::__construct(), 0 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Discounts/DiscountApplyServiceTest.php on line 33 and exactly 1 expected
at app/Services/Discounts/DiscountInvoiceService.php:19
15▕
16▕ class DiscountInvoiceService
17▕ {
18▕ public function __construct(
➜ 19▕ private ApplicationUrlService $urls,
20▕ ) {}
21▕
22▕ public function getCurrentInvoiceBalance(int $invoiceId, string $schoolYear): float
23▕ {
1 app/Services/Discounts/DiscountInvoiceService.php:19
2 tests/Unit/Services/Discounts/DiscountApplyServiceTest.php:33
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Events\EventStudentChargeServiceTest > list s…
Failed asserting that false is true.
at tests/Unit/Services/Events/EventStudentChargeServiceTest.php:37
33▕
34▕ $service = new EventStudentChargeService;
35▕ $rows = $service->listStudentsWithCharges(10, '2025-2026', 'Fall');
36▕
➜ 37▕ $this->assertTrue($rows[0]['charged']);
38▕ }
39▕ }
40▕
1 tests/Unit/Services/Events/EventStudentChargeServiceTest.php:37
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Expenses\ExpenseReceiptSe… ArgumentCountError
Too few arguments to function App\Services\Expenses\ExpenseReceiptService::__construct(), 0 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Expenses/ExpenseReceiptServiceTest.php on line 19 and exactly 1 expected
at app/Services/Expenses/ExpenseReceiptService.php:11
7▕
8▕ class ExpenseReceiptService
9▕ {
10▕ public function __construct(
➜ 11▕ private ApplicationUrlService $urls
12▕ ) {}
13▕
14▕ public function storeReceipt(UploadedFile $file): string
15▕ {
1 app/Services/Expenses/ExpenseReceiptService.php:11
2 tests/Unit/Services/Expenses/ExpenseReceiptServiceTest.php:19
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Fees\FeeRefundDetailServiceTe… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: payments.number_of_installments (Connection: sqlite, Database: :memory:, SQL: insert into "payments" ("id", "parent_id", "invoice_id", "paid_amount", "total_amount", "balance", "payment_date", "school_year", "semester", "status") values (1, 10, 1, 100, 100, 0, 2025-01-10, 2025-2026, Fall, Paid))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Fees/FeeRefundDetailServiceTest.php:45
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Navigation\NavBuilderServiceTest > reorder up…
Failed asserting that a row in the table [nav_items] matches the attributes {
"id": 2,
"sort_order": 5
}.
Found similar results: [
{
"id": 2,
"sort_order": 1
}
].
at tests/Unit/Services/Navigation/NavBuilderServiceTest.php:51
47▕
48▕ $service = new NavBuilderService(new NavbarService);
49▕ $service->reorder([$id => 5]);
50▕
➜ 51▕ $this->assertDatabaseHas('nav_items', [
52▕ 'id' => $id,
53▕ 'sort_order' => 5,
54▕ ]);
55▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Notifications\Notifica… InvalidCountException
Method sendEmail() from Mockery_50_App_Services_Notifications_NotificationDispatchService should be called
exactly 1 times but called 2 times.
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Promotions\PromotionEligibilityServiceTest >…
Failed asserting that two strings are identical.
-'graduated'
+'awaiting_parent_enrollment'
at tests/Unit/Services/Promotions/PromotionEligibilityServiceTest.php:85
81▕ $service = $this->makeService();
82▕ $record = $service->evaluateStudent($studentId, '2025-2026', 1);
83▕
84▕ $this->assertNotNull($record);
➜ 85▕ $this->assertSame(StudentPromotionRecord::STATUS_GRADUATED, $record->promotion_status);
86▕ }
87▕
88▕ public function test_audit_log_records_status_changes(): void
89▕ {
1 tests/Unit/Services/Promotions/PromotionEligibilityServiceTest.php:85
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\PurchaseOrders\PurchaseOr… ArgumentCountError
Too few arguments to function App\Services\PurchaseOrders\PurchaseOrderReceiveService::__construct(), 0 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/PurchaseOrders/PurchaseOrderReceiveServiceTest.php on line 42 and exactly 1 expected
at app/Services/PurchaseOrders/PurchaseOrderReceiveService.php:16
12▕
13▕ class PurchaseOrderReceiveService
14▕ {
15▕ public function __construct(
➜ 16▕ private InventoryMovementService $inventoryMovementService
17▕ ) {}
18▕
19▕ public function receive(int $poId, array $received, string $issuedBy): array
20▕ {
1 app/Services/PurchaseOrders/PurchaseOrderReceiveService.php:16
2 tests/Unit/Services/PurchaseOrders/PurchaseOrderReceiveServiceTest.php:42
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Refunds\RefundOverpaymentServ… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: payments.number_of_installments (Connection: sqlite, Database: :memory:, SQL: insert into "payments" ("id", "parent_id", "invoice_id", "paid_amount", "total_amount", "balance", "payment_date", "school_year", "semester", "status") values (1, 10, 1, 150, 150, 0, 2025-01-10, 2025-2026, Fall, Paid))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Refunds/RefundOverpaymentServiceTest.php:35
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Refunds\RefundPolicyServiceTe… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: payments.number_of_installments (Connection: sqlite, Database: :memory:, SQL: insert into "payments" ("id", "parent_id", "invoice_id", "paid_amount", "total_amount", "balance", "payment_date", "school_year", "semester", "status") values (1, 10, 1, 100, 100, 0, 2025-01-10, 2025-2026, Fall, Paid))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Refunds/RefundPolicyServiceTest.php:73
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Refunds\RefundRequestServiceT… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: payments.number_of_installments (Connection: sqlite, Database: :memory:, SQL: insert into "payments" ("id", "parent_id", "invoice_id", "paid_amount", "total_amount", "balance", "payment_date", "school_year", "semester", "status") values (1, 10, 1, 150, 150, 0, 2025-01-10, 2025-2026, Fall, Paid))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Refunds/RefundRequestServiceTest.php:48
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Refunds\RefundSummaryServiceT… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: payments.number_of_installments (Connection: sqlite, Database: :memory:, SQL: insert into "payments" ("id", "parent_id", "invoice_id", "paid_amount", "total_amount", "balance", "payment_date", "school_year", "semester", "status") values (1, 10, 1, 150, 150, 0, 2025-01-10, 2025-2026, Fall, Paid))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Refunds/RefundSummaryServiceTest.php:29
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Roles\RoleAssignmentServiceTest > assi… Error
Class "Tests\Unit\Services\Roles\RoleStaffService" not found
at tests/Unit/Services/Roles/RoleAssignmentServiceTest.php:44
40▕ 'created_at' => now(),
41▕ 'updated_at' => now(),
42▕ ]);
43▕
➜ 44▕ $service = new RoleAssignmentService(new RoleStaffService);
45▕ $result = $service->assignRoles($userId, [$roleId], $userId);
46▕
47▕ $this->assertTrue($result['ok']);
48▕ $this->assertDatabaseHas('user_roles', [
1 tests/Unit/Services/Roles/RoleAssignmentServiceTest.php:44
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\School\EnrollmentEventSer… ArgumentCountError
Too few arguments to function App\Services\School\EnrollmentEventService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/School/EnrollmentEventServiceTest.php on line 21 and exactly 3 expected
at app/Services/School/EnrollmentEventService.php:15
11▕ {
12▕ public function __construct(
13▕ private EmailService $emailService,
14▕ private UserNotificationDispatchService $notifier,
➜ 15▕ private ApplicationUrlService $urls,
16▕ ) {}
17▕
18▕ public function admissionUnderReview(array $parentData, array $students): array
19▕ {
1 app/Services/School/EnrollmentEventService.php:15
2 tests/Unit/Services/School/EnrollmentEventServiceTest.php:21
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\School\EnrollmentEventSer… ArgumentCountError
Too few arguments to function App\Services\School\EnrollmentEventService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/School/EnrollmentEventServiceTest.php on line 40 and exactly 3 expected
at app/Services/School/EnrollmentEventService.php:15
11▕ {
12▕ public function __construct(
13▕ private EmailService $emailService,
14▕ private UserNotificationDispatchService $notifier,
➜ 15▕ private ApplicationUrlService $urls,
16▕ ) {}
17▕
18▕ public function admissionUnderReview(array $parentData, array $students): array
19▕ {
1 app/Services/School/EnrollmentEventService.php:15
2 tests/Unit/Services/School/EnrollmentEventServiceTest.php:40
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\School\PaymentEventServic… ArgumentCountError
Too few arguments to function App\Services\School\PaymentEventService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/School/PaymentEventServiceTest.php on line 21 and exactly 3 expected
at app/Services/School/PaymentEventService.php:15
11▕ {
12▕ public function __construct(
13▕ private EmailService $emailService,
14▕ private UserNotificationDispatchService $notifier,
➜ 15▕ private ApplicationUrlService $urls,
16▕ ) {}
17▕
18▕ public function paymentReceived(array $data, array $studentdata = []): array
19▕ {
1 app/Services/School/PaymentEventService.php:15
2 tests/Unit/Services/School/PaymentEventServiceTest.php:21
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\School\PaymentEventServic… ArgumentCountError
Too few arguments to function App\Services\School\PaymentEventService::__construct(), 2 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/School/PaymentEventServiceTest.php on line 45 and exactly 3 expected
at app/Services/School/PaymentEventService.php:15
11▕ {
12▕ public function __construct(
13▕ private EmailService $emailService,
14▕ private UserNotificationDispatchService $notifier,
➜ 15▕ private ApplicationUrlService $urls,
16▕ ) {}
17▕
18▕ public function paymentReceived(array $data, array $studentdata = []): array
19▕ {
1 app/Services/School/PaymentEventService.php:15
2 tests/Unit/Services/School/PaymentEventServiceTest.php:45
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\SchoolIds\SchoolIdAssignmentServiceTest > ass…
Failed asserting that 2600001 is identical to '2600001'.
at tests/Unit/Services/SchoolIds/SchoolIdAssignmentServiceTest.php:24
20▕ $service = app(SchoolIdAssignmentService::class);
21▕ $schoolId = $service->assignToUser($user->id);
22▕
23▕ $this->assertNotNull($schoolId);
➜ 24▕ $this->assertSame($schoolId, User::query()->findOrFail($user->id)->school_id);
25▕ }
26▕
27▕ public function test_assign_returns_existing_school_id(): void
28▕ {
1 tests/Unit/Services/SchoolIds/SchoolIdAssignmentServiceTest.php:24
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Scores\ProjectCalculatorTest… QueryException
SQLSTATE[HY000]: General error: 1 no such function: REGEXP (Connection: sqlite, Database: :memory:, SQL: select avg("score") as aggregate from "project" where "student_id" = 9 and "semester" = Fall and "school_year" = 2024-2025 and "class_section_id" = 1 and "score" is not null and TRIM(COALESCE(score, '')) <> '' and TRIM(score) REGEXP '^-?[0-9]+(\.[0-9]+)?$')
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+13 vendor frames [22m
14 app/Models/Project.php:137
15 app/Services/Scores/ProjectCalculator.php:14
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Security\IpBanCommandServiceT… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: ip_attempts.last_attempt_at (Connection: sqlite, Database: :memory:, SQL: insert into "ip_attempts" ("ip_address", "attempts") values (10.0.0.9, 1))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Security/IpBanCommandServiceTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Security\IpBanCommandServiceT… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: ip_attempts.last_attempt_at (Connection: sqlite, Database: :memory:, SQL: insert into "ip_attempts" ("ip_address", "attempts", "blocked_until") values (10.0.0.10, 5, 2026-07-06 01:09:24))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Security/IpBanCommandServiceTest.php:32
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Security\IpBanQueryServiceTes… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: ip_attempts.last_attempt_at (Connection: sqlite, Database: :memory:, SQL: insert into "ip_attempts" ("attempts", "blocked_until", "ip_address") values (2, 2026-07-06 00:09:24, 10.0.0.1), (2, 2026-07-05 21:09:24, 10.0.0.2))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Security/IpBanQueryServiceTest.php:16
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Settings\SchoolCalendar\Schoo… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: calendar_events.date (Connection: sqlite, Database: :memory:, SQL: update "calendar_events" set "title" = Updated Event, "date" = ?, "description" = ?, "semester" = , "school_year" = , "updated_at" = 2026-07-05 22:09:25 where "id" = 1)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+11 vendor frames [22m
12 app/Services/Settings/SchoolCalendar/SchoolCalendarMutationService.php:44
[2m+3 vendor frames [22m
16 app/Services/Settings/SchoolCalendar/SchoolCalendarMutationService.php:42
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Settings\SchoolCalendar\S… ArgumentCountError
Too few arguments to function App\Services\Settings\SchoolCalendar\SchoolCalendarNotificationService::__construct(), 1 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Settings/SchoolCalendar/SchoolCalendarNotificationServiceTest.php on line 15 and exactly 2 expected
at app/Services/Settings/SchoolCalendar/SchoolCalendarNotificationService.php:15
11▕ class SchoolCalendarNotificationService
12▕ {
13▕ public function __construct(
14▕ private EmailService $emailService,
➜ 15▕ private ApplicationUrlService $urls,
16▕ ) {}
17▕
18▕ public function notify(array $event, array $targets): array
19▕ {
1 app/Services/Settings/SchoolCalendar/SchoolCalendarNotificationService.php:15
2 tests/Unit/Services/Settings/SchoolCalendar/SchoolCalendarNotificationServiceTest.php:15
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Students\StudentProfileServic… ErrorException
Undefined variable $shouldSyncConditions
at app/Services/Students/StudentProfileService.php:50
46▕ if (! empty($studentData)) {
47▕ $student->update($studentData);
48▕ }
49▕
➜ 50▕ if ($shouldSyncConditions) {
51▕ $this->syncHealthList($student->id, StudentMedicalCondition::class, 'condition_name', $conditions);
52▕ }
53▕
54▕ if ($shouldSyncAllergies) {
[2m+3 vendor frames [22m
4 app/Services/Students/StudentProfileService.php:45
5 tests/Unit/Services/Students/StudentProfileServiceTest.php:19
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Students\StudentScoreCardServ… QueryException
SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: semester_scores.school_id (Connection: sqlite, Database: :memory:, SQL: insert into "semester_scores" ("student_id", "class_section_id", "school_year", "semester", "semester_score") values (1, 601, 2025-2026, Fall, 88))
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
[2m+8 vendor frames [22m
9 tests/Unit/Services/Students/StudentScoreCardServiceTest.php:19
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Teachers\TeacherAbsenceSe… ArgumentCountError
Too few arguments to function App\Services\Teachers\TeacherAbsenceService::__construct(), 3 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Teachers/TeacherAbsenceServiceTest.php on line 25 and exactly 4 expected
at app/Services/Teachers/TeacherAbsenceService.php:20
16▕ public function __construct(
17▕ private TeacherConfigService $configService,
18▕ private SemesterRangeService $semesterRangeService,
19▕ private StaffTimeOffLinkService $staffTimeOffLinkService,
➜ 20▕ private ApplicationUrlService $urls,
21▕ ) {}
22▕
23▕ public function formData(int $userId): array
24▕ {
1 app/Services/Teachers/TeacherAbsenceService.php:20
2 tests/Unit/Services/Teachers/TeacherAbsenceServiceTest.php:25
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Teachers\TeacherAbsenceSe… ArgumentCountError
Too few arguments to function App\Services\Teachers\TeacherAbsenceService::__construct(), 3 passed in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Unit/Services/Teachers/TeacherAbsenceServiceTest.php on line 44 and exactly 4 expected
at app/Services/Teachers/TeacherAbsenceService.php:20
16▕ public function __construct(
17▕ private TeacherConfigService $configService,
18▕ private SemesterRangeService $semesterRangeService,
19▕ private StaffTimeOffLinkService $staffTimeOffLinkService,
➜ 20▕ private ApplicationUrlService $urls,
21▕ ) {}
22▕
23▕ public function formData(int $userId): array
24▕ {
1 app/Services/Teachers/TeacherAbsenceService.php:20
2 tests/Unit/Services/Teachers/TeacherAbsenceServiceTest.php:44
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Unit\Services\Whatsapp\WhatsappInviteNotificationServiceTes…
Failed asserting that true is false.
at tests/Unit/Services/Whatsapp/WhatsappInviteNotificationServiceTest.php:20
16▕ {
17▕ $service = new WhatsappInviteNotificationService;
18▕ $result = $service->dispatch([], '2025-2026', 'Fall');
19▕
➜ 20▕ $this->assertFalse($result['ok']);
21▕ }
22▕
23▕ public function test_dispatch_triggers_event_when_listener_registered(): void
24▕ {
1 tests/Unit/Services/Whatsapp/WhatsappInviteNotificationServiceTest.php:20
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\ApiAuthenticationAndAuthorizationTest > admin o…
GET /api/v1/school-years should reject a non-admin user; got 200
Failed asserting that an array contains 200.
at tests/Feature/Api/ApiAuthenticationAndAuthorizationTest.php:91
87▕
88▕ foreach ($this->adminOnlyEndpoints() as [$method, $uri]) {
89▕ $response = $this->json($method, $uri);
90▕
➜ 91▕ $this->assertContains(
92▕ $response->getStatusCode(),
93▕ [401, 403],
94▕ "$method $uri should reject a non-admin user; got {$response->getStatusCode()}"
95▕ );
1 tests/Feature/Api/ApiAuthenticationAndAuthorizationTest.php:91
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\ApiRouteContractTest > every api route points t…
These API routes reference missing controllers or methods:
POST api/v1/school-years/{schoolYear}/archive -> App\Http\Controllers\Api\SchoolYears\SchoolYearController@archive
Failed asserting that two arrays are identical.
-Array &0 []
+Array &0 [
+ 0 => 'POST api/v1/school-years/{schoolYear}/archive -> App\Http\Controllers\Api\SchoolYears\SchoolYearController@archive',
+]
at tests/Feature/Api/ApiRouteContractTest.php:31
27▕ $missing[] = implode('|', $route->methods()).' '.$route->uri().' -> '.$action;
28▕ }
29▕ }
30▕
➜ 31▕ $this->assertSame([], $missing, "These API routes reference missing controllers or methods:\n".implode("\n", $missing));
32▕ }
33▕
34▕ public function test_api_routes_do_not_duplicate_method_and_uri_pairs(): void
35▕ {
1 tests/Feature/Api/ApiRouteContractTest.php:31
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiAuthorizationCacheInvalidatio…
parent privilege escalation should be blocked at GET api/v1/school-years returned unexpected status 200. Body: {"ok":true,"data":[{"id":1,"name":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"closed_at":null,"closed_by":null}],"meta":{"school_year":"2025-2026","current_school_year":"2025-2026","semester":"Fall","current_semester":"Fall","school_years":[{"id":1,"name":"2025-2026","label":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"is_editable":true}],"semesters":[{"name":"Fall","label":"Fall","is_current":true},{"name":"Spring","label":"Spring","is_current":false}]},"school_years":[{"id":1,"name":"2025-2026","label":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"is_editable":true}],"current_school_year":"2025-2026","current_semester":"Fall"}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiAuthorizationCacheInvalidationContractTest.php:29
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch12BulkMutationBoundaryCo…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch12BulkMutationBoundaryContractTest.php",
"line": 24,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_bulk_mutation_routes_reject_empty_and_cross_domain_targets_cleanly",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch12BulkMutationBoundaryContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch13LocaleCalendarReligiou…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch13LocaleCalendarReligiousDateContractTest.php",
"line": 25,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_calendar_and_event_routes_handle_locale_specific_dates_cleanly",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch13LocaleCalendarReligiousDateContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch14AcademicPromotionRollb…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch14AcademicPromotionRollbackIntegrityContractTest.php",
"line": 13,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_promotion_and_school_year_routes_reject_unsafe_rollback_payloads",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch14AcademicPromotionRollbackIntegrityContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch14DataLifecycleArchivePu…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch14DataLifecycleArchivePurgeContractTest.php",
"line": 13,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_archive_purge_and_retention_routes_require_safe_controlled_requests",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch14DataLifecycleArchivePurgeContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch16TemporalConsistencyAnd…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch16TemporalConsistencyAndClockSkewContractTest.php",
"line": 25,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_batch16_clock_skew_and_temporal_boundaries_do_not_bypass_business_rules",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch16TemporalConsistencyAndClockSkewContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch18OrphanedRecordAndCasca…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch18OrphanedRecordAndCascadeBoundaryContractTest.php",
"line": 31,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_batch18_orphanedrecordandcascadeboundary_stays_controlled",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch18OrphanedRecordAndCascadeBoundaryContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch18TemporalAuditAndTimezo…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch18TemporalAuditAndTimezoneForgeryContractTest.php",
"line": 31,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_batch18_temporalauditandtimezoneforgery_stays_controlled",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch18TemporalAuditAndTimezoneForgeryContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch20LegalHoldRetentionAndP…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch20LegalHoldRetentionAndPurgeConflictContractTest.php",
"line": 32,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_batch20_legal_hold_retention_and_purge_conflict_stays_controlled",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch20LegalHoldRetentionAndPurgeConflictContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiBatch20RegressionContinuityCo…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiBatch20RegressionContinuityComplianceSweepTest.php",
"line": 50,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_batch20_continuity_compliance_and_export_sweep_stays_controlled",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiBatch20RegressionContinuityComplianceSweepTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiConcurrencyAndStaleWriteContr…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiConcurrencyAndStaleWriteContractTest.php",
"line": 23,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_duplicate_update_payloads_remain_controlled_and_do_not_throw_server_errors",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiConcurrencyAndStaleWriteContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiDatabaseTransactionRollbackCo…
POST api/v1/school-years/{schoolYear}/archive destructive rollback should return a controlled response, not a 5xx crash. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiDatabaseTransactionRollbackContractTest.php",
"line": 55,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_delete_failures_do_not_remove_parent_or_student_fixtures",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiDatabaseTransactionRollbackContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that 500 is less than 500.
at tests/Concerns/AssertsE2EApiResponses.php:11
7▕ trait AssertsE2EApiResponses
8▕ {
9▕ protected function assertNoServerError(TestResponse $response, string $context): void
10▕ {
➜ 11▕ $this->assertLessThan(
12▕ 500,
13▕ $response->getStatusCode(),
14▕ $context.' should return a controlled response, not a 5xx crash. Body: '.$response->getContent()
15▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:11
2 tests/Feature/Api/V1/FullSurface/ApiDatabaseTransactionRollbackContractTest.php:57
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiDateMoneyAndTimezoneBoundaryC…
POST api/v1/school-years/{schoolYear}/archive bad date 2025-02-30 returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiDateMoneyAndTimezoneBoundaryContractTest.php",
"line": 35,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_date_accepting_endpoints_reject_impossible_or_ambiguous_dates_cleanly",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiDateMoneyAndTimezoneBoundaryContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiDateMoneyAndTimezoneBoundaryContractTest.php:36
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiDestructiveActionSafeguardCon…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiDestructiveActionSafeguardContractTest.php",
"line": 48,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_archive_remove_cancel_and_void_routes_are_idempotent_or_conflict_safe",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiDestructiveActionSafeguardContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiEnumAndStateMachineContractTe…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiEnumAndStateMachineContractTest.php",
"line": 22,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_status_fields_reject_unknown_states_without_defaulting_to_success",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiEnumAndStateMachineContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiErrorEnvelopeConsistencyContr…
parent denied api/v1/school-years returned unexpected status 200. Body: {"ok":true,"data":[{"id":1,"name":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"closed_at":null,"closed_by":null}],"meta":{"school_year":"2025-2026","current_school_year":"2025-2026","semester":"Fall","current_semester":"Fall","school_years":[{"id":1,"name":"2025-2026","label":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"is_editable":true}],"semesters":[{"name":"Fall","label":"Fall","is_current":true},{"name":"Spring","label":"Spring","is_current":false}]},"school_years":[{"id":1,"name":"2025-2026","label":"2025-2026","start_date":"2025-09-01","end_date":"2026-06-30","status":"active","is_current":true,"is_editable":true}],"current_school_year":"2025-2026","current_semester":"Fall"}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiErrorEnvelopeConsistencyContractTest.php:50
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiFeatureFlagAndConfigurationDr…
POST api/v1/school-years/{schoolYear}/archive missing config should return a controlled response, not a 5xx crash. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiFeatureFlagAndConfigurationDriftContractTest.php",
"line": 21,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_feature_flagged_routes_fail_closed_when_configuration_is_missing_or_disabled",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiFeatureFlagAndConfigurationDriftContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that 500 is less than 500.
at tests/Concerns/AssertsE2EApiResponses.php:11
7▕ trait AssertsE2EApiResponses
8▕ {
9▕ protected function assertNoServerError(TestResponse $response, string $context): void
10▕ {
➜ 11▕ $this->assertLessThan(
12▕ 500,
13▕ $response->getStatusCode(),
14▕ $context.' should return a controlled response, not a 5xx crash. Body: '.$response->getContent()
15▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:11
2 tests/Feature/Api/V1/FullSurface/ApiFeatureFlagAndConfigurationDriftContractTest.php:23
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiMigrationSafeDefaultContractT…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiMigrationSafeDefaultContractTest.php",
"line": 44,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_routes_handle_missing_optional_school_year_context_with_controlled_errors",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiMigrationSafeDefaultContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiNotificationMessagingDelivery…
POST api/v1/school-years/{schoolYear}/archive first message action should return a controlled response, not a 5xx crash. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiNotificationMessagingDeliveryContractTest.php",
"line": 49,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_read_archive_star_and_delete_message_actions_are_idempotent",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiNotificationMessagingDeliveryContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that 500 is less than 500.
at tests/Concerns/AssertsE2EApiResponses.php:11
7▕ trait AssertsE2EApiResponses
8▕ {
9▕ protected function assertNoServerError(TestResponse $response, string $context): void
10▕ {
➜ 11▕ $this->assertLessThan(
12▕ 500,
13▕ $response->getStatusCode(),
14▕ $context.' should return a controlled response, not a 5xx crash. Body: '.$response->getContent()
15▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:11
2 tests/Feature/Api/V1/FullSurface/ApiNotificationMessagingDeliveryContractTest.php:52
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiPolicyAuthorizationDiscoveryC…
POST api/login should not be publicly mutable. returned unexpected status 200. Body: {"status":true,"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9sb2dpbiIsImlhdCI6MTc1OTY1ODQwMCwiZXhwIjoxNzU5NzQ0ODAwLCJuYmYiOjE3NTk2NTg0MDAsImp0aSI6IkZiYWRlVGdiZ25yR3lTNloiLCJzdWIiOiI0IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyIsIm5hbWUiOiJHdXkgR2VyaG9sZCIsInJvbGVzIjpbImFkbWluaXN0cmF0b3IiXX0.xnVw0PcjvOyJEW8uCogzIxsZqA5gt36-RVEkXCJf7Io","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9sb2dpbiIsImlhdCI6MTc1OTY1ODQwMCwiZXhwIjoxNzU5NzQ0ODAwLCJuYmYiOjE3NTk2NTg0MDAsImp0aSI6IkZiYWRlVGdiZ25yR3lTNloiLCJzdWIiOiI0IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyIsIm5hbWUiOiJHdXkgR2VyaG9sZCIsInJvbGVzIjpbImFkbWluaXN0cmF0b3IiXX0.xnVw0PcjvOyJEW8uCogzIxsZqA5gt36-RVEkXCJf7Io","token_type":"bearer","expires_in":86400,"user":{"id":4,"name":"Guy Gerhold","firstname":"Guy","lastname":"Gerhold","email":"administrator-api-test-6a4ad64d11a2b935044371@example.test","roles":{"administrator":true},"class_section_id":null,"class_section_name":null}}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiPolicyAuthorizationDiscoveryContractTest.php:24
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiPublicAndAuthFullSurfaceContr…
Public POST /api/v1/register returned unexpected status 429. Body: {"message":"Too Many Attempts."}
Failed asserting that an array contains 429.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiPublicAndAuthFullSurfaceContractTest.php:33
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiReferentialIntegrityAndForeig…
POST api/v1/attendance/admin/update should reject impossible foreign keys cleanly. returned unexpected status 200. Body: {"ok":true,"message":"Attendance updated successfully."}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiReferentialIntegrityAndForeignKeyContractTest.php:37
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiReportMathAndFinancialInvaria…
GET api/v1/finance/financial-report/pdf returned unexpected status 500. Body: {
"message": "The filename and the fallback cannot contain the \"/\" and \"\\\" characters.",
"exception": "InvalidArgumentException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/symfony/http-foundation/HeaderUtils.php",
"line": 187,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/symfony/http-foundation/ResponseHeaderBag.php",
"line": 234,
"function": "makeDisposition",
"class": "Symfony\\Component\\HttpFoundation\\HeaderUtils",
"type": "::"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php",
"line": 253,
"function": "makeDisposition",
"class": "Symfony\\Component\\HttpFoundation\\ResponseHeaderBag",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Controllers/Api/Finance/FinancialController.php",
"line": 319,
"function": "streamDownload",
"class": "Illuminate\\Routing\\ResponseFactory",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "downloadPdf",
"class": "App\\Http\\Controllers\\Api\\Finance\\FinancialController",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureSchoolYearEditable.php",
"line": 20,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureSchoolYearEditable",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 381,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiReportMathAndFinancialInvariantContractTest.php",
"line": 40,
"function": "getJson",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_report_filters_do_not_create_negative_or_impossible_aggregation_windows",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiReportMathAndFinancialInvariantContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRequestHeaderSpoofingContract…
spoofed headers should not authorize parent at GET api/administrator/attendance-templates returned unexpected status 200. Body: {"status":true,"data":{"template_endpoint":"http:\/\/localhost\/api\/v1\/attendance-templates","list_endpoint":"http:\/\/localhost\/api\/v1\/attendance-templates","rest_prefix":"http:\/\/localhost\/api\/v1\/attendance-comment-templates","list_data_endpoint":"http:\/\/localhost\/api\/v1\/attendance-comment-templates\/list-data"}}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiRequestHeaderSpoofingContractTest.php:27
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRoleWorkflowNegativeMatrixCon…
parent should not read unrelated domain api/administrator/attendance-templates returned unexpected status 200. Body: {"status":true,"data":{"template_endpoint":"http:\/\/localhost\/api\/v1\/attendance-templates","list_endpoint":"http:\/\/localhost\/api\/v1\/attendance-templates","rest_prefix":"http:\/\/localhost\/api\/v1\/attendance-comment-templates","list_data_endpoint":"http:\/\/localhost\/api\/v1\/attendance-comment-templates\/list-data"}}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiRoleWorkflowNegativeMatrixContractTest.php:53
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRouteNamingVersioningAndHygie…
API route must be versioned or explicitly classified as legacy alias: api/proofread
Failed asserting that false is true.
at tests/Feature/Api/V1/FullSurface/ApiRouteNamingVersioningAndHygieneTest.php:25
21▕ {
22▕ foreach ($this->apiRoutes() as $route) {
23▕ $uri = $route->uri();
24▕
➜ 25▕ $this->assertTrue(
26▕ str_starts_with($uri, 'api/v1/') || $this->isKnownUnversionedAlias($uri),
27▕ "API route must be versioned or explicitly classified as legacy alias: $uri"
28▕ );
29▕ }
1 tests/Feature/Api/V1/FullSurface/ApiRouteNamingVersioningAndHygieneTest.php:25
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRouteParameterAbuseContractTe…
Expected: {"message":"The route api\/certificates\/verify\/..%2F.env could not be found."}
Not to contain: .env
at tests/Feature/Api/V1/FullSurface/ApiRouteParameterAbuseContractTest.php:24
20▕ $response = $this->requestAs($this->actorFor($template), $method, $uri, $this->payloadFor($method, $template));
21▕
22▕ $this->assertControlled($response, $method, $uri);
23▕ $this->assertNoServerError($response, 'bad route parameter '.$method.' '.$uri);
➜ 24▕ $this->assertStringNotContainsString('.env', $response->getContent(), $uri.' must not leak filesystem targets.');
25▕ }
26▕ }
27▕ }
28▕
1 tests/Feature/Api/V1/FullSurface/ApiRouteParameterAbuseContractTest.php:24
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRouteParameterAbuseContractTe…
POST api/v1/school-years/92233720368547758079223372036854775807/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiRouteParameterAbuseContractTest.php",
"line": 37,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_parameterized_routes_fail_cleanly_for_overflowing_integer_ids",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiRouteParameterAbuseContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiRouteUseCaseCatalogCompletene…
API routes without an explicit E2E user journey owner:
GET api/v1/competition-winners
GET api/v1/competition-winners/create
POST api/v1/competition-winners
GET api/v1/competition-winners/{id}/settings
PUT api/v1/competition-winners/{id}
GET api/v1/competition-winners/{id}/scores
POST api/v1/competition-winners/{id}/scores
GET api/v1/competition-winners/{id}/preview
GET api/v1/competition-winners/{id}/winners
POST api/v1/competition-winners/{id}/publish
POST api/v1/competition-winners/{id}/lock
POST api/v1/competition-winners/{id}/unlock
POST api/v1/competition-winners/{id}/export-quiz
PATCH,PUT api/v1/finance/event-charges/{event_charge}
Add the route to the journey catalog and add or extend the scenario that proves it.
Failed asserting that two arrays are identical.
-Array &0 []
+Array &0 [
+ 0 => 'GET api/v1/competition-winners',
+ 1 => 'GET api/v1/competition-winners/create',
+ 2 => 'POST api/v1/competition-winners',
+ 3 => 'GET api/v1/competition-winners/{id}/settings',
+ 4 => 'PUT api/v1/competition-winners/{id}',
+ 5 => 'GET api/v1/competition-winners/{id}/scores',
+ 6 => 'POST api/v1/competition-winners/{id}/scores',
+ 7 => 'GET api/v1/competition-winners/{id}/preview',
+ 8 => 'GET api/v1/competition-winners/{id}/winners',
+ 9 => 'POST api/v1/competition-winners/{id}/publish',
+ 10 => 'POST api/v1/competition-winners/{id}/lock',
+ 11 => 'POST api/v1/competition-winners/{id}/unlock',
+ 12 => 'POST api/v1/competition-winners/{id}/export-quiz',
+ 13 => 'PATCH,PUT api/v1/finance/event-charges/{event_charge}',
+]
at tests/Feature/Api/V1/FullSurface/ApiRouteUseCaseCatalogCompletenessTest.php:33
29▕ $unowned[] = $signature;
30▕ }
31▕ }
32▕
➜ 33▕ $this->assertSame(
34▕ [],
35▕ $unowned,
36▕ "API routes without an explicit E2E user journey owner:\n".implode("\n", $unowned).
37▕ "\n\nAdd the route to the journey catalog and add or extend the scenario that proves it."
1 tests/Feature/Api/V1/FullSurface/ApiRouteUseCaseCatalogCompletenessTest.php:33
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSchemaKeyStabilityExpansionCo…
api/v1/class-sections should expose at least one stable identity/display key. Keys: status, message, data, sections, meta, total, per_page, current_page, last_page
Failed asserting that false is true.
at tests/Feature/Api/V1/FullSurface/ApiSchemaKeyStabilityExpansionContractTest.php:33
29▕ continue;
30▕ }
31▕
32▕ $payload = $this->flattenKeys($response->json());
➜ 33▕ $this->assertTrue(
34▕ count(array_intersect($expectedAnyKeys, $payload)) > 0,
35▕ $uri.' should expose at least one stable identity/display key. Keys: '.implode(', ', $payload)
36▕ );
37▕ }
1 tests/Feature/Api/V1/FullSurface/ApiSchemaKeyStabilityExpansionContractTest.php:33
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSchoolCalendarAcademicBoundar…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiSchoolCalendarAcademicBoundaryExpansionTest.php",
"line": 43,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_semester_and_term_values_are_not_free_form_privilege_channels",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiSchoolCalendarAcademicBoundaryExpansionTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSchoolOperationsRegressionBac…
admin POST api/v1/school-years/{schoolYear}/archive regression backstop should return a controlled response, not a 5xx crash. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiSchoolOperationsRegressionBackstopTest.php",
"line": 19,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_administrator_can_probe_core_school_operations_without_route_level_crashes",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiSchoolOperationsRegressionBackstopTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that 500 is less than 500.
at tests/Concerns/AssertsE2EApiResponses.php:11
7▕ trait AssertsE2EApiResponses
8▕ {
9▕ protected function assertNoServerError(TestResponse $response, string $context): void
10▕ {
➜ 11▕ $this->assertLessThan(
12▕ 500,
13▕ $response->getStatusCode(),
14▕ $context.' should return a controlled response, not a 5xx crash. Body: '.$response->getContent()
15▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:11
2 tests/Feature/Api/V1/FullSurface/ApiSchoolOperationsRegressionBackstopTest.php:21
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSecurityAndTransportContractT…
GET api/timeoff/notify/{token} unauthenticated transport contract returned unexpected status 400. Body: TimeOffSorry, this link is invalid or has expired.
Failed asserting that an array contains 400.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiSecurityAndTransportContractTest.php:18
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSecurityAndTransportContractT…
GET against mutating route api/set_authorized_user_password/{authorizedUserId} returned unexpected status 400. Body: {"message":"Invalid or expired confirmation link."}
Failed asserting that an array contains 400.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiSecurityAndTransportContractTest.php:30
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSoftDeleteRestoreArchiveLifec…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiSoftDeleteRestoreArchiveLifecycleContractTest.php",
"line": 19,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "archive_restore_and_unarchive_routes_are_controlled_and_role_protected",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiSoftDeleteRestoreArchiveLifecycleContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiSoftDeleteRestoreArchiveLifec…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiSoftDeleteRestoreArchiveLifecycleContractTest.php",
"line": 40,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "destructive_soft_delete_style_routes_tolerate_repeated_requests",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiSoftDeleteRestoreArchiveLifecycleContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiTenantSchoolYearAndSemesterIs…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiTenantSchoolYearAndSemesterIsolationContractTest.php",
"line": 32,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "test_school_year_scoped_routes_reject_foreign_or_closed_school_year_context",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiTenantSchoolYearAndSemesterIsolationContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiTimezoneCalendarRecurrenceDep…
POST api/v1/school-years/{schoolYear}/archive returned unexpected status 500. Body: {
"message": "Method App\\Http\\Controllers\\Api\\SchoolYears\\SchoolYearController::archive does not exist.",
"exception": "BadMethodCallException",
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 265,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 211,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Routing\\Router::runRouteWithinStack():821}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/RequirePermission.php",
"line": 29,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\RequirePermission",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/EnsureAccountActive.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\EnsureAccountActive",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/MultiAuth.php",
"line": 32,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\MultiAuth",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "{closure:Illuminate\\Foundation\\Http\\Kernel::dispatchToRouter():197}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php",
"line": 22,
"function": "{closure:Illuminate\\Pipeline\\Pipeline::prepareDestination():178}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\SecurityHeaders",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 51,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 109,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 58,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
"line": 22,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php",
"line": 26,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePathEncoding",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "{closure:{closure:Illuminate\\Pipeline\\Pipeline::carry():194}:195}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 607,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php",
"line": 573,
"function": "call",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php",
"line": 190,
"function": "json",
"class": "Illuminate\\Foundation\\Testing\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/FullSurface/ApiTimezoneCalendarRecurrenceDepthContractTest.php",
"line": 28,
"function": "requestAs",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\Support\\FullSurfaceE2EContractCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 1667,
"function": "calendar_and_schedule_routes_reject_ambiguous_recurrence_and_timezone_inputs_cleanly",
"class": "Tests\\Feature\\Api\\V1\\FullSurface\\ApiTimezoneCalendarRecurrenceDepthContractTest",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 519,
"function": "runTest",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php",
"line": 87,
"function": "runBare",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php",
"line": 365,
"function": "run",
"class": "PHPUnit\\Framework\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestCase",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php",
"line": 369,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php",
"line": 64,
"function": "run",
"class": "PHPUnit\\Framework\\TestSuite",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php",
"line": 211,
"function": "run",
"class": "PHPUnit\\TextUI\\TestRunner",
"type": "->"
},
{
"file": "/Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit",
"line": 104,
"function": "run",
"class": "PHPUnit\\TextUI\\Application",
"type": "->"
}
]
}
Failed asserting that an array contains 500.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/Support/FullSurfaceE2EContractCase.php:343
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiWriteAuditAndTimestampContrac…
POST api/v1/attendance-tracking/send-auto-emails successful create response should expose an identifier, ok/status, or resource envelope.
Failed asserting that false is true.
at tests/Feature/Api/V1/FullSurface/ApiWriteAuditAndTimestampContractTest.php:24
20▕
21▕ if (in_array($response->getStatusCode(), [200, 201, 202], true) && $this->isJsonString($response->getContent())) {
22▕ $json = $response->json();
23▕ $flat = json_encode($json, JSON_THROW_ON_ERROR);
➜ 24▕ $this->assertTrue(
25▕ str_contains($flat, 'id') || str_contains($flat, 'uuid') || str_contains($flat, 'ok') || str_contains($flat, 'status'),
26▕ "$method $uri successful create response should expose an identifier, ok/status, or resource envelope."
27▕ );
28▕ }
1 tests/Feature/Api/V1/FullSurface/ApiWriteAuditAndTimestampContractTest.php:24
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\FullSurface\ApiWriteAuditAndTimestampContrac…
POST api/login public audit mutation returned unexpected status 200. Body: {"status":true,"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9sb2dpbiIsImlhdCI6MTc1OTY1ODQwMCwiZXhwIjoxNzU5NzQ0ODAwLCJuYmYiOjE3NTk2NTg0MDAsImp0aSI6IjAwYzExY0JrVkhhcWo3aWwiLCJzdWIiOiI0IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyIsIm5hbWUiOiJNYXRoaWxkZSBKb2huc3RvbiIsInJvbGVzIjpbImFkbWluaXN0cmF0b3IiXX0.bDPxC37-zXHqXxQVQfczSm42134RVfICKu0GeHYKA4w","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0L2FwaS9sb2dpbiIsImlhdCI6MTc1OTY1ODQwMCwiZXhwIjoxNzU5NzQ0ODAwLCJuYmYiOjE3NTk2NTg0MDAsImp0aSI6IjAwYzExY0JrVkhhcWo3aWwiLCJzdWIiOiI0IiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyIsIm5hbWUiOiJNYXRoaWxkZSBKb2huc3RvbiIsInJvbGVzIjpbImFkbWluaXN0cmF0b3IiXX0.bDPxC37-zXHqXxQVQfczSm42134RVfICKu0GeHYKA4w","token_type":"bearer","expires_in":86400,"user":{"id":4,"name":"Mathilde Johnston","firstname":"Mathilde","lastname":"Johnston","email":"administrator-api-test-6a4ad65445571609562500@example.test","roles":{"administrator":true},"class_section_id":null,"class_section_name":null}}
Failed asserting that an array contains 200.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/FullSurface/ApiWriteAuditAndTimestampContractTest.php:67
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\AuthorizedUsersControllerTest > inde…
Failed asserting that actual size 2 matches expected size 1.
at tests/Feature/Api/V1/Parents/AuthorizedUsersControllerTest.php:57
53▕ ->getJson('/api/v1/parents/authorized-users')
54▕ ->assertOk()
55▕ ->assertJsonPath('status', true);
56▕
➜ 57▕ $this->assertCount(1, $response->json('data'));
58▕ $this->assertSame($own->id, $response->json('data.0.id'));
59▕ }
60▕
61▕ public function test_show_returns_404_for_unknown_authorized_user(): void
1 tests/Feature/Api/V1/Parents/AuthorizedUsersControllerTest.php:57
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentAttendanceReportControllerTest…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Parents/ParentAttendanceReportControllerTest.php:24
20▕
21▕ Sanctum::actingAs($parent);
22▕ $response = $this->getJson('/api/v1/parents/attendance-reports/form');
23▕
➜ 24▕ $response->assertOk();
25▕ $response->assertJson(['ok' => true]);
26▕ $this->assertNotEmpty($response->json('students'));
27▕ $this->assertNotEmpty($response->json('sundays'));
28▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentAttendanceReportControllerTest…
Expected response status code [201] but received 403.
Failed asserting that 403 is identical to 201.
at tests/Feature/Api/V1/Parents/ParentAttendanceReportControllerTest.php:47
43▕ 'type' => 'absent',
44▕ 'reason' => 'Sick',
45▕ ]);
46▕
➜ 47▕ $response->assertStatus(201);
48▕ $response->assertJson(['ok' => true]);
49▕
50▕ $this->assertDatabaseHas('parent_attendance_reports', [
51▕ 'student_id' => $studentId,
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentAttendanceReportControllerTest…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Parents/ParentAttendanceReportControllerTest.php:86
82▕ 'date' => $date,
83▕ 'type' => 'late',
84▕ ]);
85▕
➜ 86▕ $response->assertOk();
87▕ $response->assertJson(['ok' => true]);
88▕ $this->assertSame($studentId, $response->json('students.0.student_id'));
89▕ }
90▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentAttendanceReportControllerTest…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Parents/ParentAttendanceReportControllerTest.php:113
109▕ $response = $this->patchJson('/api/v1/parents/attendance-reports/'.$reportId, [
110▕ 'reason' => 'Family emergency',
111▕ ]);
112▕
➜ 113▕ $response->assertOk();
114▕ $this->assertDatabaseHas('parent_attendance_reports', [
115▕ 'id' => $reportId,
116▕ 'reason' => 'Family emergency',
117▕ ]);
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentControllerTest > attendance re…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Parents/ParentControllerTest.php:49
45▕
46▕ Sanctum::actingAs($parent);
47▕ $response = $this->getJson('/api/v1/parents/attendance?school_year=2025-2026');
48▕
➜ 49▕ $response->assertOk();
50▕ $response->assertJson(['ok' => true]);
51▕ $response->assertJsonPath('attendance.0.status', 'absent');
52▕ }
53▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Parents\ParentControllerTest > registration…
Expected response status code [201] but received 403.
Failed asserting that 403 is identical to 201.
at tests/Feature/Api/V1/Parents/ParentControllerTest.php:86
82▕ ];
83▕
84▕ $response = $this->postJson('/api/v1/parents/registration', $payload);
85▕
➜ 86▕ $response->assertStatus(201);
87▕ $response->assertJson(['ok' => true]);
88▕ $this->assertDatabaseHas('students', ['firstname' => 'Sara', 'parent_id' => $parent->id]);
89▕ $this->assertDatabaseHas('emergency_contacts', ['parent_id' => $parent->id, 'emergency_contact_name' => 'John Parent']);
90▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Roles\RolePermissionControllerTest > store r…
Expected response status code [500] but received 404.
Failed asserting that 404 is identical to 500.
The following exception occurred during the last request:
TypeError: App\Http\Controllers\Api\Auth\RolePermissionController::__construct(): Argument #4 ($roleCrudService) must be of type App\Services\Roles\RoleCrudService, class@anonymous given, called in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 1168 and defined in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Controllers/Api/Auth/RolePermissionController.php:35
Stack trace:
#0 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(1168): App\Http\Controllers\Api\Auth\RolePermissionController->__construct(Object(App\Services\Roles\RoleQueryService), Object(App\Services\Roles\RoleAssignmentService), Object(App\Services\Roles\RolePermissionService), Object(class@anonymous), Object(App\Services\Roles\PermissionCrudService))
#1 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\Container\Container->build('App\\Http\\Contro...')
#2 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\Container\Container->resolve('App\\Http\\Contro...', Array, true)
#3 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\Foundation\Application->resolve('App\\Http\\Contro...', Array)
#4 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\Container\Container->make('App\\Http\\Contro...', Array)
#5 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\Foundation\Application->make('App\\Http\\Contro...')
#6 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\Routing\Route->getController()
#7 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\Routing\Route->controllerMiddleware()
#8 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\Routing\Route->gatherMiddleware()
#9 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\Routing\Router->gatherRouteMiddleware(Object(Illuminate\Routing\Route))
#10 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#11 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#12 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#13 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#14 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Kernel->{closure:Illuminate\Foundation\Http\Kernel::dispatchToRouter():197}(Object(Illuminate\Http\Request))
#15 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php(22): Illuminate\Pipeline\Pipeline->{closure:Illuminate\Pipeline\Pipeline::prepareDestination():178}(Object(Illuminate\Http\Request))
#16 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): App\Http\Middleware\SecurityHeaders->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#18 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#21 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#24 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#26 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#28 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#30 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#32 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php(26): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#34 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\ValidatePathEncoding->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#36 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#37 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#38 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(607): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#39 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(573): Illuminate\Foundation\Testing\TestCase->call('POST', '/api/v1/role-pe...', Array, Array, Array, Array, '{"name":"admin"...')
#40 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(411): Illuminate\Foundation\Testing\TestCase->json('POST', '/api/v1/role-pe...', Array, Array, 0)
#41 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/Roles/RolePermissionControllerTest.php(184): Illuminate\Foundation\Testing\TestCase->postJson('/api/v1/role-pe...', Array)
#42 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(1667): Tests\Feature\Api\V1\Roles\RolePermissionControllerTest->test_store_role_returns_error_on_service_exception()
#43 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(519): PHPUnit\Framework\TestCase->runTest()
#44 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php(87): PHPUnit\Framework\TestCase->runBare()
#45 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(365): PHPUnit\Framework\TestRunner->run(Object(Tests\Feature\Api\V1\Roles\RolePermissionControllerTest))
#46 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestCase->run()
#47 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestSuite->run()
#48 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestSuite->run()
#49 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(64): PHPUnit\Framework\TestSuite->run()
#50 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php(211): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\TextUI\Configuration\Configuration), Object(PHPUnit\Runner\ResultCache\DefaultResultCache), Object(PHPUnit\Framework\TestSuite))
#51 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit(104): PHPUnit\TextUI\Application->run(Array)
#52 {main}
----------------------------------------------------------------------------------
App\Http\Controllers\Api\Auth\RolePermissionController::__construct(): Argument #4 ($roleCrudService) must be of type App\Services\Roles\RoleCrudService, class@anonymous given, called in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 1168
at tests/Feature/Api/V1/Roles/RolePermissionControllerTest.php:193
189▕ 'priority' => 1,
190▕ 'is_active' => 1,
191▕ ]);
192▕
➜ 193▕ $response->assertStatus(500);
194▕ $response->assertJsonPath('status', false);
195▕ }
196▕
197▕ public function test_requires_authentication(): void
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest > previ…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/SchoolYears/SchoolYearControllerTest.php:29
25▕ ],
26▕ 'transfer_unpaid_balances' => true,
27▕ ]);
28▕
➜ 29▕ $response->assertOk()
30▕ ->assertJsonPath('data.validation.can_close', true)
31▕ ->assertJsonPath('data.promotion_preview.summary.promote', 1)
32▕ ->assertJsonPath('data.parent_balances.summary.total_old_unpaid_balance', 200);
33▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest > admin…
Expected response status code [201] but received 403.
Failed asserting that 403 is identical to 201.
at tests/Feature/Api/V1/SchoolYears/SchoolYearControllerTest.php:87
83▕ 'start_date' => '2026-09-01',
84▕ 'end_date' => '2027-06-30',
85▕ ]);
86▕
➜ 87▕ $response->assertCreated()
88▕ ->assertJsonPath('data.name', '2026-2027')
89▕ ->assertJsonPath('data.status', 'draft');
90▕
91▕ $this->assertDatabaseHas('school_years', [
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest > admin…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/SchoolYears/SchoolYearControllerTest.php:120
116▕ 'start_date' => '2028-09-01',
117▕ 'end_date' => '2029-06-30',
118▕ ]);
119▕
➜ 120▕ $response->assertOk()
121▕ ->assertJsonPath('data.name', '2028-2029')
122▕ ->assertJsonPath('data.start_date', '2028-09-01');
123▕
124▕ $this->assertDatabaseHas('school_years', [
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest > close…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/SchoolYears/SchoolYearControllerTest.php:148
144▕ 'transfer_unpaid_balances' => true,
145▕ 'confirmation' => 'CLOSE 2025-2026',
146▕ ]);
147▕
➜ 148▕ $response->assertOk()
149▕ ->assertJsonPath('data.closed_school_year.status', 'closed')
150▕ ->assertJsonPath('data.new_school_year.status', 'active');
151▕
152▕ $this->assertDatabaseHas('school_years', [
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\SchoolYears\SchoolYearControllerTest > close…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/SchoolYears/SchoolYearControllerTest.php:207
203▕ 'end_date' => '2027-06-30',
204▕ ],
205▕ 'transfer_unpaid_balances' => true,
206▕ 'confirmation' => 'CLOSE 2025-2026',
➜ 207▕ ])->assertOk();
208▕
209▕ $response = $this->postJson('/api/v1/finance/invoices/generate', [
210▕ 'parent_id' => 10,
211▕ 'school_year' => '2025-2026',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > show re…
Expected response status code [200] but received 401.
Failed asserting that 401 is identical to 200.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:22
18▕ Sanctum::actingAs($user);
19▕
20▕ $response = $this->getJson('/api/v1/preferences');
21▕
➜ 22▕ $response->assertOk();
23▕ $response->assertJsonPath('data.preferences.receive_email_notifications', true);
24▕ $response->assertJsonStructure(['data' => ['options' => ['style_options', 'menu_options']]]);
25▕ }
26▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > store c…
Expected response status code [200] but received 401.
Failed asserting that 401 is identical to 200.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:41
37▕ 'style_color' => 'blue',
38▕ 'menu_color' => 'white',
39▕ ]);
40▕
➜ 41▕ $response->assertOk();
42▕ $this->assertDatabaseHas('user_preferences', [
43▕ 'user_id' => $user->id,
44▕ 'notification_email' => 1,
45▕ 'notification_sms' => 0,
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > list re…
Expected response status code [403] but received 401.
Failed asserting that 401 is identical to 403.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:56
52▕ Sanctum::actingAs($user);
53▕
54▕ $response = $this->getJson('/api/v1/preferences/list');
55▕
➜ 56▕ $response->assertForbidden();
57▕ }
58▕
59▕ public function test_list_returns_rows_for_admin(): void
60▕ {
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > list re…
Expected response status code [200] but received 401.
Failed asserting that 401 is identical to 200.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:74
70▕ ]);
71▕
72▕ $response = $this->getJson('/api/v1/preferences/list');
73▕
➜ 74▕ $response->assertOk();
75▕ $response->assertJsonPath('data.preferences.0.user_id', $admin->id);
76▕ }
77▕
78▕ public function test_update_for_user_by_admin(): void
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > update…
Expected response status code [200] but received 401.
Failed asserting that 401 is identical to 200.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:88
84▕ $response = $this->putJson('/api/v1/preferences/2', [
85▕ 'receive_sms_notifications' => false,
86▕ ]);
87▕
➜ 88▕ $response->assertOk();
89▕ $this->assertDatabaseHas('user_preferences', [
90▕ 'user_id' => $user->id,
91▕ 'notification_sms' => 0,
92▕ ]);
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > destroy…
Expected response status code [403] but received 401.
Failed asserting that 401 is identical to 403.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:102
98▕ Sanctum::actingAs($user);
99▕
100▕ $response = $this->deleteJson('/api/v1/preferences/'.$user->id);
101▕
➜ 102▕ $response->assertForbidden();
103▕ }
104▕
105▕ public function test_destroy_deletes_preferences(): void
106▕ {
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > destroy…
Expected response status code [200] but received 401.
Failed asserting that 401 is identical to 200.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:118
114▕ ]);
115▕
116▕ $response = $this->deleteJson('/api/v1/preferences/'.$admin->id);
117▕
➜ 118▕ $response->assertOk();
119▕ $this->assertDatabaseMissing('user_preferences', [
120▕ 'user_id' => $admin->id,
121▕ ]);
122▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\PreferencesControllerTest > store v…
Expected response status code [422] but received 401.
Failed asserting that 401 is identical to 422.
at tests/Feature/Api/V1/Settings/PreferencesControllerTest.php:133
129▕ $response = $this->postJson('/api/v1/preferences', [
130▕ 'theme' => 'invalid',
131▕ ]);
132▕
➜ 133▕ $response->assertStatus(422);
134▕ $response->assertJsonStructure(['message', 'errors']);
135▕ }
136▕
137▕ private function createUser(string $roleName, int $id = 1): User
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\SchoolCalendarControllerTest > upda…
Expected response status code [200] but received 500.
Failed asserting that 500 is identical to 200.
at tests/Feature/Api/V1/Settings/SchoolCalendarControllerTest.php:96
92▕ $response = $this->patchJson('/api/v1/settings/school-calendar/events/'.$eventId, [
93▕ 'title' => 'Updated Event',
94▕ ]);
95▕
➜ 96▕ $response->assertOk();
97▕ $response->assertJsonPath('status', true);
98▕ $this->assertDatabaseHas('calendar_events', [
99▕ 'id' => $eventId,
100▕ 'title' => 'Updated Event',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Settings\SchoolCalendarControllerTest > stor…
Expected response status code [500] but received 404.
Failed asserting that 404 is identical to 500.
The following exception occurred during the last request:
TypeError: App\Http\Controllers\Api\Settings\SchoolCalendarController::__construct(): Argument #5 ($mutationService) must be of type App\Services\Settings\SchoolCalendar\SchoolCalendarMutationService, class@anonymous given, called in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 1168 and defined in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Controllers/Api/Settings/SchoolCalendarController.php:28
Stack trace:
#0 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(1168): App\Http\Controllers\Api\Settings\SchoolCalendarController->__construct(Object(App\Services\Settings\SchoolCalendar\SchoolCalendarContextService), Object(App\Services\Settings\SchoolCalendar\SchoolCalendarQueryService), Object(App\Services\Settings\SchoolCalendar\SchoolCalendarMeetingService), Object(App\Services\Settings\SchoolCalendar\SchoolCalendarFormatterService), Object(class@anonymous))
#1 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(933): Illuminate\Container\Container->build('App\\Http\\Contro...')
#2 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1078): Illuminate\Container\Container->resolve('App\\Http\\Contro...', Array, true)
#3 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\Foundation\Application->resolve('App\\Http\\Contro...', Array)
#4 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1058): Illuminate\Container\Container->make('App\\Http\\Contro...', Array)
#5 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(286): Illuminate\Foundation\Application->make('App\\Http\\Contro...')
#6 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1133): Illuminate\Routing\Route->getController()
#7 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(1062): Illuminate\Routing\Route->controllerMiddleware()
#8 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(834): Illuminate\Routing\Route->gatherMiddleware()
#9 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(816): Illuminate\Routing\Router->gatherRouteMiddleware(Object(Illuminate\Routing\Route))
#10 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#11 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(764): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#12 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(753): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#13 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#14 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Kernel->{closure:Illuminate\Foundation\Http\Kernel::dispatchToRouter():197}(Object(Illuminate\Http\Request))
#15 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/app/Http/Middleware/SecurityHeaders.php(22): Illuminate\Pipeline\Pipeline->{closure:Illuminate\Pipeline\Pipeline::prepareDestination():178}(Object(Illuminate\Http\Request))
#16 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): App\Http\Middleware\SecurityHeaders->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#18 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#21 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#24 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#26 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(74): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#28 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#30 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#32 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePathEncoding.php(26): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#34 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(219): Illuminate\Http\Middleware\ValidatePathEncoding->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->{closure:{closure:Illuminate\Pipeline\Pipeline::carry():194}:195}(Object(Illuminate\Http\Request))
#36 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#37 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#38 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(607): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#39 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(573): Illuminate\Foundation\Testing\TestCase->call('POST', '/api/v1/setting...', Array, Array, Array, Array, '{"title":"Event...')
#40 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(411): Illuminate\Foundation\Testing\TestCase->json('POST', '/api/v1/setting...', Array, Array, 0)
#41 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/tests/Feature/Api/V1/Settings/SchoolCalendarControllerTest.php(148): Illuminate\Foundation\Testing\TestCase->postJson('/api/v1/setting...', Array)
#42 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(1667): Tests\Feature\Api\V1\Settings\SchoolCalendarControllerTest->test_store_returns_error_on_service_exception()
#43 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(519): PHPUnit\Framework\TestCase->runTest()
#44 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php(87): PHPUnit\Framework\TestCase->runBare()
#45 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestCase.php(365): PHPUnit\Framework\TestRunner->run(Object(Tests\Feature\Api\V1\Settings\SchoolCalendarControllerTest))
#46 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestCase->run()
#47 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestSuite->run()
#48 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/Framework/TestSuite.php(369): PHPUnit\Framework\TestSuite->run()
#49 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(64): PHPUnit\Framework\TestSuite->run()
#50 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/src/TextUI/Application.php(211): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\TextUI\Configuration\Configuration), Object(PHPUnit\Runner\ResultCache\DefaultResultCache), Object(PHPUnit\Framework\TestSuite))
#51 /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/phpunit/phpunit/phpunit(104): PHPUnit\TextUI\Application->run(Array)
#52 {main}
----------------------------------------------------------------------------------
App\Http\Controllers\Api\Settings\SchoolCalendarController::__construct(): Argument #5 ($mutationService) must be of type App\Services\Settings\SchoolCalendar\SchoolCalendarMutationService, class@anonymous given, called in /Volumes/ExternalApps/repos/alrahma_sunday_school_api/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 1168
at tests/Feature/Api/V1/Settings/SchoolCalendarControllerTest.php:155
151▕ 'semester' => 'Fall',
152▕ 'school_year' => '2025-2026',
153▕ ]);
154▕
➜ 155▕ $response->assertStatus(500);
156▕ $response->assertJsonPath('status', false);
157▕ }
158▕
159▕ public function test_requires_authentication(): void
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\System\HealthControllerTest > health returns…
Failed asserting that an array has the key 'status'.
at tests/Feature/Api/V1/System/HealthControllerTest.php:17
13▕ {
14▕ $response = $this->getJson('/api/v1/health');
15▕
16▕ $this->assertContains($response->status(), [200, 503]);
➜ 17▕ $response->assertJsonStructure([
18▕ 'status',
19▕ 'message',
20▕ 'data' => [
21▕ 'health' => [
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\System\NavBuilderControllerTest > delete rem…
Failed asserting that a row in the table [nav_items] does not match the attributes {
"id": 2
}.
Found similar results: [
{
"id": 2
}
].
at tests/Feature/Api/V1/System/NavBuilderControllerTest.php:129
125▕
126▕ $response = $this->actingAs($user, 'sanctum')->deleteJson("/api/v1/nav-builder/{$navId}");
127▕
128▕ $response->assertOk();
➜ 129▕ $this->assertDatabaseMissing('nav_items', ['id' => $navId]);
130▕ }
131▕
132▕ public function test_reorder_updates_items(): void
133▕ {
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\System\NavBuilderControllerTest > reorder up…
Failed asserting that a row in the table [nav_items] matches the attributes {
"id": 2,
"sort_order": 9
}.
Found similar results: [
{
"id": 2,
"sort_order": 1
}
].
at tests/Feature/Api/V1/System/NavBuilderControllerTest.php:148
144▕ 'orders' => [$navId => 9],
145▕ ]);
146▕
147▕ $response->assertOk();
➜ 148▕ $this->assertDatabaseHas('nav_items', ['id' => $navId, 'sort_order' => 9]);
149▕ }
150▕ }
151▕
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\System\SchoolIdControllerTest > assign sets…
Failed asserting that 2600001 is identical to '2600001'.
at tests/Feature/Api/V1/System/SchoolIdControllerTest.php:56
52▕
53▕ $response->assertOk();
54▕ $response->assertJson(['ok' => true]);
55▕ $this->assertNotEmpty($response->json('result.school_id'));
➜ 56▕ $this->assertSame(
57▕ $response->json('result.school_id'),
58▕ User::query()->findOrFail($target->id)->school_id
59▕ );
60▕ }
1 tests/Feature/Api/V1/System/SchoolIdControllerTest.php:56
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Whatsapp\WhatsappInviteControllerTest > send…
Expected response status code [422] but received 200.
Failed asserting that 200 is identical to 422.
at tests/Feature/Api/V1/Whatsapp/WhatsappInviteControllerTest.php:89
85▕ 'school_year' => '2025-2026',
86▕ 'semester' => 'Fall',
87▕ ]);
88▕
➜ 89▕ $response->assertStatus(422);
90▕ $response->assertJsonPath('status', false);
91▕ }
92▕
93▕ public function test_membership_update_saves_record(): void
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioAFamilyEnrollmentTest > ad…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Workflows/ScenarioAFamilyEnrollmentTest.php:58
54▕
55▕ // Teacher sees student in roster.
56▕ $this->actingAs($teacher, 'api');
57▕ $this->getJson('/api/v1/teachers/classes?class_section_id='.$classSectionId)
➜ 58▕ ->assertOk()
59▕ ->assertJsonPath('ok', true);
60▕
61▕ $studentIds = array_column($this->getJson('/api/v1/teachers/classes?class_section_id='.$classSectionId)->json('students'), 'student_id');
62▕ $this->assertContains($studentId, $studentIds);
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioAFamilyEnrollmentTest > pa…
Expected response status code [404] but received 403.
Failed asserting that 403 is identical to 404.
at tests/Feature/Api/V1/Workflows/ScenarioAFamilyEnrollmentTest.php:97
93▕ 'firstname' => 'Hacked',
94▕ 'lastname' => 'Child',
95▕ 'dob' => '2015-01-01',
96▕ 'gender' => 'Male',
➜ 97▕ ])->assertNotFound();
98▕
99▕ $this->assertDatabaseHas('students', [
100▕ 'id' => $studentB,
101▕ 'firstname' => 'Other',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioBSundaySchoolDayTest > tea…
Expected response status code [200] but received 422.
Failed asserting that 422 is identical to 200.
at tests/Feature/Api/V1/Workflows/ScenarioBSundaySchoolDayTest.php:31
27▕
28▕ $this->actingAs($teacher, 'api');
29▕
30▕ $form = $this->getJson('/api/v1/attendance/teacher/form?class_section_id='.$classSectionId)
➜ 31▕ ->assertOk();
32▕
33▕ $date = (string) ($form->json('data.current_sunday') ?? '2025-10-05');
34▕ $submit = $this->postJson('/api/v1/attendance/teacher/submit', [
35▕ 'class_section_id' => $classSectionId,
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioKParentSelfServiceAndPriva…
Expected response status code [404] but received 403.
Failed asserting that 403 is identical to 404.
at tests/Feature/Api/V1/Workflows/ScenarioKParentSelfServiceAndPrivacyTest.php:131
127▕ 'firstname' => 'Tampered',
128▕ 'lastname' => 'Student',
129▕ 'dob' => '2015-01-01',
130▕ 'gender' => 'Male',
➜ 131▕ ])->assertNotFound();
132▕
133▕ $this->patchJson('/api/v1/parents/emergency-contacts/'.$foreignContactId, [
134▕ 'name' => 'Tampered Contact',
135▕ 'cellphone' => '5553334444',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioLTeacherAcademicOperations…
Expected response status code [201] but received 422.
Failed asserting that 422 is identical to 201.
at tests/Feature/Api/V1/Workflows/ScenarioLTeacherAcademicOperationsTest.php:48
44▕ 'covered_quran' => 'Surah recitation practice',
45▕ 'homework_islamic' => 'Read lesson notes',
46▕ 'homework_quran' => 'Memorize assigned ayat',
47▕ 'flags' => ['on_track'],
➜ 48▕ ])->assertCreated()->assertJsonPath('status', true);
49▕
50▕ $reportId = (int) DB::table('class_progress_reports')
51▕ ->where('teacher_id', $teacher->id)
52▕ ->where('class_section_id', $classSectionId)
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioMAdministratorEnrollmentAn…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Workflows/ScenarioMAdministratorEnrollmentAndClassOperationsTest.php:89
85▕ ->assertJsonPath('ok', true);
86▕
87▕ $this->actingAs($teacher, 'api');
88▕ $this->getJson('/api/v1/teachers/classes?class_section_id=909')
➜ 89▕ ->assertOk()
90▕ ->assertJsonPath('ok', true);
91▕ }
92▕
93▕ public function test_admin_can_reverse_roster_and_teacher_assignments_without_orphaning_records(): void
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioNCommunicationsAndSupportL…
Failed asserting that null is identical to true.
at tests/Feature/Api/V1/Workflows/ScenarioNCommunicationsAndSupportLifecycleTest.php:46
42▕
43▕ $this->actingAs($teacher, 'api');
44▕ $this->getJson('/api/v1/messages/inbox')
45▕ ->assertOk()
➜ 46▕ ->assertJsonPath('ok', true);
47▕
48▕ $this->getJson('/api/v1/messages/'.$messageId)
49▕ ->assertOk()
50▕ ->assertJsonPath('ok', true);
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioNCommunicationsAndSupportL…
Failed asserting that null is identical to true.
at tests/Feature/Api/V1/Workflows/ScenarioNCommunicationsAndSupportLifecycleTest.php:82
78▕
79▕ $this->actingAs($admin, 'api');
80▕ $this->getJson('/api/v1/support')
81▕ ->assertOk()
➜ 82▕ ->assertJsonPath('ok', true);
83▕
84▕ $response = $this->postJson('/api/v1/support', [
85▕ 'name' => 'Internal Support Case',
86▕ 'email' => 'internal.support@example.test',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioPSettingsConfigurationAndC…
Expected response status code [200] but received 404.
Failed asserting that 404 is identical to 200.
at tests/Feature/Api/V1/Workflows/ScenarioPSettingsConfigurationAndCalendarGovernanceTest.php:113
109▕ $admin = $this->actingAsApiAdministrator();
110▕ $this->actingAs($admin, 'api');
111▕
112▕ $this->getJson('/api/v1/configuration-admin')
➜ 113▕ ->assertOk();
114▕
115▕ $create = $this->postJson('/api/v1/configuration-admin', [
116▕ 'config_key' => 'e2e_guardrail_message',
117▕ 'config_value' => 'E2E guardrail enabled',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioRAttendanceOperationsAndEx…
Expected response status code [>=200, <300] but received 422.
Failed asserting that false is true.
at tests/Feature/Api/V1/Workflows/ScenarioRAttendanceOperationsAndExceptionHandlingTest.php:36
32▕ $this->actingAs($teacher, 'api');
33▕ $this->getJson('/api/v1/attendance/teacher/grid?class_section_id='.$classSectionId.'&date=2025-10-05')
34▕ ->assertSuccessful();
35▕ $this->getJson('/api/v1/attendance/teacher/form?class_section_id='.$classSectionId.'&date=2025-10-05')
➜ 36▕ ->assertSuccessful();
37▕
38▕ $submit = $this->postJson('/api/v1/attendance/teacher/submit', [
39▕ 'class_section_id' => $classSectionId,
40▕ 'date' => '2025-10-05',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioRAttendanceOperationsAndEx…
Expected response status code [>=200, <300] but received 404.
Failed asserting that false is true.
at tests/Feature/Api/V1/Workflows/ScenarioRAttendanceOperationsAndExceptionHandlingTest.php:130
126▕ ->assertSuccessful();
127▕ $this->getJson('/api/v1/attendance-tracking/student-case/'.$studentId)
128▕ ->assertSuccessful();
129▕ $this->getJson('/api/v1/attendance-tracking/compose?student_id='.$studentId)
➜ 130▕ ->assertSuccessful();
131▕
132▕ $note = $this->postJson('/api/v1/attendance-tracking/save-notification-note', [
133▕ 'student_id' => $studentId,
134▕ 'note' => 'Parent notified about attendance pattern.',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioRAttendanceOperationsAndEx…
Expected response status code [201] but received 422.
Failed asserting that 422 is identical to 201.
The following errors occurred during the last request:
{
"message": "Validation failed.",
"errors": {
"min_score": [
"The min score field is required."
],
"max_score": [
"The max score field is required."
],
"template_text": [
"The template text field is required."
]
}
}
at tests/Feature/Api/V1/Workflows/ScenarioRAttendanceOperationsAndExceptionHandlingTest.php:151
147▕ 'comment' => 'E2E: arrived after first lesson.',
148▕ 'type' => 'late',
149▕ 'is_active' => true,
150▕ ]);
➜ 151▕ $create->assertCreated();
152▕
153▕ $templateId = (int) DB::table('attendance_comment_templates')
154▕ ->where('comment', 'E2E: arrived after first lesson.')
155▕ ->value('id');
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioSScoringGradingAndReportCa…
Expected response status code [>=200, <300] but received 422.
Failed asserting that false is true.
The following errors occurred during the last request:
{
"message": "Validation failed.",
"errors": {
"comments": [
"The comments field is required."
]
}
}
at tests/Feature/Api/V1/Workflows/ScenarioSScoringGradingAndReportCardLifecycleTest.php:70
66▕ 'class_section_id' => $classSectionId,
67▕ 'school_year' => self::E2E_SCHOOL_YEAR,
68▕ 'semester' => self::E2E_SEMESTER,
69▕ 'comment' => 'Consistent progress across the semester.',
➜ 70▕ ])->assertSuccessful();
71▕
72▕ $this->getJson('/api/v1/scores/overview?class_section_id='.$classSectionId.'&school_year='.self::E2E_SCHOOL_YEAR)
73▕ ->assertSuccessful();
74▕ $this->getJson('/api/v1/scores/student-scores?student_id='.$studentId.'&class_section_id='.$classSectionId)
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioSScoringGradingAndReportCa…
Expected response status code [>=200, <300] but received 422.
Failed asserting that false is true.
The following errors occurred during the last request:
{
"message": "Validation failed.",
"errors": {
"semester": [
"The semester field is required."
]
}
}
at tests/Feature/Api/V1/Workflows/ScenarioSScoringGradingAndReportCardLifecycleTest.php:115
111▕ 'locked' => false,
112▕ ])->assertSuccessful();
113▕
114▕ $this->getJson('/api/v1/grading/below-sixty?school_year='.self::E2E_SCHOOL_YEAR)
➜ 115▕ ->assertSuccessful();
116▕ $this->postJson('/api/v1/grading/below-sixty/decisions', [
117▕ 'student_id' => $studentId,
118▕ 'class_section_id' => $classSectionId,
119▕ 'decision' => 'monitor',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioTDocumentsPrintBadgesAndCe…
Expected response status code [>=200, <300] but received 422.
Failed asserting that false is true.
The following errors occurred during the last request:
{
"status": false,
"message": "Validation failed",
"errors": {
"status": [
"The selected status is invalid."
]
}
}
at tests/Feature/Api/V1/Workflows/ScenarioTDocumentsPrintBadgesAndCertificatesLifecycleTest.php:62
58▕ ->assertSuccessful();
59▕ $this->patchJson('/api/v1/print-requests/'.$requestId.'/status', [
60▕ 'status' => 'processing',
61▕ 'admin_notes' => 'Queued for printing.',
➜ 62▕ ])->assertSuccessful();
63▕ $this->get('/api/v1/print-requests/'.$requestId.'/file')
64▕ ->assertSuccessful();
65▕ }
66▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioWAccessControlRolesNavigat…
Expected response status code [>=200, <300] but received 422.
Failed asserting that false is true.
The following errors occurred during the last request:
{
"message": "Validation failed.",
"errors": {
"permissions": [
"The permissions field is required."
]
}
}
at tests/Feature/Api/V1/Workflows/ScenarioWAccessControlRolesNavigationAndPreferencesTest.php:48
44▕
45▕ if ($permissionId > 0 && $teacherRoleId > 0) {
46▕ $this->putJson('/api/v1/role-permissions/roles/'.$teacherRoleId.'/permissions', [
47▕ 'permission_ids' => [$permissionId],
➜ 48▕ ])->assertSuccessful();
49▕ $this->postJson('/api/v1/role-permissions/users/'.$teacher->id.'/roles', [
50▕ 'role_ids' => [$teacherRoleId],
51▕ ])->assertSuccessful();
52▕ }
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioWAccessControlRolesNavigat…
Expected response status code [200] but received 403.
Failed asserting that 403 is identical to 200.
at tests/Feature/Api/V1/Workflows/ScenarioWAccessControlRolesNavigationAndPreferencesTest.php:110
106▕ 'key' => 'active_role',
107▕ 'value' => 'parent',
108▕ ])->assertSuccessful();
109▕ $this->getJson('/api/v1/preferences/list')
➜ 110▕ ->assertOk();
111▕
112▕ $this->putJson('/api/v1/preferences/'.$user->id, [
113▕ 'preferences' => [
114▕ 'theme' => 'light',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioXPublicKioskScannerAndVeri…
Invalid time-off notification token returned unexpected status 400. Body: TimeOffSorry, this link is invalid or has expired.
Failed asserting that an array contains 400.
at tests/Concerns/AssertsE2EApiResponses.php:23
19▕ * @param array $statuses
20▕ */
21▕ protected function assertStatusIn(TestResponse $response, array $statuses, string $context): void
22▕ {
➜ 23▕ $this->assertContains(
24▕ $response->getStatusCode(),
25▕ $statuses,
26▕ $context.' returned unexpected status '.$response->getStatusCode().'. Body: '.$response->getContent()
27▕ );
1 tests/Concerns/AssertsE2EApiResponses.php:23
2 tests/Feature/Api/V1/Workflows/ScenarioXPublicKioskScannerAndVerificationLifecycleTest.php:89
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioZLegacyAliasesValidationAn…
Expected response status code [422] but received 400.
Failed asserting that 400 is identical to 422.
at tests/Feature/Api/V1/Workflows/ScenarioZLegacyAliasesValidationAndCompatibilityTest.php:101
97▕
98▕ $this->postJson('/api/v1/auth/login', [
99▕ 'email' => 'not-an-email',
100▕ 'password' => '',
➜ 101▕ ])->assertStatus(422)
102▕ ->assertJsonStructure(['message', 'errors']);
103▕
104▕ $this->postJson('/api/v1/contact', [
105▕ 'name' => '',
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\ScenarioZLegacyAliasesValidationAn…
Expected response status code [201, 301, 302, 303, 307, 308] but received 401.
Failed asserting that false is true.
at tests/Feature/Api/V1/Workflows/ScenarioZLegacyAliasesValidationAndCompatibilityTest.php:136
132▕
133▕ public function test_legacy_redirects_and_non_versioned_auth_aliases_remain_available(): void
134▕ {
135▕ $this->get('/api/attendance-templates')
➜ 136▕ ->assertRedirect('/api/v1/attendance-templates');
137▕ $this->get('/api/attendance-comment-templates')
138▕ ->assertRedirect('/api/v1/attendance-comment-templates');
139▕ $this->get('/api/administrator/attendance-templates')
140▕ ->assertRedirect('/api/v1/administrator/attendance-templates');
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\Api\V1\Workflows\StudentEnrollmentWorkflowTest > ad…
Expected response status code [200] but received 207.
Failed asserting that 207 is identical to 200.
at tests/Feature/Api/V1/Workflows/StudentEnrollmentWorkflowTest.php:201
197▕ $this->post(
198▕ '/api/v1/administrator/enrollment-withdrawal/update-statuses?'.
199▕ http_build_query(['enrollment_status' => [$studentId => 'enrolled']]),
200▕ []
➜ 201▕ )->assertOk();
202▕
203▕ // ...then withdraw.
204▕ $this->post(
205▕ '/api/v1/administrator/enrollment-withdrawal/update-statuses?'.
────────────────────────────────────────────────────────────────────────────
FAILED Tests\Feature\BulkUserRoleCreationTest > it creates one thousand…
Failed asserting that 3001 is identical to 3000.
at tests/Feature/BulkUserRoleCreationTest.php:25
21▕ $this->createUsersThroughApi('parent', (int) $roles['parent']->id, 1000);
22▕ $this->createUsersThroughApi('teacher', (int) $roles['teacher']->id, 1000);
23▕ $this->createUsersThroughApi('admin', (int) $roles['admin']->id, 1000);
24▕
➜ 25▕ $this->assertSame(3000, User::query()->where('email', 'like', 'bulk_api_%')->count());
26▕ $this->assertSame(1000, User::query()->hasRoleName('parent')->where('email', 'like', 'bulk_api_parent_%')->count());
27▕ $this->assertSame(1000, User::query()->hasRoleName('teacher')->where('email', 'like', 'bulk_api_teacher_%')->count());
28▕ $this->assertSame(1000, User::query()->hasRoleName('admin')->where('email', 'like', 'bulk_api_admin_%')->count());
29▕
1 tests/Feature/BulkUserRoleCreationTest.php:25
Tests: 184 failed, 2 risky, 1609 passed (120956 assertions)
Duration: 92.84s