| TS-AUTH-01 |
E2E |
Email belum terdaftar |
Register → buka link verifikasi → login |
Akun aktif, dashboard dapat diakses, email terkirim via queue. |
| TS-AUTH-02 |
Integration |
Email telah terdaftar |
Kirim register dengan email sama, beda kapital |
409 EMAIL_ALREADY_REGISTERED; tidak ada akun kedua. |
| TS-AUTH-03 |
Integration |
Akun unverified |
Login dan aktivasi free |
Ditolak sesuai error akun belum verified. |
| TS-AUTH-04 |
Integration |
Akun aktif |
Login salah berulang hingga limit |
429 setelah batas; password tidak muncul di respons/log. |
| TS-AUTH-05 |
E2E |
Akun aktif |
Forgot password → reset dengan token → login password baru |
Password lama ditolak, baru diterima, token lama tidak dapat diulang. |
| TS-LIC-01 |
Integration |
Member aktif, NOTO free aktif |
Activate-free dua kali |
Pertama 201 active_free; kedua 409; satu License-ID saja. |
| TS-LIC-02 |
Unit + integration |
Paid license expired |
Jalankan lifecycle pada expiry lalu grace end |
active → grace_period → suspended; notifikasi dijadwalkan. |
| TS-LIC-03 |
Integration |
Dua member |
Member A baca license B |
404/403 tanpa bocor detail license B. |
| TS-ORD-01 |
Integration |
Member aktif, plan paid |
Buat order dengan idempotency key sama dua kali |
Order/payment URL sama; satu order pending_payment. |
| TS-ORD-02 |
Integration |
Order pending |
Kirim key sama dengan body berbeda |
409 dan order awal tidak berubah. |
| TS-PAY-01 |
Integration |
Order pending |
Kirim webhook Midtrans valid settlement |
Order paid, payment settlement, license aktif, audit log dibuat atomik. |
| TS-PAY-02 |
Integration |
Order pending |
Webhook amount/signature invalid |
400; tidak ada perubahan order/license; event tercatat. |
| TS-PAY-03 |
Integration |
Settlement sudah sukses |
Kirim webhook identik ulang |
200; jumlah license/payment/email tidak bertambah. |
| TS-PAY-04 |
Sandbox |
Kredensial sandbox |
Checkout Midtrans dan Xendit lalu selesaikan/cancel |
Status internal sesuai callback masing-masing gateway. |
| TS-SSO-01 |
Integration |
OAuth client/redirect URI valid |
Authorize dengan PKCE → token exchange |
Code sekali pakai, JWT RS256 valid via JWKS. |
| TS-SSO-02 |
Integration |
Member lisensi suspended |
Authorize dan refresh token |
Ditolak license_suspended/license_inactive. |
| TS-ADM-01 |
Integration |
Member non-admin |
Panggil endpoint admin |
403; audit tidak memuat secret. |
| TS-ADM-02 |
Integration |
Super admin |
Suspend member lalu cek token/akses |
Aksi dicatat; akses baru ditolak sesuai aturan. |
| TS-JOB-01 |
Queue |
Email provider disimulasikan gagal |
Proses job email |
Job retry dengan backoff; transaksi register/payment tetap sukses. |
| TS-JOB-02 |
Queue |
Dua worker/scheduler |
Jalankan lifecycle bersamaan |
Satu transisi efektif; tidak ada email/status ganda. |