#!/usr/bin/env php =============================================== AEI Hawaii Scheduler - QA Test Suite =============================================== Base URL: http://localhost/dev_scheduler/SCHEDULER/ Date: 2026-03-04 02:50:22 =============================================== === Running ProposalTest === Running testProposalIndexLoads... FAIL Running testProposalRequiresAuth... PASS Running testProposalBasicFormLoads... FAIL Running testProposalCostFormLoads... FAIL Running testMockPVProposalGeneration... PASS Running testBatchGeneration... PASS Running testPriceQuoteLoads... FAIL Running testProposalDetailsLoads... FAIL Running testProposalSearchByName... FAIL Running testProposalFilterByDate... FAIL Running testProposalFilterByOahu... FAIL Running testProposalFilterByMaui... FAIL Running testPdfCreationEndpoint... PASS Running testCommissionEndpoint... PASS Running testCustomerCheckEndpoint... PASS Running testMockDataJsonExport... FAIL Running testMockDataLocationAccess... PASS === Running AssignTest === Running testMyAssignmentsLoads... FAIL Running testAssignmentsRequireAuth... PASS Running testDateRangeFilter... FAIL Running testStatusFilter... FAIL Running testSalespersonFilter... FAIL Running testPagination... FAIL Running testLimitCap... FAIL Running testAllLimit... FAIL Running testCombinedFilters... FAIL Running testResponseStructure... PASS === Running ACProposalTest === Running testACProposalIndexLoads... FAIL Running testACProposalRequiresAuth... PASS Running testACProposalBasicFormLoads... FAIL Running testMockACProposalGeneration... PASS Running testACDateFilter... FAIL Running testACCityFilter... FAIL Running testACSalespersonFilter... FAIL Running testACLocationOahu... FAIL Running testACLocationMaui... FAIL Running testACNameSearch... FAIL Running testMockACZoneData... PASS === Running SWHProposalTest === Running testSWHProposalIndexLoads... FAIL Running testSWHProposalBasicFormLoads... FAIL Running testMockSWHProposalGeneration... PASS Running testSWHDateFilter... FAIL Running testSWHCityFilter... FAIL Running testSWHSalespersonFilter... FAIL Running testSWHStatusFilter... FAIL Running testSWHNameSearch... FAIL Running testSWHLimitParameter... FAIL Running testMockSWHTankSizes... PASS Running testMockSWHCollectorTypes... PASS === Running PageAccessibilityTest === Running testLoginPageAccessible... FAIL Running testNoPriorityPagesReturn500... PASS Running testProtectedPagesRedirect... FAIL Running testResponseTimes... PASS Running testAllMappedControllers... PASS Running testAjaxEndpointResponds... PASS Running testAdminPageStructure... PASS Running testNoPhpErrorsInResponses... PASS Running testAssetsLinked... PASS Running testContentTypeHeaders... PASS Running testNotFoundHandling... PASS === Running AdminPagesTest === Running testCoreAdminPagesRespond... FAIL Running testAdminConfigRequiresAuth... FAIL Running testAdminUsersPage... FAIL Running testSuperadminPagesNoServerErrors... PASS Running testInventoryPages... FAIL Running testJobPages... FAIL Running testReportPages... FAIL Running testProposalVariablePages... PASS Running testLeadPages... FAIL Running testCustomerPages... PASS Running testExportPages... PASS Running testAdminLinkMapperPageCount... PASS === Running MockServicesTest === Running testMockEmailServiceLogs... PASS Running testMockEmailWithAttachments... PASS Running testPVWattsMockReturnsValidJson... PASS Running testPVWattsMockHasRequiredFields... PASS Running testPVWattsScalesWithSystemSize... PASS Running testGeocodingMockReturnsCoordinates... PASS Running testGeocodingRecognizesHawaiiCities... PASS Running testReverseGeocoding... PASS Running testOsTicketMockCreatesTicket... PASS Running testOsTicketMockClosesTicket... PASS Running testPermitAPIMock... PASS Running testPermitStatusIsConsistent... PASS Running testGeoPluginMock... PASS Running testMockFileGetContentsWrapper... PASS Running testMockServicesAreFlagged... PASS Running testMockServicesEnabled... PASS Running testLogDirectoryExists... PASS === Running DayviewTest === Running testDayviewLoadsAuthenticated... FAIL Running testDayviewContainsScheduleGrid... FAIL Running testDayviewNoPhpErrors... FAIL Running testDayviewNoDatabaseErrors... FAIL Running testDayviewWithTodayDate... FAIL Running testDayviewWithPastDate... FAIL Running testDayviewWithFutureDate... FAIL Running testDayviewOahuLocation... FAIL Running testDayviewMauiLocation... FAIL Running testDayviewResponseTime... FAIL Running testDayviewContainsTeamsSidebar... FAIL Running testDayviewRequiresAuth... FAIL Running testDayviewContainsJobStructures... FAIL Running testDayviewNoRawDateFormat... FAIL === Running EnhancementRegressionTest === Running testENH001_AdminCalendarLoads... FAIL Running testENH001_NoDateFormatInOutput... FAIL Running testENH001_AdminContainsUserInitials... FAIL Running testENH003_CacheControlHeaders... FAIL Running testENH003_ScriptDeferAttributes... FAIL Running testENH008_LeadPageLoads... FAIL Running testENH014_MyJobsLoads... FAIL Running testENH014_UnscheduledJobsLoads... FAIL Running testENH014_CompleteJobsLoads... FAIL Running testENH014_AllCompleteJobsLoads... FAIL Running testENH014_MyJobsContainsContent... FAIL Running testENH014_MyJobsResponseTime... PASS Running testENH016_AssignmentsLoads... FAIL Running testENH016_AssignmentsNoErrors... FAIL Running testENH020_CostListPriceLoads... FAIL Running testENH020_ReviewBgShowThumbLoads... FAIL Running testENH020_ScLabourReportLoads... FAIL Running testENH020_NoScarpdataLinks... PASS Running testCustomerPageLoads... FAIL Running testTicketPageLoads... FAIL Running testProposalIndexLoads... FAIL Running testPvJobsLoads... FAIL Running testSwhJobsLoads... FAIL === Running ConfigPagesTest === Running testConfigPageLoads... FAIL Running testConfigPageNoErrors... FAIL Running testConfigNoScarpdataLinks... FAIL Running testAdminUsersLoads... FAIL Running testAdminUsersNoErrors... FAIL Running testInventoryCostListPriceLoads... FAIL Running testInventoryCostListPriceNoErrors... FAIL Running testConfigPageHasContent... FAIL Running testConfigAccessForSuperuser... FAIL === Running PhotoGalleryTest === Running testPvJobsListLoads... FAIL Running testJobDetailLoads... FAIL Running testJobDetailHasPhotoMarkup... FAIL Running testJobDetailNoErrors... FAIL Running testLightboxJsIncluded... FAIL Running testPhotoGalleryThumbnailGrid... FAIL Running testPvJobsListNoErrors... FAIL === Running NavTabsTest === Running testNavTabsPartialExists... PASS Running testPvJobDetailHasNavTabs... PASS Running testAcJobDetailHasNavTabs... PASS Running testSwhJobDetailHasNavTabs... PASS Running testNavTabLinksCorrect... FAIL Running testNavTabsConsistentStructure... PASS Running testJobDetailPagesNoErrors... PASS === Running ModernizationBaselineTest === Running testLoginFlowRedirectsCorrectly... FAIL Running testInvalidLoginRedirects... PASS Running testBaselineAdminCalendar... FAIL Running testBaselineDayview... FAIL Running testBaselineProposal... FAIL Running testBaselineCustomer... FAIL Running testBaselinePvJobs... FAIL Running testBaselineAcProposal... FAIL Running testBaselineSwhProposal... FAIL Running testBaselineTicket... FAIL Running testBaselineAssignments... FAIL Running testBaselineConfig... FAIL Running testBaselineNoPHPErrors... PASS Running testBaselineResponseContentStability... FAIL Running testBaselineRouteSmokeTest... PASS Running testBaselineLoginPagePublic... FAIL === Running PdfGenerationTest === Running testWkhtmltopdfInstalled... PASS Running testWkhtmltopdfVersion... PASS Running testMpdfLibraryExists... PASS Running testFpdfLibraryExists... PASS Running testFpdiLibraryExists... PASS Running testPdftempDirectoryExists... PASS Running testPdfFormTemplatesExist... PASS Running testWkhtmltopdfFooterExists... PASS Running testDetectHardcodedWkhtmltopdfPaths... PASS Running testDetectHardcodedMpdfPaths... PASS Running testDetectHardcodedFpdfPaths... PASS Running testProposalpdfControllerAccessible... PASS Running testAcpdfControllerAccessible... PASS Running testServicesPdfControllerAccessible... PASS Running testAdminpartpdfControllerAccessible... PASS Running testNempdfControllerAccessible... PASS Running testScpdfControllerAccessible... PASS Running testPvProposalPdfGeneration... PASS Running testAcProposalPdfGeneration... PASS Running testServicePdfGeneration... PASS Running testAdminPartsPdfGeneration... PASS Running testMpdfLibraryLoadable... PASS Running testFpdfLibraryLoadable... PASS Running testProposalPdfViewsExist... PASS Running testAcPdfViewsExist... PASS Running testAdminPartPdfViewsExist... PASS Running testWkhtmltopdfCanGeneratePdf... PASS Running testProductionPathSymlinks... PASS Running testPdfControllersSyntaxValid... PASS Running testPdfEndpointInventory... PASS === Running WritableDirectoriesTest === Running testAllWritableDirectoriesExist... PASS Running testAllDirectoriesWritable... PASS Running testCanWriteToAllDirectories... PASS Running testPdfDirectoriesWritable... PASS Running testUploadDirectoriesWritable... PASS Running testEmailDirectoriesWritable... PASS Running testLogDirectoriesWritable... PASS Running testDirectoryPermissionValues... PASS === Running SAFProposalTest === Running testSAFProposalIndexLoads... FAIL Running testSAFProposalRequiresAuth... PASS Running testSAFProposalBasicFormLoads... FAIL Running testSAFDateFilter... FAIL Running testSAFCityFilter... FAIL Running testSAFSalespersonFilter... FAIL Running testSAFNameSearch... FAIL Running testSAFLocationOahu... FAIL Running testSAFLocationMaui... FAIL === Running RoofProposalTest === Running testRoofProposalIndexLoads... FAIL Running testRoofProposalRequiresAuth... PASS Running testRoofProposalBasicFormLoads... FAIL Running testRoofDateFilter... FAIL Running testRoofCityFilter... FAIL Running testRoofSalespersonFilter... FAIL Running testRoofNameSearch... FAIL Running testRoofLocationOahu... FAIL Running testRoofLocationMaui... FAIL === Running EVGCStorageTest === Running testEVEsignLoads... PASS Running testEVCronExists... PASS Running testGCDesignSheetLoads... PASS Running testGCRescheduleLoads... PASS Running testGCDocumentsLoads... PASS Running testGCEsignLoads... PASS Running testGCCronExists... PASS Running testStoragePriceCalcLoads... PASS Running testPVStorageProposalLoads... FAIL Running testDRWProposalLoads... PASS Running testGenProposalLoads... PASS Running testSEProposalLoads... PASS === Running CronEndpointTest === Running testMainCronResponds... FAIL Running testTicketCronResponds... PASS Running testEquipmentCronControllersExist... PASS Running testEquipmentCronSyntax... PASS Running testCronNoFatalErrors... PASS === Running SearchTest === Running testSearchPageLoads... FAIL Running testSearchRequiresAuth... PASS Running testSearchByCustomerName... FAIL Running testSearchByPhone... FAIL Running testSearchByAddress... FAIL Running testSearchEmptyQuery... FAIL Running testSearchPostSubmission... FAIL Running testSearchSpecialCharacters... FAIL === Running EsignTest === Running testEsignIndexLoads... PASS Running testEsignRequiresAuth... PASS Running testEVEsignLoads... PASS Running testGCEsignLoads... PASS Running testRoofEsignLoads... PASS Running testSAFEsignLoads... PASS Running testSWHEsignLoads... PASS Running testEsignInvalidProposalId... PASS Running testEsignNoPhpErrors... PASS === Running EmailConfigTest === Running testMailFunctionExists... PASS Running testSendmailPathConfigured... PASS Running testSmtpConfigured... PASS Running testPostfixInstalled... FAIL Running testPostfixMainCfExists... FAIL Running testPostfixRelayConfigured... FAIL Running testSaslCredentialsExist... FAIL Running testPhpMailerExists... PASS === Running PhotoApiTest === Running testPhotoApiLoginEndpoint... PASS Running testPhotoApiRejectsUnauth... PASS Running testPhotoGalleryControllerLoads... FAIL Running testPhotoDirectoryStructure... PASS Running testPhotoStagingDirectory... PASS === Running PdfRegressionTest === Running testPvDesignStandard... Discovered 10 test proposals FAIL Running testPvDesignHess... FAIL Running testPvDesignDiscount... FAIL Running testPvPart... FAIL Running testPvCommission... FAIL Running testPvWarrenty... FAIL Running testPvHansraj... FAIL Running testAcDesign... FAIL Running testAcPart... FAIL Running testAcCommission... FAIL Running testAcWarrenty... FAIL Running testSwhDesign... FAIL Running testSwhPart... FAIL Running testSwhCommission... FAIL Running testSwhJobspec... FAIL Running testSafDesign... FAIL Running testSafPart... FAIL Running testSafCommission... FAIL Running testSafJobspec... FAIL Running testRoofDesign... FAIL Running testRoofPart... FAIL Running testRoofCommission... FAIL Running testRoofJobspec... FAIL Running testEvDesign... PASS Running testEvPart... PASS Running testEvCommission... PASS Running testEvJobspec... PASS Running testStorageDesign... PASS Running testStoragePart... PASS Running testStorageCommission... PASS Running testDrwDesign... FAIL Running testDrwPart... FAIL Running testDrwCommission... FAIL Running testGenDesign... FAIL Running testGenPart... FAIL Running testGenCommission... FAIL Running testGenJobspec... FAIL Running testCrossTypeConsistency... PASS Running testSummary... (No PDF page counts to display) === PDF Quality: All PDFs clean (no PHP errors in content) === === Results: 0 matched, 0 failed, 0 no baseline, 7 skipped, 30 errors === Report saved: /var/www/html/dev_scheduler/QA/reports/pdf_regression_20260304_025023.json PASS ======================================== TEST RESULTS ======================================== Passed: 424 Failed: 182 Errors: 0 Total: 606 Time: 0.84s ======================================== Details: [FAIL] Proposal index should return 200 or redirect [FAIL] Proposal basic form should load or redirect [FAIL] Proposal cost form should load or redirect [FAIL] Price quote page should load or redirect [FAIL] Proposal details should load or redirect [FAIL] Search should work or redirect [FAIL] Date filter should work or redirect [FAIL] Location filter (Oahu) should work or redirect [FAIL] Location filter (Maui) should work or redirect [FAIL] JSON export file should be created [FAIL] My assignments page should load or redirect [FAIL] Date range filter should work [FAIL] Status filter should work [FAIL] Salesperson filter should work [FAIL] Pagination should work [FAIL] Limit cap should work [FAIL] All limit should work [FAIL] Combined filters should work [FAIL] AC Proposal index should load or redirect [FAIL] AC Proposal basic form should load or redirect [FAIL] Date filter should work [FAIL] City filter should work [FAIL] Salesperson filter should work [FAIL] Oahu location filter should work [FAIL] Maui location filter should work [FAIL] Name search should work [FAIL] SWH Proposal index should load or redirect [FAIL] SWH Proposal basic form should load or redirect [FAIL] Date filter should work [FAIL] City filter should work [FAIL] Salesperson filter should work [FAIL] Status filter should work [FAIL] Name search should work [FAIL] Limit parameter should work [FAIL] Login page should return 200 [FAIL] Admin Dashboard should return 200 or 302 [FAIL] PV Proposals List should return 200 or 302 [FAIL] AC Proposals List should return 200 or 302 [FAIL] Roof Proposals List should return 200 or 302 [FAIL] SAF Proposals List should return 200 or 302 [FAIL] DRW Proposals List should return 200 or 302 [FAIL] Commercial PV Proposals should return 200 or 302 [FAIL] PV Jobs should return 200 or 302 [FAIL] SWH Jobs should return 200 or 302 [FAIL] My Assignments should return 200 or 302 [FAIL] Premium Job Schedule should return 200 or 302 [FAIL] Service Plan Schedule should return 200 or 302 [FAIL] Customers should return 200 or 302 [FAIL] Tickets should return 200 or 302 [FAIL] E-Sign should return 200 or 302 [FAIL] All 0/5 core admin pages respond [FAIL] Admin config should require authentication (302 or login form) [FAIL] Admin users page should respond (200 or 302) [FAIL] At least 3/4 inventory pages respond (got 0) [FAIL] All job pages respond (0/4) [FAIL] At least 4/5 report pages respond (got 0) [FAIL] Lead page should respond [FAIL] Dayview should return 200 for authenticated superadmin [FAIL] Dayview did not return 200 [FAIL] Dayview did not return 200 [FAIL] Dayview did not return 200 [FAIL] Dayview with today date should return 200 [FAIL] Dayview with past date should return 200 [FAIL] Dayview with future date should return 200 [FAIL] Dayview with Oahu filter should return 200 or 302 [FAIL] Dayview with Maui filter should return 200 or 302 [FAIL] Dayview should return 200 [FAIL] Dayview did not return 200 [FAIL] Dayview should redirect or show login when not authenticated [FAIL] Dayview did not return 200 [FAIL] Dayview did not return 200 [FAIL] SCH-001: Admin calendar should return 200 [FAIL] Admin did not return 200 [FAIL] Admin did not return 200 [FAIL] Admin did not return 200 [FAIL] Admin did not return 200 [FAIL] SCH-008: Lead page should return 200 or 302 [FAIL] SCH-014: My Jobs page should return 200 [FAIL] SCH-014: Unscheduled Jobs page should return 200 [FAIL] SCH-014: Complete Jobs page should return 200 [FAIL] SCH-014: All Complete Jobs page should return 200 [FAIL] My Jobs did not return 200 [FAIL] SCH-016: Assignments page should return 200 [FAIL] Assignments did not return 200 [FAIL] SCH-020: inventory/costlistprice should return 200 (not 500) [FAIL] SCH-020: reviewbg/showthumb should return 200 or 302 (not 500) [FAIL] SCH-020: sc_labourreport/report/0 should return 200 or 302 (not 500) [FAIL] Customer page should return 200 or 302 [FAIL] Ticket page should return 200 or 302 [FAIL] Proposal index should return 200 or 302 [FAIL] PV Jobs page should return 200 or 302 [FAIL] SWH Jobs page should return 200 or 302 [FAIL] Config page should return 200 for superadmin [FAIL] Config page did not return 200 [FAIL] Config page did not return 200 [FAIL] Admin users page should return 200 [FAIL] Admin users did not return 200 [FAIL] inventory/costlistprice should return 200 [FAIL] inventory/costlistprice did not return 200 [FAIL] Config page did not return 200 [FAIL] Config page should return 200 or 302 for superuser [FAIL] SCH-015: PV Jobs list should return 200 [FAIL] SCH-015: Job detail page should return 200 [FAIL] Job detail did not return 200 [FAIL] Job detail did not return 200 [FAIL] Job detail did not return 200 [FAIL] Job detail did not return 200 [FAIL] PV Jobs list did not return 200 [FAIL] PV job detail did not return 200 [FAIL] Baseline: Login should return 302 redirect [FAIL] Baseline: Admin calendar should return 200 [FAIL] Baseline: Dayview should return 200 [FAIL] Baseline: Proposal page should return 200 [FAIL] Baseline: Customer page should return 200 or 302 [FAIL] Baseline: PV Jobs page should return 200 [FAIL] Baseline: AC Proposal page should return 200 or 302 [FAIL] Baseline: SWH Proposal page should return 200, 302, or 500 (BUG-001) [FAIL] Baseline: Ticket page should return 200 or 302 [FAIL] Baseline: Assignments page should return 200 [FAIL] Baseline: Config page should return 200 [FAIL] Baseline: Generated content checksums for 0 pages [FAIL] Baseline: Login page should be publicly accessible (200) [FAIL] SAF Proposal index should respond (200, 302, or 500 if unauth bug) [FAIL] SAF Proposal basic form should respond [FAIL] Date filter should work [FAIL] City filter should work [FAIL] Salesperson filter should work [FAIL] Name search should work [FAIL] Oahu location filter should work [FAIL] Maui location filter should work [FAIL] Roof Proposal index should respond (200, 302, or 500 if unauth bug) [FAIL] Roof Proposal basic form should respond [FAIL] Date filter should work [FAIL] City filter should work [FAIL] Salesperson filter should work [FAIL] Name search should work [FAIL] Oahu location filter should work [FAIL] Maui location filter should work [FAIL] PV/Storage proposal index should respond (got 404) [FAIL] Main cron endpoint should respond with 200 or 302 (got 404) [FAIL] Search page should load or redirect to login (got 404) [FAIL] Customer name search should work (got 404) [FAIL] Phone number search should work (got 404) [FAIL] Address search should work (got 404) [FAIL] Empty search should not error (got 404) [FAIL] POST search should work (got 404) [FAIL] Special character search should not error (got 404) [FAIL] Postfix should be installed (checked /usr/sbin/postfix and /usr/lib/postfix/sbin/postfix) [FAIL] Postfix main.cf should exist at /etc/postfix/main.cf [FAIL] Cannot check relay — main.cf missing [FAIL] SASL credentials file should exist (/etc/postfix/sasl_passwd or .db) [FAIL] Photo gallery controller should respond (got 404) [FAIL] [PV/createpdfdesign/standard] id=51725: HTTP 404 — ERROR [FAIL] [PV/createpdfdesign/hess] id=51729: HTTP 404 — ERROR [FAIL] [PV/createpdfdesign/discount] id=26500: HTTP 404 — ERROR [FAIL] [PV/createpdfpart/default] id=51725: HTTP 404 — ERROR [FAIL] [PV/commission/default] id=51725: HTTP 404 — ERROR [FAIL] [PV/warrenty/default] id=51725: HTTP 404 — ERROR [FAIL] [PV/hansraj/default] id=51725: HTTP 404 — ERROR [FAIL] [AC/createpdfdesign/default] id=14843: HTTP 404 — ERROR [FAIL] [AC/createpdfpart/default] id=14843: HTTP 404 — ERROR [FAIL] [AC/commission/default] id=14843: HTTP 404 — ERROR [FAIL] [AC/warrenty/default] id=14843: HTTP 404 — ERROR [FAIL] [SWH/createpdfdesign/default] id=8170: HTTP 404 — ERROR [FAIL] [SWH/createpdfpart/default] id=8170: HTTP 404 — ERROR [FAIL] [SWH/commission/default] id=8170: HTTP 404 — ERROR [FAIL] [SWH/createpdfpartjobspec/default] id=8170: HTTP 404 — ERROR [FAIL] [SAF/createpdfdesign/default] id=717: HTTP 404 — ERROR [FAIL] [SAF/createpdfpart/default] id=717: HTTP 404 — ERROR [FAIL] [SAF/commission/default] id=717: HTTP 404 — ERROR [FAIL] [SAF/createpdfpartjobspec/default] id=717: HTTP 404 — ERROR [FAIL] [Roof/createpdfdesign/default] id=755: HTTP 404 — ERROR [FAIL] [Roof/createpdfpart/default] id=755: HTTP 404 — ERROR [FAIL] [Roof/commission/default] id=755: HTTP 404 — ERROR [FAIL] [Roof/createpdfpartjobspec/default] id=755: HTTP 404 — ERROR [FAIL] [DRW/createpdfdesign/default] id=2056: HTTP 404 — ERROR [FAIL] [DRW/createpdfpart/default] id=2056: HTTP 404 — ERROR [FAIL] [DRW/commission/default] id=2056: HTTP 404 — ERROR [FAIL] [GEN/createpdfdesign/default] id=1387: HTTP 404 — ERROR [FAIL] [GEN/createpdfpart/default] id=1387: HTTP 404 — ERROR [FAIL] [GEN/commission/default] id=1387: HTTP 404 — ERROR [FAIL] [GEN/createpdfpartjobspec/default] id=1387: HTTP 404 — ERROR Report saved to: /var/www/html/dev_scheduler/QA/tools/../reports/test_results_20260304_025023.json