# Test Scenario: MVP Platform Jurnal Ilmiah (PHP Native)

Dokumen ini berisi skenario End-to-End (E2E) testing untuk Minimum Viable Product (MVP) platform jurnal ilmiah modern. Skenario ini diurutkan berdasarkan alur hidup jurnal, submission, hingga fitur ekosistem akademik.

---

## FASE 1: Inisiasi Jurnal

### TC-01: Super Admin Membuat Jurnal Baru
*   **Role**: Super Admin
*   **Data Dummy**: Nama Jurnal: "Journal of Medical AI", Singkatan: "JMAI", Email Kontak: "contact@jmai.org".
*   **Langkah Pengujian**:
    1. Login menggunakan akun Super Admin.
    2. Navigasi ke menu **Journal Administration**.
    3. Isi form pembuatan jurnal dan klik **Create Journal**.
*   **Expected Result**: Data jurnal tersimpan di tabel `journals`. Pesan sukses "Journal created" muncul. Jurnal terdaftar di sistem.
*   **Potensi Bug**: Validasi singkatan ganda (unique constraint) tidak berfungsi murni dari PHP; Logo upload gagal akibat permission folder.
*   **Prioritas Perbaikan**: **High**

### TC-02: Journal Manager Mengatur Jurnal
*   **Role**: Journal Manager (atau Editor in Chief)
*   **Data Dummy**: Kebijakan Review: "Double-Blind", Focus & Scope: "Penerapan Machine Learning pada diagnosa medis."
*   **Langkah Pengujian**:
    1. Login sebagai Journal Manager.
    2. Masuk ke **Journal Settings**.
    3. Update scope, guidelines author, dan simpan.
*   **Expected Result**: Deskripsi jurnal dan setelan terupdate. Di halaman publik, penulis (author) dapat membaca perubahan panduan tersebut.
*   **Potensi Bug**: Form tidak memfilter tag berbahaya/XSS di area text-rich (HTML escape gagal).
*   **Prioritas Perbaikan**: **High**

---

## FASE 2: Submission & Pre-Screening (AI)

### TC-03: Author Membuat Submission
*   **Role**: Author
*   **Data Dummy**: Akun Author terdaftar.
*   **Langkah Pengujian**:
    1. Login sebagai Author.
    2. Navigasi ke **New Submission**.
    3. Centang persetujuan submission checklist.
*   **Expected Result**: Author dapat melanjutkan ke langkah ke-2 (Upload File). Sistem men-generate ID Submission sementara.
*   **Potensi Bug**: Tombol "Next" tidak merespon karena deteksi Checkbox (JS) error.
*   **Prioritas Perbaikan**: **Medium**

### TC-04: Author Upload Artikel
*   **Role**: Author
*   **Data Dummy**: File *Manuskrip_Demo.pdf* (max 5MB).
*   **Langkah Pengujian**:
    1. Pada tab "Upload", pilih file PDF.
    2. Klik tombol Upload.
*   **Expected Result**: File tersimpan dengan nama acak di `storage/uploads/submissions/`. Record terbuat di DB, status file berubah menjadi uploaded.
*   **Potensi Bug**: Bypass tipe MIME; file ekstensi `.php.pdf` tereksekusi oleh server.
*   **Prioritas Perbaikan**: **Critical**

### TC-05: Author Mengisi Metadata
*   **Role**: Author
*   **Data Dummy**: Judul: "Predictive Analytics in COVID-19", Abstrak: "...", Keywords: "AI, Covid, Predictive".
*   **Langkah Pengujian**:
    1. Lanjut ke tab "Metadata".
    2. Isi form judul, abstrak, dan tambah keywords, klik Save.
*   **Expected Result**: Database pada form *submissions* terupdate dengan judul dan abstrak.
*   **Potensi Bug**: Masalah validasi string panjang di tabel database jika Abstrak terlalu panjang melampaui column limit (Text).
*   **Prioritas Perbaikan**: **Medium**

### TC-06: Author Submit Artikel
*   **Role**: Author
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Telusuri langkah summary penyelesaian form.
    2. Klik **Finish Submission**.
