# PHASE 6: TESTING DAN VALIDASI

## Overview
Phase ini bertujuan untuk melakukan testing menyeluruh terhadap sistem dokumen pengajuan hibah yang telah diperbarui, memastikan semua fungsi bekerja dengan benar dan validasi dokumen wajib berjalan sesuai yang diharapkan.

## 1. TESTING DATABASE SCHEMA

### 1.1 Migration Testing
- [ ] Jalankan migration fresh untuk memastikan schema baru berjalan
- [ ] Verifikasi kolom `kategori_dokumen_id` ada di tabel `dokumen_pengajuan`
- [ ] Verifikasi foreign key constraint ke tabel `kategori_dokumen`
- [ ] Verifikasi unique constraint `pengajuan_id + kategori_dokumen_id`
- [ ] Test rollback migration jika diperlukan

### 1.2 Seeder Testing
- [ ] Jalankan seeder untuk memastikan data dokumen terisi dengan benar
- [ ] Verifikasi 14 dokumen wajib terisi (3 utama + 11 legal)
- [ ] Verifikasi 2 dokumen opsional terisi
- [ ] Verifikasi format dan ukuran file sesuai spesifikasi
- [ ] Verifikasi deskripsi dokumen lengkap dengan informasi ukuran

## 2. TESTING BACKEND LOGIC

### 2.1 Controller Methods Testing

#### 2.1.1 Helper Functions
- [ ] Test `getRequiredDocuments()` - return dokumen wajib
- [ ] Test `validateRequiredDocuments()` - validasi kelengkapan dokumen
- [ ] Test `handleDocumentUpload()` - upload dengan mapping kategori
- [ ] Test `formatFileSize()` - format ukuran file untuk display

#### 2.1.2 Document Management APIs
- [ ] Test `getDocumentRequirements()` - API untuk frontend
- [ ] Test `getDocumentStatus()` - status dokumen per pengajuan
- [ ] Test `getDocumentInfo()` - informasi detail dokumen

#### 2.1.3 Upload Validation
- [ ] Test validasi format file berdasarkan kategori
- [ ] Test validasi ukuran file berdasarkan kategori
- [ ] Test error handling untuk file tidak valid
- [ ] Test replace dokumen yang sudah ada

### 2.2 Route Testing
- [ ] Test route `/pengajuan/documents/requirements`
- [ ] Test route `/pengajuan/documents/info`
- [ ] Test route `/pengajuan/{id}/documents/status`
- [ ] Verifikasi semua route terproteksi dengan middleware auth

## 3. TESTING FRONTEND INTERFACE

### 3.1 Document Upload Form

#### 3.1.1 UI Components
- [ ] Verifikasi progress bar dokumen wajib dan opsional
- [ ] Verifikasi badge warna (merah untuk wajib, abu-abu untuk opsional)
- [ ] Verifikasi informasi format dan ukuran file
- [ ] Verifikasi drag & drop functionality
- [ ] Verifikasi file preview dengan icon sesuai format

#### 3.1.2 Form Validation
- [ ] Test validasi ukuran file di frontend
- [ ] Test validasi format file di frontend
- [ ] Test error message yang informatif
- [ ] Test submit button state (disabled jika dokumen wajib kurang)

#### 3.1.3 Progress Tracking
- [ ] Test counter dokumen wajib yang sudah diupload
- [ ] Test counter dokumen opsional yang sudah diupload
- [ ] Test progress bar update real-time
- [ ] Test visual feedback untuk dokumen yang sudah diupload

### 3.2 JavaScript Functionality
- [ ] Test file validation dengan feedback real-time
- [ ] Test progress tracking yang akurat
- [ ] Test dynamic submit button state
- [ ] Test file preview dengan icon sesuai format
- [ ] Test error handling yang comprehensive
- [ ] Test remove document functionality

## 4. TESTING INTEGRATION

### 4.1 End-to-End Testing

