# 🧪 Testing Guide - Fitur Hubungi Kami

## 📝 Test Case 1: Form Kontak Tampil dengan Baik

**Klik:** Menu "Kontak" di navbar atau akses `/kontak`

**Expected Result:**
- ✅ Halaman muncul dengan judul "Kami Siap Membantu"
- ✅ Ada 3 info box: Alamat, Telepon, Email
- ✅ Form dengan field: Nama, Email, Phone, Subjek, Pesan
- ✅ Tombol "Kirim Pesan" berwarna biru
- ✅ Jam operasional dan peta Google Maps terlihat
- ✅ Social media icons di bawah

---

## 📝 Test Case 2: Validasi Form Kontak

**Test 2a - Field Kosong:**
1. Klik "Kirim Pesan" tanpa isi apapun
2. **Expected:** Error message muncul untuk setiap field yang required

**Test 2b - Email Invalid:**
1. Isi Nama: "Test User"
2. Isi Email: "bukan-email" (tanpa @)
3. Click Submit
4. **Expected:** Error "Format email tidak valid"

**Test 2c - Pesan Terlalu Pendek:**
1. Isi Pesan dengan hanya 5 karakter
2. Click Submit
3. **Expected:** Error "Pesan minimal 10 karakter"

---

## 📝 Test Case 3: Pengiriman Pesan Berhasil

**Steps:**
1. Isi form dengan data valid:
   - Nama: "Muhammad Riyan"
   - Email: "riyan@gmail.com"
   - Phone: "+62 812 3456 7890"
   - Subjek: "Pertanyaan Umum"
   - Pesan: "Saya ingin tahu lebih lanjut tentang fitur analisis Altman Z-Score"

2. Click "Kirim Pesan"

**Expected Result:**
- ✅ Redirect ke halaman success
- ✅ Toast/alert: "Terima kasih! Pesan Anda berhasil dikirim. Kami akan membalas dalam 1x24 jam."
- ✅ Pesan tersimpan di database dengan status "pending"

**Verifikasi Database:**
```bash
mysql> SELECT * FROM contacts WHERE email = 'riyan@gmail.com';
```
Harus ada record dengan:
- status: "pending"
- read_at: NULL
- replied_at: NULL

---

## 📝 Test Case 4: Email Admin Diterima

**Expected:**
- Admin mendapat email dari "noreply@finanalysis.pro"
- Subject: "Pesan Kontak Baru: Pertanyaan Umum"
- Isi email mencakup:
  - Nama: Muhammad Riyan
  - Email: riyan@gmail.com
  - Subject: Pertanyaan Umum
  - Message (full)
  - Link ke admin dashboard

**Jika Email Tidak Terkirim:**
- Check `.env` MAIL settings
- Check `storage/logs/laravel.log` untuk error
- Cek SMTP credentials

---

## 📝 Test Case 5: Auto-Reply Email User Diterima

**Expected:**
- User (riyan@gmail.com) mendapat email balasan otomatis
- Subject: "Terima Kasih telah Menghubungi Kami"
- Isi email mencakup:
  - Greeting dengan nama user
  - Terima kasih atas pesan
  - Response time (Email: Dalam 24 jam)
  - Footer dengan info kontak

---

## 📝 Test Case 6: Admin Login & Lihat Pesan

**Steps:**
1. Login sebagai admin di `/admin`
2. Klik menu "Contacts" atau akses `/admin/contacts`

**Expected Result:**
- ✅ Header dengan judul "Kelola Pesan"
- ✅ 5 stat cards menampilkan:
  - Total Pesan: 1
  - Belum Dibaca: 1 (warna oranye)
  - Menunggu Respon: 1 (warna merah)
  - Sudah Dibaca: 0
  - Sudah Dibalas: 0
- ✅ Tabel pesan dengan kolom: Checkbox, Pengirim, Subjek, Status, Tanggal, Aksi
- ✅ Pesan dari "Muhammad Riyan" tampil dengan status "pending"
- ✅ Background row berwarna kuning (unread indicator)

---

## 📝 Test Case 7: Filter & Search Pesan

**Test 7a - Filter by Status:**
1. Di dropdown Status, pilih "Menunggu"
2. Click "Filter"
3. **Expected:** Hanya pesan dengan status "pending" yang tampil

**Test 7b - Search by Name:**
1. Ketik "Muhammad" di search box
2. Click "Filter"
3. **Expected:** Hanya pesan dari "Muhammad Riyan" yang tampil

