Lewati ke konten utama

QA Requirements & Test Basis

AtributNilai
Versi1.0
StatusReady for QA
Baseline codelinkzy@7615cb7a + working tree 18 Agustus 2026
Tanggal baseline18 Agustus 2026
PemilikProduct, QA, dan Engineering
ProdukLinkzy Wedding & Commerce Platform
Baseline bergerak

Jika build yang diuji lebih baru daripada baseline di atas, catat commit/build pada test run dan lakukan impact analysis untuk perubahan setelah baseline.

1. Tujuanโ€‹

Dokumen ini mendefinisikan persyaratan pengujian minimum sebelum perubahan Linkzy dapat dirilis. Pengujian harus membuktikan bahwa alur utama berfungsi, data antar-organisasi tetap terisolasi, subscription diterapkan dengan benar, dan tidak ada regresi pada fitur wedding maupun commerce yang sudah tersedia.

Dokumen ini berisi requirement dan acceptance criteria. Langkah test case yang sangat rinci boleh dikelola pada test-management tool, tetapi wajib mempertahankan ID requirement dari dokumen ini agar hasil pengujian dapat ditelusuri.

2. Ruang lingkupโ€‹

Modul yang wajib diuji:

  • autentikasi, otorisasi, dan tenant isolation;
  • pricing, checkout, payment, subscription, dan free trial 7 hari;
  • admin user dan daftar subscription/payment;
  • Wedding Event, guest, RSVP, QR, dan reception check-in;
  • Wedding Website dan invitation editor;
  • LED Welcome Display;
  • souvenir/voucher dan reports;
  • WhatsApp Cloud API;
  • keamanan input, upload, dan custom HTML;
  • responsivitas, kompatibilitas browser, aksesibilitas dasar, dan performa.

Integrasi provider eksternal seperti payment gateway dan Meta WhatsApp diuji menggunakan sandbox/test account. Pengujian transaksi produksi berada di luar cakupan kecuali ada persetujuan tertulis.

Data minimumโ€‹

Sediakan sekurangnya:

  • dua organisasi berbeda; salah satunya memiliki organizer, staf organizer, dan freelance;
  • satu user tanpa subscription;
  • satu free trial aktif, satu trial yang berakhir hari ini, dan satu trial kedaluwarsa;
  • subscription aktif, dibatalkan namun masih dalam periode aktif, expired, dan payment gagal;
  • satu Wedding Event draft dan satu published;
  • guest Regular, VIP, dan VVIP, termasuk guest tanpa nomor WhatsApp;
  • invitation dengan blok RSVP, Custom HTML, dan dekorasi;
  • inventori souvenir dengan stok cukup, stok terakhir, dan stok habis;
  • koneksi WhatsApp sandbox/test dengan minimal satu template approved.

4. Entry dan exit criteriaโ€‹

Entry criteriaโ€‹

  • Acceptance criteria fitur telah disetujui.
  • Build berhasil dan dapat dijalankan pada environment target.
  • Migration dan seeder berhasil tanpa intervensi manual.
  • Environment serta integrasi sandbox tersedia.
  • Tidak ada bug blocker yang membuat alur pengujian tidak dapat dimulai.

Exit criteriaโ€‹

  • Seluruh test berprioritas P0 dan P1 lulus.
  • Tidak ada defect severity Blocker atau Critical yang masih terbuka.
  • Defect Major yang diterima sebagai known issue memiliki persetujuan Product dan Engineering.
  • Regression, tenant-isolation, dan subscription-expiry test lulus.
  • Bukti hasil test tersedia dan requirement traceability diperbarui.
  • Production smoke test lulus setelah deployment.

5. Prioritas dan severityโ€‹

LevelArti
P0Alur kritis; wajib diuji pada setiap release
P1Fitur utama; wajib lulus sebelum release
P2Fitur pendukung dan edge case
P3Penyempurnaan visual atau risiko rendah
SeverityContoh
BlockerAplikasi tidak dapat dibuka atau QA tidak dapat melanjutkan test
CriticalBypass subscription, kebocoran tenant, kehilangan data, payment ganda, atau remote code execution
MajorAlur utama gagal tanpa workaround yang layak
MinorMasalah non-kritis dengan workaround
TrivialCopy, spacing, atau cosmetic issue

6. Functional test requirementsโ€‹

