# TESTING_REPORT — BANDUNGCRAFT.COM Phase 3

## Metode
- Static audit + typecheck (`tsc --noEmit` 0 error) + production build (`vite build` sukses).
- HTTP smoke: preview/dev server di `http://127.0.0.1:5173/` (`5174` bila port terpakai) → 200.
- Test framework belum ada di repo (tidak ada `*.test.ts`, Vitest/Jest, atau PHPUnit). Semua cases di bawah tercatat sebagai manual + automation yang wajib dibuat di Phase 4.

## Test cases

### Authentication
- AC-01 login demo benar → session tersimpan, AC-02 password salah → error, AC-03 register email duplikat → ditolak, AC-04 logout → session null. **Status: manual pass (mock). *Butuh backend test: password hashed, session rotation.***

### Role permission
- RP-01 Kasir tidak dapat edit produk (UI), RP-02 Operator dapat ubah production stage, RP-03 Admin dapat CRUD user. **Status: UI hint only; backend policy belum ada — to-do Phase 4.**

### Produk
- PR-01 tambah produk + SKU unik → tersimpan; PR-02 SKU duplikat → validasi pesan "SKU sudah dipakai"; PR-03 edit/hapus produk → muncul di katalog. **Pass.**

### Upload foto
- UP-01 custom order 4 foto → tersimpan; UP-02 >5 MB / format lain → ditolak; UP-03 edit produk unggulan → tampil. **Partial pass: client-side saja.**

### Custom order → Quotation
- CO-01 pelanggan kirim custom → status `pending_review`, CO-02 admin ubah status/catat internal, CO-03 buat quotation (4 komponen biaya, total = perf unit × qty, DP 50%), CO-04 kirim & approve, CO-05 convert → order baru + custom menjadi `converted`. **Pass.**

### Order & pembayaran
- OR-01 order website → total = subtotal + shipping, OR-02 transisi valid 11 status (lompat acak ditolak), OR-03 catat DP → `due` turun, OR-04 catat pelunasan sampai lunas → due 0, **OR-05 double payment disana → guard `due<=0` di Phase 3**, OR-06 overpay → di-clamp ke sisa. **Pass (guard baru ditambahkan).**

### POS
- POS-01 tambah produk & ubah qty, POS-02 checkout Tunai → kembalian benar (`cash − total`), POS-03 stok berkurang 1× (bukan 2×), POS-04 stok habis → ditolak, POS-05 buka/tutup kasir hitung tunai/non-tunai/pengeluaran → saldo akhir. **Pass; modifikasi settlement case-sensitive diperbaiki.**

### Inventory
- IN-01 adjust stok → `stockMoves` tercatat, IN-02 penjualan POS belanja stok, IN-03 filament menipis → badge & riwayat. **Pass.**

### Produksi
- PD-01 tambah job & pindah stage 9 langkah, PD-02 upload URL foto, PD-03 QC→Siap Dikirim. **Pass.**

### Pengeluaran & laporan
- FN-01 tambah pengeluaran kategori → masuk laporan, FN-02 omzet hanya transaksi `lunas`, FN-03 laba kotor = omzet − pengeluaran terlihat, FN-04 piutang = SUM(due), FN-05 DP diterima = SUM(paid). **Pass; HPP masih estimasi 60% (dibutuhkan `cost_price` historis di Phase 4).**

### Pengaturan website
- ST-01 ubah nama/logo/warna → tampil live, ST-02 reset demo → kembali seed. **Pass.**

## Bug ditemukan & diperbaiki pada Phase 3
1. `logs` field liar di AppContext (9 tempat) → diganti `activityLogs` (sebelumnya tidak tercatat konsisten, kini audit trail lengkap).
2. Settlement POS case-sensitive (`'Tunai'` vs `'tunai'`) → selalu `non-tunai` → fixed dengan `toLowerCase()`.
3. Double payment & overpayment → ditambah guard `due<=0` dan clamp amount.
4. Double convert quotation→order → ditambah cek order dengan `notes` mengandung quotation code.

## Belum teruji (harus dibuat di Phase 4)
- API integration tests (Auth, Products, Custom, Quotation, Orders, Payments, POS, Production, Finance).
- Idempotency-Key, silent concurrency (2 kasir bersamaan), file MIME server-side, role policy backend, backup restore.
- Unit test rumus keuangan (subtotal, total, kembalian, laba, due) — saat ini hanya manual.

## Hasil
Tidak ada error kritis tersisa pada build & typecheck. Perhitungan uang sudah divalidasi sesuai rumus spec; risiko yang tinggal adalah dua faktor backend (HPP historis, idempotency server) yang dirancang di dokumen DB/API.