*   **Expected Result**: Status submission berubah dari `draft` menjadi `submitted`. Author diarahkan ke dashboard list naskah. Notifikasi terkirim.
*   **Potensi Bug**: Double click saat simpan memodifikasi 2 record bersamaan bila tombol submit tidak langsung disable.
*   **Prioritas Perbaikan**: **High**

### TC-07: AI Reviewer Simulation Masuk Job Pending
*   **Role**: Sistem / Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Begitu nomor `TC-06` berhasil, buka tabel `system_events` di database.
*   **Expected Result**: Di dalam tabel akan muncul 1 record dengan `event_name` = 'queue_ai_review', dengan status = `pending`.
*   **Potensi Bug**: Sistem gagal menangkap/merangkai teks PDF untuk diparsing sebagai parameter prompt.
*   **Prioritas Perbaikan**: **High**

### TC-08: Cron Memproses AI Analysis
*   **Role**: CLI / Cron
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Secara simulatif, jalankan skrip `/cron/process_events.php` (misal run via browser).
*   **Expected Result**: Status di `system_events` berubah ke `processing` kemudian `completed`. Hasil sintesis skor dari Gemini masuk ke log AI Score di submission tersebut.
*   **Potensi Bug**: Limit token dari API eksternal (Gemini) habis, membuat HTTP code status timeout dan cron macet.
*   **Prioritas Perbaikan**: **High**

---

## FASE 3: Editorial Workflow

### TC-09: Editor Melihat Submission
*   **Role**: Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Akun Editor login.
    2. Buka **Editorial Dashboard**, klik tab *Unassigned/New Submissions*.
*   **Expected Result**: Manuskrip baru author tadi langsung terlihat di daftar antrian dengan badge "New".
*   **Potensi Bug**: Tabel SQL JOIN salah query sehingga manuskrip jurnal lain malah tampil campur di dashboard editor A.
*   **Prioritas Perbaikan**: **Critical**

### TC-10: Editor Melakukan Initial Check
*   **Role**: Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Buka detail manuskrip tadi.
    2. Lihat panel **AI Pre-screen Insight** yang dihasilkan dari `TC-08`. Editor memutuskan manuskrip valid.
    3. Editor mengubah state ke `In Review`.
*   **Expected Result**: Status global submission menjadi `in_review`. Author bisa melihat perubahan status ini di dashboardnya.
*   **Potensi Bug**: UI AI Insight tidak *render* jika JSON output Gemini tak bisa di-parse.
*   **Prioritas Perbaikan**: **High**

### TC-11: Editor Assign Reviewer
*   **Role**: Editor
*   **Data Dummy**: Reviewer Name: "Dr. Budi"
*   **Langkah Pengujian**:
    1. Klik "Add Reviewer" di dashboard editorial artikel tersebut.
    2. Search Dr. Budi, klik **Assign**.
*   **Expected Result**: Status reviewer Dr. Budi terdaftar dengan status undangan `pending`.
*   **Potensi Bug**: Tombol search reviewer mati (AJAX Fetch fail karena CSRF token mismatch).
*   **Prioritas Perbaikan**: **High**

### TC-12: Reviewer Menerima Invitation
*   **Role**: Reviewer
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Login sebagai Dr. Budi. Masuk ke **Reviewer Dashboard**.
    2. Buka "Active Invitations". Klik **Accept Review**.
*   **Expected Result**: Tanggal *due date* otomatis terkalkulasi. Status undangan di Editorial panel berganti dari `pending` ke `accepted`.
*   **Potensi Bug**: Kalkulasi *due date* di PHP Native (date interval) kacau bila zona beda waktu tidak dikunci (timezone mismatch).
*   **Prioritas Perbaikan**: **Medium**

### TC-13: Reviewer Submit Review
*   **Role**: Reviewer
*   **Data Dummy**: Rekomendasi: "Minor Revisions", Field komentar: "Tambahkan metodologi tabel...".
*   **Langkah Pengujian**:
    1. Tulis penilaian di form Review Submission, lalu isi Rekomendasi.
    2. Upload lampiran (opsional), klik **Submit to Editorial**.
