╔══════════════════════════════════════════════════════════╗
║ 📅 Kalender Pendidikan - Test Suite Runner ║
║ 22 Jun 2026 12:55:10 ║
╚══════════════════════════════════════════════════════════╝
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 Helper Functions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [PASS] base_url tanpa path - 2 assertions
✅ [PASS] base_url dengan path - 3 assertions
✅ [PASS] asset_url - 2 assertions
✅ [PASS] esc - 1 assertions
✅ [PASS] csrf_token - 2 assertions
✅ [PASS] csrf_verify - 2 assertions
✅ [PASS] session helpers - 3 assertions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛤️ Router & Routes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [PASS] parseUri root - 1 assertions
✅ [PASS] parseUri dengan path - 1 assertions
✅ [PASS] parseUri dengan query string - 1 assertions
✅ [PASS] definisi route terdaftar - 6 assertions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Models (CRUD + Query)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [PASS] UserModel verifyPassword - 3 assertions
✅ [PASS] UserModel findByUsername - 2 assertions
✅ [PASS] EventModel getGroupedByDate - 4 assertions
✅ [PASS] EventModel countByType - 3 assertions
✅ [PASS] EventModel getByDateRange - 1 assertions
✅ [PASS] EventModel create + update + delete - 3 assertions
✅ [PASS] PeriodModel findAll - 7 assertions
Warning: Trying to access array offset on value of type null in /home/smpr6486/public_html/kalenderpendidikan.smpn167jakarta.sch.id/tests/ModelTest.php on line 77
❌ [FAIL] PeriodModel getActive - 1 assertions
- harus ada active period
- Exception: TestCase::assertTrue(): Argument #1 ($condition) must be of type bool, null given, called in /home/smpr6486/public_html/kalenderpendidikan.smpn167jakarta.sch.id/tests/ModelTest.php on line 77 in /home/smpr6486/public_html/kalenderpendidikan.smpn167jakarta.sch.id/tests/TestCase.php:10
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Analysis Logic
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [PASS] hasType mendeteksi tipe event - 3 assertions
✅ [PASS] hasType array kosong - 1 assertions
✅ [PASS] buildWeeklyRows struktur - 7 assertions
✅ [PASS] countEffectiveWeeks integer - 1 assertions
✅ [PASS] countNotEffectiveWeeks integer - 1 assertions
✅ [PASS] buildMonthlyAnalysis struktur & totalDays benar - 8 assertions
✅ [PASS] buildMonthlyAnalysis Februari kabisat 2024 - 1 assertions
✅ [PASS] buildSemesterAnalysis struktur - 8 assertions
✅ [PASS] perDay distribusi hari efektif - 2 assertions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌐 HTTP Endpoint Tests (via curl)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ [GET /] Homepage → HTTP 404 (expected 200)
❌ [GET /auth/login] Login Form → HTTP 404 (expected 200)
❌ [GET /api/data] API Data → HTTP 404 (expected 200)
❌ [GET /export/csv-template] CSV Template Download → HTTP 404 (expected 200)
❌ [GET /export/pdf] Calendar PDF View → HTTP 404 (expected 200)
❌ [GET /export/analisis] Analisis PDF View → HTTP 404 (expected 200)
❌ [GET /export/analisis-bulanan] Analisis Bulanan PDF → HTTP 404 (expected 200)
✅ [GET /nonexistent-page] 404 Not Found → HTTP 404
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📡 API Data Validation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ API /api/data failed (HTTP 404)
╔══════════════════════════════════════════════════════════╗
║ 📊 SUMMARY ║
╠══════════════════════════════════════════════════════════╣
║ Total Tests: 37 ║
║ ✅ Passed: 28 ║
║ ❌ Failed: 9 ║
║ Time: 0.36s ║
╚══════════════════════════════════════════════════════════╝
⚠️ Some tests FAILED. Please review the output above.