#### 4.1.1 Complete Document Upload Flow
- [ ] Test upload dokumen wajib satu per satu
- [ ] Test upload dokumen opsional
- [ ] Test replace dokumen yang sudah ada
- [ ] Test submit pengajuan dengan dokumen lengkap
- [ ] Test submit pengajuan dengan dokumen tidak lengkap

#### 4.1.2 Error Scenarios
- [ ] Test upload file dengan format tidak sesuai
- [ ] Test upload file dengan ukuran terlalu besar
- [ ] Test submit tanpa dokumen wajib
- [ ] Test network error saat upload
- [ ] Test server error saat validasi

### 4.2 Cross-Browser Testing
- [ ] Test di Chrome (latest)
- [ ] Test di Firefox (latest)
- [ ] Test di Safari (latest)
- [ ] Test di Edge (latest)
- [ ] Test responsive design di mobile

## 5. TESTING DATA VALIDATION

### 5.1 Document Requirements Validation
- [ ] Verifikasi semua 14 dokumen wajib terdaftar
- [ ] Verifikasi format file sesuai spesifikasi
- [ ] Verifikasi ukuran maksimal sesuai spesifikasi
- [ ] Verifikasi deskripsi dokumen lengkap

### 5.2 File Upload Validation
- [ ] Test upload PDF (valid)
- [ ] Test upload DOC/DOCX (valid)
- [ ] Test upload JPG/JPEG/PNG (valid)
- [ ] Test upload file dengan format tidak valid
- [ ] Test upload file dengan ukuran melebihi limit

### 5.3 Database Integrity
- [ ] Test unique constraint dokumen per kategori
- [ ] Test foreign key constraint ke kategori_dokumen
- [ ] Test cascade delete saat pengajuan dihapus
- [ ] Test data consistency setelah update dokumen

## 6. TESTING PERFORMANCE

### 6.1 Upload Performance
- [ ] Test upload file besar (mendekati limit)
- [ ] Test upload multiple files bersamaan
- [ ] Test upload dengan koneksi lambat
- [ ] Test timeout handling

### 6.2 Database Performance
- [ ] Test query dokumen dengan relasi kategori
- [ ] Test query validasi dokumen wajib
- [ ] Test index performance pada tabel dokumen_pengajuan

## 7. TESTING SECURITY

### 7.1 File Upload Security
- [ ] Test upload file dengan ekstensi berbahaya
- [ ] Test upload file dengan MIME type tidak sesuai
- [ ] Test upload file dengan nama berbahaya
- [ ] Test path traversal attack

### 7.2 Access Control
- [ ] Test akses dokumen hanya untuk pemilik pengajuan
- [ ] Test akses API dokumen dengan authentication
- [ ] Test akses dokumen dengan role yang tidak sesuai

## 8. TESTING USER EXPERIENCE

### 8.1 Usability Testing
- [ ] Test kemudahan upload dokumen
- [ ] Test kejelasan informasi dokumen wajib
- [ ] Test feedback yang diberikan ke user
- [ ] Test error message yang mudah dipahami

### 8.2 Accessibility Testing
- [ ] Test keyboard navigation
- [ ] Test screen reader compatibility
- [ ] Test color contrast untuk badge
- [ ] Test focus indicators

## 9. TESTING SCENARIOS

### 9.1 Happy Path Scenarios
1. **Complete Document Upload**
   - User upload semua dokumen wajib
   - User upload beberapa dokumen opsional
   - User submit pengajuan berhasil
   - Pengajuan masuk status "pending"

2. **Draft Save**
   - User upload sebagian dokumen
   - User save as draft
   - User kembali dan melanjutkan upload
   - User submit pengajuan lengkap

### 9.2 Edge Cases
1. **File Replacement**
   - User upload dokumen A
   - User upload dokumen A lagi (replace)
   - Verifikasi dokumen lama terhapus
   - Verifikasi dokumen baru tersimpan