*   **Expected Result**: Status reviewer menjadi `completed`. Editor akan melihat notifikasi masuk. Skor reputasi pending dihitung.
*   **Potensi Bug**: Form bisa ter-post berulang sehingga review submission bertumpuk dalam DB.
*   **Prioritas Perbaikan**: **High**

### TC-14: Editor Meminta Revisi
*   **Role**: Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Kembali login Editor, buka submission terkait.
    2. Lihat hasil dan ambil keputusan klik **Request Revisions**. Forward catatan Dr. Budi.
*   **Expected Result**: Status master submission menjadi `revision_required`. Teks notifikasi sampai di author. 
*   **Potensi Bug**: Identitas reviewer (blind peer-review bocor) bila checkbox "forward blind email" logic salah.
*   **Prioritas Perbaikan**: **Critical (Etik)**

### TC-15: Author Upload Revisi
*   **Role**: Author
*   **Data Dummy**: File *Manuskrip_Revisi.pdf*.
*   **Langkah Pengujian**:
    1. Author buka submission yang membutuhkan iterasi, upload manuskrip ganti.
    2. Tulis catatan respon untuk editor, lalu submit putaran ke-2.
*   **Expected Result**: Versi file baru (R1) diterima DB, status kembali terpoles ke `in_review`.
*   **Potensi Bug**: Sistem menimpa total file lama `Manuskrip_Demo.pdf`, track revision hilang. (Seharusnya file di-versioning).
*   **Prioritas Perbaikan**: **High**

### TC-16: Editor Accept Artikel
*   **Role**: Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Editor melihat file baru, semua cukup.
    2. Klik **Make Decision > Accept Submission**.
*   **Expected Result**: Status final adalah `accepted`. Terkunci dan dikirim panel antrian publikasi.
*   **Potensi Bug**: Keputusan ini bisa ter-rewind oleh URL tembakan (tidak terlindungi).
*   **Prioritas Perbaikan**: **Critical**

---

## FASE 4: Publikasi

### TC-17: Artikel Masuk Publication Queue
*   **Role**: Editor
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Buka sidebar "Publication & Issues".
    2. Artikel "Predictive Analytics in COVID-19" terlihat nganggur di *Unpublished / Production*.
*   **Expected Result**: List memuat artikel yang sudah diterima namun rilis public-nya masih hold.
*   **Potensi Bug**: Artikel `rejected` muncul karena JOIN where clause diabaikan.
*   **Prioritas Perbaikan**: **High**

### TC-18: Editor Membuat Issue
*   **Role**: Editor
*   **Data Dummy**: Volume 5, Issue 2, Year 2026.
*   **Langkah Pengujian**:
    1. Buat kontainer Issue melalui "Create Issue".
    2. Pasangkan artikel `TC-17` ke dalam Issue tersebut.
*   **Expected Result**: Relasi dari tabel `articles.issue_id` tergabung.
*   **Potensi Bug**: Issue constraint duplicate jika editor membuat 2 Issue Vol.5 No.2 bersamaan.
*   **Prioritas Perbaikan**: **Low**

### TC-19: Artikel Dipublish
*   **Role**: Editor
*   **Data Dummy**: DOI Dummy Prefix, tanggal Publish.
*   **Langkah Pengujian**:
    1. Masuk ke Manage Issue, klik **Publish Current Issue**.
*   **Expected Result**: Semua artikel dalam Issue tersebut berubah status menjadi `published`. Halaman Web Jurnal Umum/Homepage akan live mengampanyekan judul ini.
*   **Potensi Bug**: Permintaan cURL update meta API sinkronisasi CrossRef error kalau koneksi putus (jika ada).
*   **Prioritas Perbaikan**: **Medium**

---

## FASE 5: Statistik & Reputasi

### TC-20: Reader Membuka Artikel
*   **Role**: Reader (Guest / Tanpa Login)
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Kunjungi Halaman Indeks > Klik judul makalah tersebut.
    2. Baca Full HTML/Abstract, kemudian pasang klik Download PDF.