A. Autentikasi, role, dan tenantโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-AUTH-001Login menggunakan kredensial validUser masuk dan diarahkan ke dashboard yang sesuai roleP0
QA-AUTH-002Login dengan password salah atau akun tidak tersediaLogin ditolak dengan pesan aman tanpa membocorkan keberadaan akunP1
QA-AUTH-003Token/session tidak valid atau kedaluwarsaAPI menolak request dan UI mengarahkan user untuk login ulangP0
QA-AUTH-004Freelance membuka route/API konfigurasi atau mengirim mutation selain operasional hari-HAkses ditolak dengan 403; data tidak berubahP0
QA-AUTH-005Superadmin membuka daftar user, subscription, dan paymentData lintas organisasi tampil; organizer hanya melihat user organisasinya sendiriP0
QA-AUTH-006User organisasi A meminta event/guest/report organisasi B melalui ID langsungRequest ditolak atau menghasilkan not found; tidak ada data tenant B yang bocorP0
QA-AUTH-007Dua organisasi menggunakan Contact dengan email/telepon samaRecord dan aktivitas wedding tetap terisolasi per organisasiP0
QA-AUTH-008Logout lalu gunakan kembali halaman atau token lamaSession tidak dapat dipakai untuk operasi terproteksiP1
QA-AUTH-009Staf mencoba membuat, mengubah, atau menghapus Wedding EventSemua operasi ditolak 403, sementara daftar/detail event tetap dapat dibacaP0
QA-AUTH-010Staf atau freelance memanggil endpoint DELETE apa pun secara langsungRequest ditolak 403 oleh backend dan tombol hapus tidak tampilP0
QA-AUTH-011Freelance melakukan check-in dan penyerahan souvenirKedua aksi operasional berhasil dan tercatat pada tenant/event yang benarP0
QA-AUTH-012Staf/freelance melihat kehadiran dan formasi mejaData dapat dibaca tanpa memperoleh akses edit yang tidak diizinkanP1
QA-AUTH-013Organizer membuat akun staf dan freelanceAkun menggunakan tenant organizer yang sama dan dapat login sesuai roleP0

B. Pricing, checkout, free trial, dan subscriptionโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-SUB-001Navigasi dari landing page ke pricingPricing terbuka sebagai halaman tersendiri, bukan section landing pageP1
QA-SUB-002Pilih paket dari pricingCheckout menerima paket yang benar, menampilkan harga dan ringkasan yang konsistenP0
QA-SUB-003Checkout dengan input wajib kosong/tidak validSubmit ditolak dan validasi tampil pada field terkaitP1
QA-SUB-004Payment sukses dari provider/sandboxPayment tercatat sekali dan subscription aktif dengan periode yang benarP0
QA-SUB-005Callback/webhook payment sukses dikirim berulangProses idempotent; tidak ada payment atau periode subscription gandaP0
QA-SUB-006Payment pending, gagal, atau dibatalkanStatus akurat dan akses berbayar tidak diberikan sebelum payment validP0
QA-SUB-007User baru mengaktifkan free trialTrial aktif tepat 7 hari berdasarkan waktu serverP0
QA-SUB-008User mencoba mengaktifkan trial keduaTrial kedua ditolak; periode trial tidak diperpanjangP0
QA-SUB-009Trial masih aktif sebelum ends_atFitur sesuai paket trial dapat diaksesP0
QA-SUB-010Waktu mencapai atau melewati ends_atAkses fitur subscription ditolak dan user diarahkan ke halaman subscription expired/pricingP0
QA-SUB-011Subscription aktif berakhirSetelah waktu server melewati expiry, akses langsung melalui UI maupun API ditolakP0
QA-SUB-012Mengubah jam browser agar trial terlihat aktifKeputusan akses tetap mengikuti waktu backend/serverP0
QA-SUB-013User tanpa record subscriptionTidak terjadi panic/500; sistem memperlakukan user sebagai tidak memiliki akses aktifP0
QA-SUB-014Subscription diperpanjang setelah expiredAkses kembali aktif tanpa menghilangkan data milik userP1