2. **Network Interruption**
   - User upload file besar
   - Network terputus saat upload
   - User retry upload
   - Verifikasi file tidak corrupt

### 9.3 Error Cases
1. **Invalid File Format**
   - User upload file .exe
   - System reject dengan error message
   - User upload file .pdf (valid)
   - Upload berhasil

2. **File Too Large**
   - User upload file 10MB untuk dokumen 5MB limit
   - System reject dengan error message
   - User compress file menjadi 4MB
   - Upload berhasil

## 10. TESTING CHECKLIST

### 10.1 Pre-Testing Setup
- [ ] Database migration sudah dijalankan
- [ ] Seeder sudah dijalankan
- [ ] Environment testing sudah disiapkan
- [ ] Test data sudah disiapkan

### 10.2 Testing Execution
- [ ] Jalankan semua test cases
- [ ] Dokumentasikan hasil testing
- [ ] Catat bug yang ditemukan
- [ ] Verifikasi fix untuk bug yang ditemukan

### 10.3 Post-Testing
- [ ] Review hasil testing
- [ ] Update dokumentasi jika diperlukan
- [ ] Deploy ke production jika semua test passed
- [ ] Monitor production untuk issue yang tidak terdeteksi

## 11. EXPECTED RESULTS

### 11.1 Functional Requirements
- [ ] Semua 14 dokumen wajib dapat diupload
- [ ] Validasi format dan ukuran file bekerja
- [ ] Progress tracking akurat
- [ ] Submit button disabled jika dokumen wajib kurang
- [ ] Error message informatif dan spesifik

### 11.2 Non-Functional Requirements
- [ ] Upload file < 5MB dalam < 10 detik
- [ ] Interface responsive di semua device
- [ ] Error handling graceful
- [ ] Data integrity terjaga

## 12. TESTING TOOLS

### 12.1 Manual Testing
- Browser developer tools
- Network throttling
- File upload testing
- UI/UX testing

### 12.2 Automated Testing (Optional)
- PHPUnit untuk backend testing
- Jest untuk JavaScript testing
- Selenium untuk E2E testing

## 13. SIGN-OFF CRITERIA

### 13.1 Must Have
- [ ] Semua dokumen wajib dapat diupload
- [ ] Validasi format dan ukuran file bekerja
- [ ] Progress tracking akurat
- [ ] Error handling comprehensive
- [ ] Database integrity terjaga

### 13.2 Should Have
- [ ] UI/UX yang user-friendly
- [ ] Performance yang acceptable
- [ ] Cross-browser compatibility
- [ ] Mobile responsiveness

### 13.3 Could Have
- [ ] Advanced file preview
- [ ] Bulk upload functionality
- [ ] File compression
- [ ] Upload progress indicator

## 14. TESTING TIMELINE

### 14.1 Phase 1: Unit Testing (1-2 hari)
- Test helper functions
- Test controller methods
- Test API endpoints

### 14.2 Phase 2: Integration Testing (2-3 hari)
- Test complete upload flow
- Test error scenarios
- Test database integration

### 14.3 Phase 3: E2E Testing (2-3 hari)
- Test user journey
- Test cross-browser compatibility
- Test performance

### 14.4 Phase 4: Bug Fixing (1-2 hari)
- Fix bugs yang ditemukan
- Re-test fix
- Final validation

## 15. CONCLUSION

Phase 6 ini akan memastikan bahwa sistem dokumen pengajuan hibah yang telah diperbarui berfungsi dengan baik dan memenuhi semua requirement yang telah ditetapkan. Testing yang komprehensif akan memberikan confidence bahwa sistem siap untuk production.

**Total Estimated Time: 6-10 hari**

**Dependencies:**
- Phase 1-5 sudah completed
- Database migration sudah dijalankan
- Seeder sudah dijalankan
- Environment testing sudah disiapkan
