7.3 KiB
7.3 KiB
🧪 Location Testing Guide - Mock Location Feature
Last Updated: 14 Januari 2026
Version: 1.0
📌 Ringkasan
Aplikasi sekarang memiliki Location Testing Feature yang memungkinkan developer melakukan testing lokasi tanpa harus secara fisik berada di kampus. Fitur ini sangat berguna untuk testing dan development.
🎯 Lokasi Testing yang Tersedia
1. 🏢 Kampus (Exact Location)
- Koordinat: Lat: -6.8961, Lon: 107.6100
- Jarak dari kampus: 0 meter
- Status: ✓ Dalam area (tepat di lokasi kampus)
- Absensi: ✅ DITERIMA
2. ✓ Dalam Area (85m)
- Koordinat: Lat: -6.8955, Lon: 107.6105
- Jarak dari kampus: 85 meter
- Status: ✓ Dalam area utama
- Absensi: ✅ DITERIMA
3. ⚠️ Tepi Area (125m)
- Koordinat: Lat: -6.8948, Lon: 107.6110
- Jarak dari kampus: 125 meter
- Status: ✓ Dalam area (toleransi/tepi)
- Absensi: ✅ DITERIMA (dengan warning)
4. ✗ Luar Area (200m)
- Koordinat: Lat: -6.8930, Lon: 107.6120
- Jarak dari kampus: 200 meter
- Status: ✗ Di luar area
- Absensi: ❌ DITOLAK
5. ❌ Jauh di Luar (400m)
- Koordinat: Lat: -6.8900, Lon: 107.6150
- Jarak dari kampus: 400 meter
- Status: ✗ Jauh di luar area
- Absensi: ❌ DITOLAK
🚀 Cara Menggunakan
Step 1: Buka Attendance Screen
- Login dengan NPM dan Nama
- Masuk ke Attendance Screen
Step 2: Buka Debug Menu
Klik icon ⚙️ Settings di TopAppBar
┌────────────────────────────────┐
│ Absensi Akademik ⚙️ ✕ │
└────────────────────────────────┘
Step 3: Aktifkan Mock Location
- Di debug menu, toggle "Mock Location" ke ON
- Warna akan berubah menjadi hijau saat aktif
Step 4: Pilih Lokasi Testing
Klik salah satu dari 5 opsi lokasi testing yang tersedia:
- 🏢 Kampus (Exact)
- ✓ Dalam Area (85m)
- ⚠️ Tepi Area (125m)
- ✗ Luar Area (200m)
- ❌ Jauh di Luar (400m)
Step 5: Lihat Hasilnya
Lokasi di Status Lokasi card akan berubah ke lokasi yang dipilih dengan indicator:
🧪 MOCK LOCATION (Testing Mode)
📂 File-File Terkait
1. utils/LocationTestUtils.kt
Utility class untuk manage mock location
isMockLocationEnabled: Flag untuk enable/disable mock locationmockLatitude/mockLongitude: Koordinat mock yang sedang digunakansetMockLocation(): Set custom mock locationsetMockLocationByType(): Set mock location by predefined typegetMockLocationIfEnabled(): Get mock location jika enabled
2. presentation/screens/LocationDebugMenu.kt
UI untuk debug menu
LocationDebugMenu(): Main debug dialogLocationOptionButton(): Individual location option button
3. presentation/screens/AttendanceScreen.kt (Updated)
- Terintegrasi dengan LocationTestUtils
- Menampilkan indicator "🧪 MOCK LOCATION" saat mock aktif
- Menggunakan mock location jika diaktifkan
🔧 Cara Kerja Teknis
Flow Pengambilan Lokasi
User klik "Perbarui Lokasi"
↓
locationPermissionLauncher triggered
↓
Check: isMockLocationEnabled?
├─ YES → Gunakan mock location dari LocationTestUtils
└─ NO → Gunakan GPS asli (getCurrentLocation)
↓
Update UI dengan lokasi
├─ Validasi dengan LocationValidator
└─ Tampilkan status (✓ atau ✗)
Code Example
// Di AttendanceScreen.kt
val mockLocation = LocationTestUtils.getMockLocationIfEnabled()
if (mockLocation != null) {
// Gunakan mock location
latitude = mockLocation.first
longitude = mockLocation.second
// ... validasi lokasi
} else {
// Gunakan GPS asli
// ... get location from FusedLocationClient
}
⚠️ PENTING: Production Safety
⛔ JANGAN Gunakan Mock Location di Production
Mock location hanya untuk testing dan development di debug mode.
Checklist sebelum release:
LocationTestUtils.isMockLocationEnabled = false- Debug menu button di remove atau disable
- Semua testing dengan GPS asli
- Test di device fisik di lokasi kampus
Cara Disable Mock Location untuk Production
Di LocationTestUtils.kt:
// Sebelum build production, ensure:
isMockLocationEnabled = false // Default false
🧪 Testing Scenarios
Scenario 1: User Berhasil Absen (Inside Area)
- Buka app
- Login
- Buka Debug Menu
- Aktifkan Mock Location
- Pilih "✓ Dalam Area (85m)"
- Klik "Perbarui Lokasi"
- Lihat status: ✓ Berada dalam area absensi
- Absensi berhasil ✅
Scenario 2: User di Tepi Area (Warning)
- Buka app
- Login
- Buka Debug Menu
- Aktifkan Mock Location
- Pilih "⚠️ Tepi Area (125m)"
- Klik "Perbarui Lokasi"
- Lihat status: ✓ Berada dalam area absensi (toleransi)
- Lihat warning: ⚠️ Berada di tepi area (25m dari batas)
- Absensi berhasil ✅ (dengan warning)
Scenario 3: User Di Luar Area (Ditolak)
- Buka app
- Login
- Buka Debug Menu
- Aktifkan Mock Location
- Pilih "✗ Luar Area (200m)"
- Klik "Perbarui Lokasi"
- Lihat status: ✗ Berada di luar area absensi
- Absensi ditolak ❌
🔍 Debugging Tips
Mock Location Tidak Muncul?
- Pastikan icon ⚙️ Settings diklik
- Pastikan toggle "Mock Location" dalam posisi ON
- Pastikan salah satu lokasi testing dipilih
Lokasi Tidak Update?
- Klik "Perbarui Lokasi" button
- Tunggu beberapa detik
- Check di console apakah LocationTestUtils enabled
Setelah Disable Mock, GPS Asli Masih Tidak Terdeteksi?
- Pastikan device memiliki GPS
- Pastikan permission LOCATION diberikan
- Keluar dari ruangan untuk signal yang lebih baik
- Tunggu beberapa detik agar GPS akurat
📱 UI Indicators
Saat Mock Location Aktif
Di Status Lokasi Card akan muncul:
📍 Status Lokasi
Lat: -6.8955
Lon: 107.6105
Jarak: 85.2m
🧪 MOCK LOCATION (Testing Mode)
✓ Berada dalam area absensi
Warna icon settings di TopAppBar akan berbeda untuk menunjukkan mode testing.
🔐 Security Considerations
- Mock Location hanya untuk development mode
- Tidak bisa diaktifkan dengan permission biasa
- Harus di-compile ulang untuk mengubah logika
- Server juga melakukan validasi lokasi (double-check)
📊 Koordinat Reference
| Lokasi | Latitude | Longitude | Jarak | Status |
|---|---|---|---|---|
| Kampus | -6.8961 | 107.6100 | 0m | ✓ |
| Inside | -6.8955 | 107.6105 | 85m | ✓ |
| Edge | -6.8948 | 107.6110 | 125m | ✓ + ⚠️ |
| Outside | -6.8930 | 107.6120 | 200m | ✗ |
| Far Outside | -6.8900 | 107.6150 | 400m | ✗ |
💡 Best Practices
- Selalu test dengan mock location dulu sebelum test dengan GPS asli
- Test semua 5 lokasi untuk cover semua scenario
- Disable mock location sebelum release ke production
- Gunakan logging untuk debug koordinat yang eksak
- Test di device fisik sebelum final release
🚀 Next Steps
Setelah testing selesai:
- ✅ Test dengan 5 lokasi testing
- ✅ Test dengan GPS asli
- ✅ Test dengan berbagai device
- ✅ Disable mock location
- ✅ Deploy ke production
Happy Testing! 🎉