C. Admin user, subscription, dan paymentโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-ADM-001Jalankan seeder pada database kosongOrganizer, staf, freelance, dan superadmin dibuat sesuai spesifikasi serta dapat loginP0
QA-ADM-002Seeder dijalankan ulangSeeder idempotent dan tidak membuat akun/payment duplikatP1
QA-ADM-003Buka daftar userLoading, empty state, data state, pagination/filter bila tersedia, dan error state tampil benarP1
QA-ADM-004Buka daftar subscription/paymentUser, paket, nominal, status, dan tanggal terhubung dengan record yang benarP1
QA-ADM-005Staf atau freelance membuka URL manajemen user/superadmin secara langsungRoute dan API tetap ditolakP0
QA-ADM-006Data memiliki field kosong atau relasi sudah dihapusHalaman tidak crash dan menampilkan fallback yang amanP2
QA-ADM-007Buka /dashboard/settings sebagai user tenant aktifGET /api/settings/admin mengembalikan 200, bukan Tenant context missingP0
QA-ADM-008Ubah Nama EO / Wedding Organizer dan unggah foto profilData tersimpan per tenant dan langsung tampil di bagian atas sidebar seluruh anggota timP1
QA-ADM-009Unggah file non-gambar atau gambar lebih dari 3 MBUpload ditolak dengan pesan validasi dan profil lama tetap digunakanP1
QA-ADM-010Freelance mencoba mengubah profil organisasi melalui UI atau APIForm bersifat read-only dan mutation API ditolak 403P0

D. Wedding Event dan guestโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-GST-001Membuat, mengubah, draft, dan publish Wedding EventStatus serta data tersimpan dan reload menampilkan nilai terbaruP0
QA-GST-002Menambah guest manualGuest terhubung ke event dan organisasi yang benarP0
QA-GST-003Import .xlsx validSemua baris valid diimport dan ringkasan imported/skipped akuratP1
QA-GST-004Import berisi satu baris invalidSeluruh transaksi dibatalkan dan nomor baris bermasalah ditampilkanP1
QA-GST-005Import file salah, lebih dari 10 MB, atau lebih dari 10.000 barisFile ditolak tanpa partial importP1
QA-GST-006Hapus guest dari /dashboard/guests lalu konfirmasiGuest terhapus dari event aktif, daftar diperbarui, dan dialog mencegah penghapusan tidak sengajaP0
QA-GST-007Batalkan dialog hapus guestTidak ada perubahan dataP1
QA-GST-008Hapus guest yang memiliki relasi operasionalSistem mengikuti aturan backend: ditolak secara aman atau relasi ditangani tanpa orphan/corrupt dataP1
QA-GST-009Buka WhatsApp click-to-chatURL, nomor, encoding, dan variabel template sesuai guest; status opened tercatatP1
QA-GST-010Lihat, copy, dan download QR guestKode/PNG mewakili invitation_code yang sama dengan check-inP1
QA-GST-011Buat tamu dengan kategori Keluarga/Teman/custom dan level Regular/VIP/VVIP/VVVIPKategori relasi dan level tersimpan sebagai field terpisah serta tampil pada kolom yang benarP1
QA-GST-012Filter tabel berdasarkan kategori dan levelHanya kombinasi guest yang sesuai ditampilkan; pencarian tetap dapat digabungkan dengan filterP1
QA-GST-013Edit nama, kontak, kategori, level, meja, sesi, dan kuantitas guestPerubahan tervalidasi, tampil setelah reload, dan tidak mengubah invitation code maupun riwayat operasionalP0

E. Wedding Website dan invitation editorโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-EDT-001Buka /dashboard/editor/:slugEditor memuat ID, slug, blok, pengaturan, dan status halaman yang benarP0
QA-EDT-002Klik Simpan & Publish pada draftSatu operasi menyimpan perubahan dan mengubah status menjadi publishedP0
QA-EDT-003Klik tombol simpan berulang dengan cepatHanya satu proses aktif; tidak ada data lama yang menimpa data baruP0
QA-EDT-004Klik Lihat LivePerubahan disimpan/publish lalu tab baru membuka /{slug} pada origin yang benarP0
QA-EDT-005Preview halaman weddingURL tidak mengandung /dashboard/editor/undefined/ dan tidak menggunakan ID/slug kosongP0
QA-EDT-006Save gagal karena API/networkToast error tampil, preview tidak menuju halaman palsu, dan perubahan tetap ditandai belum tersimpanP1
QA-EDT-007Save berhasil tetapi thumbnail gagalKonten utama tetap tersimpan; kegagalan thumbnail tidak menggagalkan publishP1
QA-EDT-008Toggle header dan Powered by Linkzy.idPreview editor dan halaman publik mengikuti pengaturan setelah save/reloadP1
QA-EDT-009Pilih bahasa Indonesia/EnglishSeluruh copy RSVP dan copy halaman yang didukung berubah konsisten setelah save/reloadP1
QA-EDT-010Tambah, urutkan, edit, undo/redo, dan hapus blokState kanvas, panel aktif, serta hasil publik konsistenP1
QA-EDT-011Upload background, musik, dan gambar validMedia tersimpan, dapat dimuat dari storage, dan tampil setelah reloadP1
QA-EDT-012Upload file tidak didukung atau melebihi batasUpload ditolak dengan pesan yang jelas dan tanpa file orphanP1
QA-EDT-013Layout editor pada halaman targetPadding dashboard yang tidak diperlukan tidak muncul khusus pada editorP2