*   **Expected Result**: Halaman dirender sempurna. AJAX stat logs mendeteksi views dan menulis row "view_tanggal" + "IP/Device" di tabel analitik.
*   **Potensi Bug**: Satu user merefresh 1000x halaman PDF dan total DB Views melonjak tak logis (tanpa Session/Cookie tracker).
*   **Prioritas Perbaikan**: **Medium**

### TC-21: Views dan Downloads Tercatat
*   **Role**: Sistem
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Buka database (phpMyAdmin), periksa tabel `article_analytics_logs`.
*   **Expected Result**: Terekam entitas ID paper dan Action type (View == 1, Download == 1).
*   **Potensi Bug**: Penanganan Timezone saat event ter-create, `created_at` selisih 12 jam (UTC vs Server).
*   **Prioritas Perbaikan**: **Low**

### TC-22: Author Melihat Analytics
*   **Role**: Author
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. Author login. Masuk panel **Analytics & Citations**.
*   **Expected Result**: Diagram Chart.js muncul dengan sumbu Y merepresentasikan grafik metrics tadi.
*   **Potensi Bug**: Jika tak ada views, array data kosong di PHP tidak dirubah JSON format, merusak syntax JS pada tag `<script>`.
*   **Prioritas Perbaikan**: **High**

### TC-23: Reviewer Score Diperbarui
*   **Role**: Sistem / Reviewer
*   **Data Dummy**: Cron eksekusi harian `update_reviewer_scores.php`.
*   **Langkah Pengujian**:
    1. Eksekusi file Cron secara manual.
    2. Login sebagai Dr. Budi. Lihat dashboard badges.
*   **Expected Result**: Dr. Budi menerima poin (+10 The Swift Reviewer Badge) untuk partisipasi penyelesaian di `TC-13`. Tampilan UI badge terang.
*   **Potensi Bug**: Cron skrip memproses ulang rekaman lama, mencetak Skor berganda pada reviewer (Lack of "Processed" flag status di database).
*   **Prioritas Perbaikan**: **Medium**

---

## FASE 6: Networking & Ekosistem (Modul Tambahan)

### TC-24: User Membuat Research Profile
*   **Role**: Author (User manapun)
*   **Data Dummy**: Universitas: "Harvard Med", Skills: "Virology, Data Mining".
*   **Langkah Pengujian**:
    1. Buka **Public Profile**. Lengkapi forms Biodata, afiliasi, dan tag keahlian akademik.
*   **Expected Result**: Halaman Portofolio Akademik tayang. Artikel ter-publish dari `TC-19` tercantum otomatis pada daftar publication miliknya.
*   **Potensi Bug**: Profil Avatar form tak menolak format file non-image (misal memprofile.sh), yang berbahaya di eksekusi front-end.
*   **Prioritas Perbaikan**: **Critical**

### TC-25: User Mencoba Matchmaking
*   **Role**: Reader (Anggap sebagai kolega: User X)
*   **Data Dummy**: -
*   **Langkah Pengujian**:
    1. User X buka menu **Matchmaking**. Memasukkan parameter tag cari: "Data Mining".
*   **Expected Result**: Profil Author pertama tadi muncul di result dengan badge "95% Compatibility".
*   **Potensi Bug**: MySQL `LIKE '%keyword%'` sangat lambat bila records capai 10 ribu pencarian teks parsial (Disarankan pakai FULLTEXT indexing).
*   **Prioritas Perbaikan**: **Low (Skalabilitas)**

### TC-26: User Join Community dan Membuat Post
*   **Role**: Author
*   **Data Dummy**: Post Title: "Selesai Publika di Vol.5 - Adakah yang senasib meneliti Covid Datasets?"
*   **Langkah Pengujian**:
    1. Navigasi ke **Research Communities**. Gabung hub "Medical Informatics".
    2. Pengeposan thread baru pada kategori "Discussion".
    3. Reader X membalas komentar ke postingan ini.
*   **Expected Result**: Timeline postingan realtime terbentuk. Reader bisa balas komentas. Sistem Role Community berhasil memecah grup.
*   **Potensi Bug**: Form komentar kebal perlindungan XSS sehingga script `<script>alert(cookie)</script>` tereksekusi pada browser Author ketika membuka notifikasi komentar.
*   **Prioritas Perbaikan**: **Critical**