**Test 7c - Search by Email:**
1. Ketik "riyan@gmail" di search box
2. Click "Filter"
3. **Expected:** Pesan dengan email matching tampil

**Test 7d - Reset:**
1. Click "Reset"
2. **Expected:** Filter hilang, semua pesan tampil kembali

---

## 📝 Test Case 8: Lihat Detail Pesan

**Steps:**
1. Di halaman `/admin/contacts`, klik tombol "Detail" pada pesan

**Expected Result:**
- ✅ Halaman detail pesan terbuka
- ✅ Informasi pesan ditampilkan lengkap:
  - Avatar dengan inisial
  - Nama pengirim
  - Email pengirim
  - Waktu pengiriman
  - Subjek
  - Pesan lengkap
- ✅ Status berubah dari "pending" → "read"
- ✅ Ada form reply dengan textarea untuk balasan
- ✅ Tombol "Kirim Balasan"

**Database Check:**
```bash
mysql> SELECT read_at FROM contacts WHERE email = 'riyan@gmail.com';
```
`read_at` harus berisi timestamp saat ini.

---

## 📝 Test Case 9: Admin Membalas Pesan

**Steps:**
1. Di halaman detail pesan, ketik balasan di textarea:
   ```
   Halo Muhammad,
   
   Terima kasih telah menghubungi kami. Fitur Altman Z-Score kami sudah mendapat sertifikasi dari pakar keuangan internasional. Untuk informasi lebih lanjut, silakan lihat bagian Features di website kami atau hubungi team kami di support@finanalysis.pro
   
   Salam,
   Tim Support
   ```

2. Click "Kirim Balasan"

**Expected Result:**
- ✅ Redirect ke halaman list kontak
- ✅ Toast: "Balasan berhasil dikirim ke riyan@gmail.com"
- ✅ Status pesan berubah ke "replied"
- ✅ Timestamp `replied_at` tercatat

---

## 📝 Test Case 10: User Menerima Email Balasan

**Expected:**
- Email diterima di riyan@gmail.com
- Subject: "Re: Pertanyaan Umum"
- Isi email mencakup:
  - Greeting: "Halo Muhammad"
  - Balasan dari admin (full text)
  - Pesan asli user ditampilkan untuk referensi
  - Footer dengan info kontak

---

## 📝 Test Case 11: Export CSV

**Steps:**
1. Di halaman `/admin/contacts`, klik tombol "Export CSV"

**Expected Result:**
- ✅ File CSV didownload
- ✅ Nama file: `contacts-2026-04-04.csv` (atau sesuai tanggal)
- ✅ CSV berisi kolom: ID, Name, Email, Subject, Status, Date, Reply Status

---

## 📝 Test Case 12: Delete Pesan

**Steps:**
1. Di halaman list kontak, klik tombol delete pada pesan

**Expected Result:**
- ✅ Confirm dialog muncul: "Anda yakin ingin menghapus pesan ini?"
- ✅ Klik "Ya"
- ✅ Pesan dihapus
- ✅ Toast: "Pesan berhasil dihapus"

---

## 📝 Test Case 13: Bulk Delete

**Steps:**
1. Di halaman list kontak, centang checkbox untuk beberapa pesan
2. Klik tombol "Delete Selected"

**Expected Result:**
- ✅ Confirm dialog muncul
- ✅ Multiple pesan dihapus sekaligus
- ✅ Toast: "N pesan berhasil dihapus"

---

## 📝 Test Case 14: Update Status

**Steps:**
1. Klik detail pesan
2. Di bagian status, klik dropdown
3. Pilih status baru, misal "archived"

**Expected Result:**
- ✅ Status berubah
- ✅ Toast: "Status pesan berhasil diupdate"

---

## 🎯 Checklist Akhir

- [ ] Semua test case 1-14 berhasil
- [ ] Email masuk ke admin
- [ ] Email auto-reply terkirim ke user
- [ ] Email balasan terkirim ke user
- [ ] Database records akurat
- [ ] UI/UX responsif di mobile
- [ ] No error di browser console
- [ ] No error di Laravel logs

---

## 📞 Jika Ada Masalah

1. **Clear cache:**
   ```bash
   php artisan cache:clear
   php artisan view:clear
   ```

2. **Check logs:**
   ```bash
   tail -f storage/logs/laravel.log
   ```

3. **Test email config:**
   ```bash
   php artisan tinker
   >>> Mail::raw('Test email', function($msg) { $msg->to('test@example.com'); });
   ```

---

**Happy Testing! 🚀**