F. Custom HTML securityโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-HTML-001Masukkan <script>alert(1)</script>Script dibuang dan tidak pernah dieksekusi di editor maupun halaman publikP0
QA-HTML-002Masukkan event handler seperti onerror, onclick, atau onloadSemua event handler dihapusP0
QA-HTML-003Masukkan javascript:, data:text/html, iframe, object, embed, form, atau meta refreshPayload berbahaya diblokir/dibersihkanP0
QA-HTML-004Kirim payload berbahaya langsung ke API tanpa melalui frontendSanitasi backend tetap melindungi data tersimpan dan respons publikP0
QA-HTML-005Masukkan HTML aman yang didukungStruktur dan teks aman tetap dirender sesuai allowlistP1
QA-HTML-006Uji payload encoded, nested, mixed-case, dan malformedSanitizer tidak dapat dilewati dan aplikasi tidak crashP0
QA-HTML-007Buka ulang konten lama yang sebelumnya berbahayaKonten tidak mengeksekusi script saat render atau editP0

G. Dekorasi weddingโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-DEC-001Tambah blok Dekorasi WeddingPlaceholder tampil dan blok dapat dipilih/dihapusP1
QA-DEC-002Upload PNG/JPEG/WebP dekorasiGambar tampil di editor dan halaman publik setelah save/reloadP1
QA-DEC-003Atur width, top/right/bottom/leftPosisi dan ukuran mengikuti nilai px, %, atau vw yang validP1
QA-DEC-004Pilih absolute dan fixedAbsolute mengikuti container halaman; fixed mengikuti viewportP1
QA-DEC-005Atur rotation, opacity, dan z-indexDekorasi dirender sesuai nilai tanpa menghalangi interaksi halamanP1
QA-DEC-006Pilih fade, slide, zoom, atau floatingAnimasi berjalan sesuai pilihan dan durasiP2
QA-DEC-007Aktifkan scroll triggerAnimasi mulai ketika dekorasi masuk viewport dan tidak menghasilkan layout shift besarP1
QA-DEC-008Pilih Tanpa animasiDekorasi langsung terlihat tanpa transisi tersembunyiP1
QA-DEC-009Hapus dekorasiBlok dan media storage terkait dibersihkan sesuai aturan deleteP2
QA-DEC-010Uji dekorasi pada mobile dan desktopDekorasi tidak menutup form/tombol penting dan tetap tidak menangkap pointer eventP1

H. RSVP dan reception check-inโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-RSVP-001Submit RSVP hadir dengan field validRSVP tersimpan pada event/tenant yang benar dan konfirmasi tampilP0
QA-RSVP-002Submit RSVP tidak hadirStatus, jumlah hadir, dan pesan tersimpan sesuai aturanP1
QA-RSVP-003Submit tanpa nama atau attendanceValidasi tampil dan API tidak membuat record invalidP1
QA-RSVP-004Submit ke slug/event tidak valid atau tidak terhubungAPI memberi respons aman 4xx, bukan panic/500P0
QA-RSVP-005Poll latest check-in ketika tidak ada record baruEndpoint mengembalikan 204 tanpa panic; logging record not found tidak dianggap server errorP0
QA-RSVP-006Scan QR valid melalui scanner dan kameraKeduanya menemukan Event Guest yang samaP0
QA-RSVP-007Scan QR yang sama dua kali pada event yang samaHanya check-in pertama diterima; percobaan berikutnya menampilkan informasi duplikatP0
QA-RSVP-008Dua device check-in guest yang sama secara bersamaanServer menerima satu transaksi saja dan data tetap konsistenP0
QA-RSVP-009QR dari event atau tenant lainCheck-in ditolak tanpa membocorkan detail guest lainP0
QA-RSVP-010Mode offline: download, check-in, reconnect, syncOperasi tersinkron tanpa duplikasi diam-diam dan konflik dapat ditanganiP0
QA-RSVP-011Walk-in dan koreksi check-inData tersimpan; koreksi memerlukan alasan dan tercatat pada auditP1

