---
๐งช TESTING GUIDE
1๏ธโฃ STATE MANAGEMENT REFACTORING
A. Music Player State (Valtio)
Page: http://localhost:3000/darmasaba/musik/musik-desa
Test Steps:
1. Buka halaman musik desa
2. Klik lagu untuk memutar
3. Test tombol play/pause
4. Test next/previous
5. Test volume control
6. Test shuffle/repeat
7. Refresh page - state harus tetap ada
Expected Result:
- โ
Musik bisa diputar
- โ
Semua kontrol berfungsi
- โ
State reactive (UI update otomatis)
- โ
Tidak ada error di console
Console Check:
1 // Buka browser console, ketik:
2 window.publicMusicState
3 // Harus bisa akses state langsung
---
B. Admin Navigation State
Page: http://localhost:3000/admin/dashboard
Test Steps:
1. Login ke admin panel
2. Test toggle sidebar (collapse/expand)
3. Test mobile menu (hamburger menu)
4. Test hover menu items
5. Test search functionality
6. Navigate antar module
Expected Result:
- โ
Sidebar bisa collapse/expand
- โ
Mobile menu berfungsi
- โ
Menu hover responsive
- โ
State persist saat navigate
---
2๏ธโฃ SECURITY FIXES
A. OTP via POST (Not GET) - CRITICAL โ ๏ธ
Page: http://localhost:3000/admin/login
Test Steps:
1. Buka halaman login admin
2. Masukkan nomor WhatsApp valid
3. Klik "Kirim Kode OTP"
4. Check Network tab di browser DevTools
Network Tab Check:
1 โ BEFORE (Insecure):
2 Request URL: https://wa.wibudev.com/code?nom=08123456789&text=Kode OTP: 123456
3 Method: GET
4
5 โ
AFTER (Secure):
6 Request URL: https://wa.wibudev.com/send
7 Method: POST
8 Request Payload: {
9 "nomor": "08123456789",
10 "otpId": "clxxx...",
11 "message": "Website Desa Darmasaba..."
12 }
Expected Result:
- โ
Request ke WhatsApp menggunakan POST
- โ
OTP TIDAK terlihat di URL
- โ
OTP hanya ada di message body
- โ
Dapat OTP via WhatsApp
Browser History Check:
- Buka browser history
- Cari URL dengan "wa.wibudev.com"
- โ
TIDAK BOLEH ADA OTP di URL
---
B. Session Password Enforcement
File: .env.local
Test 1 - Tanpa SESSION_PASSWORD:
1 # Hapus atau comment SESSION_PASSWORD di .env.local
2 # SESSION_PASSWORD=""
Restart server:
1 bun run dev
Expected Result:
- โ Server GAGAL start
- โ
Error message: "SESSION_PASSWORD environment variable is required"
---
Test 2 - Password Pendek (< 32 chars):
1 # Password terlalu pendek
2 SESSION_PASSWORD="short"
Restart server:
1 bun run dev
Expected Result:
- โ Server GAGAL start
- โ
Error message: "SESSION_PASSWORD must be at least 32 characters long"
---
Test 3 - Password Valid (โฅ 32 chars):
1 # Generate password kuat (min 32 chars)
2 SESSION_PASSWORD="this-is-a-very-secure-password-with-more-than-32-characters"
Restart server:
1 bun run dev
Expected Result:
- โ
Server BERHASIL start
- โ
Tidak ada error
- โ
Bisa login ke admin panel
---
C. Input Validation (Zod)
Page: http://localhost:3000/admin/desa/berita/list-berita/create
Test 1 - Judul Pendek (< 5 chars):
1 Judul: "abc" โ
Expected:
- โ
Error: "Judul minimal 5 karakter"
---
Test 2 - Judul Terlalu Panjang (> 255 chars):
1 Judul: "abc..." (300 chars) โ
Expected:
- โ
Error: "Judul maksimal 255 karakter"
---
Test 3 - Deskripsi Pendek (< 10 chars):
1 Judul: "Judul Valid" โ
2 Deskripsi: "abc" โ
Expected:
- โ
Error: "Deskripsi minimal 10 karakter"
---
Test 4 - Konten Pendek (< 50 chars):
1 Judul: "Judul Valid" โ
2 Deskripsi: "Deskripsi yang cukup panjang" โ
3 Konten: "abc" โ
Expected:
- โ
Error: "Konten minimal 50 karakter"
---
Test 5 - YouTube URL Invalid:
1 Link Video: "https://youtube.com" โ
Expected:
- โ
Error: "Format URL YouTube tidak valid"
---
Test 6 - XSS Attempt:
1 Konten: "Content yang valid..." โ
Expected:
- โ
Script tag dihapus
- โ
Content tersimpan tanpa