I. LED Welcome Displayโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-LED-001Buka editor LED untuk event aktifSettings event yang benar dimuat tanpa bercampur dengan event lainP1
QA-LED-002Edit judul, subtitle, greeting, font, warna, background, dan durasiPreview berubah dan nilai bertahan setelah save/reloadP1
QA-LED-003Pilih tema LEDSeluruh token tampilan tema diterapkan dan masih dapat dikustomisasiP1
QA-LED-004Tambah/simpan tema custom sesuai fitur yang tersediaTema dapat digunakan kembali tanpa mengubah tenant lainP1
QA-LED-005Successful check-in diterima displayNama/greeting guest tampil, efek berjalan, lalu kembali ke idle stateP0
QA-LED-006Pilih audience VIP/VVIP/VVVIP dan lakukan check-in setiap levelHanya level yang aktif tampil; Regular dan level yang dinonaktifkan tidak mengganggu displayP0
QA-LED-007Media guest atau background tidak tersediaSafe fallback tampil tanpa broken screenP1
QA-LED-008Reduced-motion atau sound dimatikanAnimasi/suara mengikuti preferensi dan tidak aktif kembali sendiriP1
QA-LED-009Display kehilangan koneksi lalu reconnectUI tetap stabil dan event baru kembali diterima tanpa replay gandaP1
QA-LED-010Atur label, teks, dan pesan berbeda untuk VIP/VVIP/VVVIPKonten yang benar dipilih berdasarkan level guest dan bertahan setelah save/reloadP1
QA-LED-011Preview setiap level dari editorPreview menggunakan konten level terpilih tanpa membuat record check-inP1
QA-LED-012VIP check-in diikuti Regular sebelum polling berikutnyaVIP tetap ditampilkan; check-in Regular tidak menutupi event prioritasP0

J. Souvenir, reports, dan exportโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-OPS-001Buat item dan adjustment stok dengan alasanStok serta riwayat berubah secara atomikP1
QA-OPS-002Pickup voucher valid selama stok tersediaPickup sukses dan stok berkurang sekali tanpa pembatas allowance per tamuP0
QA-OPS-003Pickup melebihi stok atau item nonaktifTransaksi ditolak tanpa perubahan parsialP0
QA-OPS-004Request pickup dengan client_operation_id yang sama dikirim ulangHanya satu pickup tercatatP0
QA-OPS-005Reversal pickupReversal hanya sekali, membutuhkan alasan, dan mengembalikan stokP1
QA-OPS-006Buka report tanpa filter dan dengan rentang tanggal inklusifKPI serta grafik berasal dari data event dan periode yang benarP1
QA-OPS-007Bandingkan report dengan data guest/check-in/souvenirAngka summary dan breakdown konsistenP1
QA-OPS-008Export CSVFile berisi UTF-8 BOM, dapat dibuka di Excel, dan sama dengan filter aktifP1
QA-OPS-009Minta report event tenant lainAkses ditolak tanpa data bocorP0

K. WhatsApp Cloud APIโ€‹

IDRequirement / skenarioHasil yang diharapkanPrioritas
QA-WA-001Simpan WABA ID, Phone Number ID, dan token validMeta berhasil diverifikasi dan token tidak pernah dikembalikan ke browserP0
QA-WA-002Token atau Phone Number ID invalidKoneksi ditolak dengan error aman; secret tidak tampil pada log/UIP0
QA-WA-003Sinkronisasi templateHanya template milik organisasi terkait yang tersimpan dan approved template dapat dipilihP1
QA-WA-004Kirim test template validProvider message ID tersimpan dan status awal benarP1
QA-WA-005Webhook verify token salahRequest ditolak 403P0
QA-WA-006Webhook signature salahRequest ditolak 401 tanpa mengubah status messageP0
QA-WA-007Webhook signed valid untuk sent/delivered/read/failedStatus diperbarui idempotently sesuai message IDP1
QA-WA-008Organisasi A meminta koneksi/template/history organisasi BAkses ditolak dan secret/data tidak bocorP0

7. Non-functional requirementsโ€‹

Securityโ€‹

  • Seluruh route private dan API diuji tanpa token, dengan token expired, role salah, tenant salah, serta object ID hasil manipulasi.
  • Password, token Meta, encryption key, payment secret, dan data sensitif tidak boleh muncul pada respons API, HTML, browser storage yang tidak semestinya, screenshot, atau application log.
  • File upload harus memvalidasi MIME type, ekstensi, ukuran, nama file, dan hasil decode gambar di backend.
  • Input diuji terhadap XSS, SQL injection, path traversal, mass assignment, oversized payload, dan malformed JSON.
  • Endpoint mutation yang dapat dikirim ulang harus mempunyai proteksi transaksi/idempotensi sesuai risikonya.
  • Rate limiting/brute-force protection diuji pada login dan public submission apabila telah dikonfigurasi.

Performance dan reliabilityโ€‹

IDRequirementHasil yang diharapkan
QA-NFR-001Save editor pada koneksi normalRespons penyimpanan utama tidak menunggu proses thumbnail selesai
QA-NFR-002Guest list/import hingga batas yang didukungUI tetap usable dan API selesai tanpa memory spike/error
QA-NFR-003Poll latest check-in tanpa data selama 15 menitTidak ada panic, memory leak, atau lonjakan error log
QA-NFR-004Dua operator melakukan mutation stok/check-in bersamaanKonsistensi database terjaga
QA-NFR-005Provider/storage/network timeoutUI berhenti loading, memberi feedback, dan aman untuk retry

Browser, device, dan responsiveโ€‹

Minimum regression matrix:

  • Chrome desktop versi stabil terbaru;
  • Firefox desktop versi stabil terbaru;
  • Safari desktop versi stabil terbaru;
  • Edge desktop versi stabil terbaru;
  • Safari iOS versi mayor terbaru;
  • Chrome Android versi stabil terbaru;
  • viewport mobile 375 px, tablet 768 px, dan desktop 1440 px.

Alur P0 harus diuji pada Chrome desktop dan satu perangkat mobile. Editor dan LED Display minimal diuji pada Chrome desktop; halaman publik/RSVP wajib diuji pada desktop dan mobile.

Accessibility baselineโ€‹

  • Seluruh form memiliki label dan error yang dapat dipahami.
  • Aksi utama dapat digunakan dengan keyboard dan fokus terlihat.
  • Dialog mempertahankan focus trap dan dapat ditutup dengan benar.
  • Tombol ikon mempunyai accessible name.
  • Kontras teks/tombol utama memenuhi WCAG AA sejauh theme mengizinkan.
  • Reduced-motion dihormati terutama pada invitation dan LED display.

8. Regression suite wajibโ€‹

Jalankan pada setiap release candidate:

  1. Login admin dan user biasa.
  2. Validasi role dan cross-tenant access.
  3. Trial aktif, trial expired, subscription aktif, dan subscription expired.
  4. Pricing โ†’ checkout โ†’ payment sandbox โ†’ subscription aktif.
  5. Buat/edit/publish invitation dan buka halaman live.
  6. Klik save/live secara cepat untuk memverifikasi tidak ada race condition.
  7. Custom HTML XSS suite.
  8. Submit RSVP public.
  9. Tambah dan hapus guest.
  10. Check-in normal, duplicate, simultaneous, dan polling tanpa data.
  11. LED menerima check-in dan kembali ke idle state.
  12. Pickup souvenir dan idempotent retry.
  13. Buka report dan export CSV.
  14. WhatsApp connection/template/message smoke test pada sandbox.

9. Bukti pengujian dan defectโ€‹

Setiap hasil test minimal menyertakan:

  • requirement ID;
  • status PASS, FAIL, BLOCKED, atau NOT RUN;
  • build/commit dan environment;
  • persona serta data uji;
  • expected result dan actual result;
  • screenshot/video/log/network response bila relevan;
  • defect ID untuk hasil gagal.

Format judul defect:

[Severity] [Module] Ringkasan masalah

Isi defect harus mempunyai langkah reproduksi, expected result, actual result, frekuensi, environment, akun/persona, bukti, serta dugaan dampak tenant/data/payment bila ada.

10. Release sign-offโ€‹

Release dinyatakan siap jika QA mengisi ringkasan berikut:

ItemNilai
Build / commit
Environment
Total test
Passed / Failed / Blocked
P0 dan P1 pass rate
Open defects per severity
Known issues yang disetujui
QA sign-off
Product sign-off
Engineering sign-off