Skip to content

Feat: smoketest profile kependudukan#1059

Open
pandigresik wants to merge 46 commits into
rilis-devfrom
feat/smoketest-kependudukan
Open

Feat: smoketest profile kependudukan#1059
pandigresik wants to merge 46 commits into
rilis-devfrom
feat/smoketest-kependudukan

Conversation

@pandigresik

Copy link
Copy Markdown
Contributor

Pull Request: Smoke Test Kependudukan - Penduduk, Pendidikan, Kesehatan, Ketenagakerjaan, Penerima Bantuan, Kelembagaan

Deskripsi

Menambahkan smoke test menggunakan Pest Browser (Playwright) untuk memastikan fungsionalitas inti halaman kependudukan berjalan dengan benar. Test mencakup 6 submenu: Penduduk, Pendidikan, Kesehatan, Ketenagakerjaan, Penerima Bantuan, dan Kelembagaan. Setiap test memverifikasi halaman terbuka, tombol aksi tampil, DataTable render dengan data, dan tidak ada JavaScript error.

Perubahan yang dilakukan:

  1. Smoke Test Files (6 file baru): Membuat test Pest Browser untuk 6 halaman kependudukan dengan total ~40 test cases menggunakan data-testid selector.
  2. MSW Fixture Files (8 file baru): Menambahkan JSON fixture untuk mock API response: penduduk, pendidikan, kesehatan, ketenagakerjaan, bantuan (3 file), dan lembaga.
  3. MSW Route Registration: Update MswSetup.php untuk mendaftarkan 8 route baru ke fixture files.
  4. Blade Template Updates (6 file): Menambahkan atribut data-testid pada tombol filter, cetak, excel, dan elemen DataTable di semua halaman target.
  5. Component Updates (2 file): Menambahkan prop testId pada komponen print-button dan excel-download-button untuk mendukung data-testid.
  6. LoginListener Fix: Skip external API calls ke databaseGabunganUrl saat environment testing untuk mencegah test hang/timeout.
  7. LoginController Refactor: Refactor password validation rule menjadi variabel terpisah untuk readability.

Alasan perubahan:

  • Kebutuhan Issue Buatkan Smoke test untuk menu profil kependudukan #1057: Issue meminta smoke test untuk memastikan fungsionalitas inti submenu kependudukan berjalan.
  • Stabilitas CI/CD: Dengan smoke test yang terotomasi, regresi pada halaman kritis dapat terdeteksi lebih awal.
  • Best Practice Testing: Menggunakan data-testid sebagai selector lebih stabil daripada CSS selector atau text-based selector yang mudah berubah.
  • Testing Environment Fix: LoginListener melakukan HTTP call eksternal yang menyebabkan test hang. Ditambahkan guard !app()->environment('testing').

Dampak perubahan:

Smoke Test Coverage: 6 halaman kependudukan terotomasi dengan ~40 test cases
MSW Mocking: API response ter-mock dengan fixture JSON, test tidak bergantung pada data production
Stable Selectors: Semua selector menggunakan data-testid yang tidak berubah saat UI diubah
CI/CD Stability: LoginListener tidak melakukan HTTP call eksternal saat testing
No Breaking Changes: Perubahan blade hanya menambah atribut, tidak mengubah fungsi yang ada

Masalah Terkait (Related Issue)

  • Solusi untuk issue #1057

Daftar Periksa (Checklist)

Submenu Penduduk

  • Halaman terbuka
  • Tombol Filter tampil (data-testid="bt-toggle-filter")
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-penduduk")
  • Minimal 1 baris data tampil
  • Tombol "Pilih Aksi" tampil (dropdown per baris)

Submenu Pendidikan

  • Halaman terbuka
  • Statistik Partisipasi Sekolah tampil (donutChart)
  • Statistik Ijazah Tertinggi tampil (barChart)
  • Seluruh chart berhasil dirender
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-pendidikan")
  • Minimal 1 baris data tampil

Submenu Kesehatan

  • Halaman terbuka
  • Statistik Golongan Darah tampil (donutChart)
  • Statistik Status Gizi Balita tampil (barChart)
  • Seluruh chart berhasil dirender
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-kesehatan")
  • Minimal 1 baris data tampil

Submenu Ketenagakerjaan

  • Halaman terbuka
  • Statistik Jumlah Penghasilan tampil (barChart)
  • Statistik Pelatihan tampil (donutChart)
  • Seluruh chart berhasil dirender
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-ketenagakerjaan")
  • Minimal 1 baris data tampil

Submenu Penerima Bantuan

  • Halaman terbuka
  • Tombol Filter tampil (data-testid="bt-toggle-filter")
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-bantuan")
  • Minimal 1 baris data tampil

Submenu Kelembagaan

  • Halaman terbuka
  • Tombol Filter tampil (data-testid="bt-toggle-filter")
  • Tombol Cetak tampil (data-testid="bt-cetak")
  • Tombol Excel tampil (data-testid="bt-excel")
  • DataTable tampil (data-testid="datatable-lembaga")
  • Minimal 1 baris data tampil

General Checklist

  • Saya telah mematuhi aturan penulisan script
  • Saya telah mengikuti proses review pull request
  • Smoke test berhasil dijalankan
  • Tidak ada console error atau warning
  • Code sudah di-review oleh minimal 1 orang

Teknis Detail

Penjelasan Teknis

Arsitektur Test

Pest PHP (tests/Browser/*.php)
    │
    ▼
pest-plugin-browser (Playwright backend)
    │
    ▼
Playwright Server (WebSocket)
    │
    ▼
Chromium Browser + MSW Service Worker
    │  (intercepts fetch/XHR requests)
    ▼
Laravel HTTP Server (amphp)
    │
    ▼
Aplikasi Laravel

MSW Mocking Strategy

Setiap halaman memiliki fixture JSON yang di-mock oleh MSW:

  • Penduduk: penduduk-data.json - Data penduduk dengan atribut lengkap (NIK, nama, alamat, dll)
  • Pendidikan: pendidikan.json - Data pendidikan dengan partisipasi sekolah dan ijazah
  • Kesehatan: kesehatan.json - Data kesehatan dengan golongan darah dan status gizi
  • Ketenagakerjaan: ketenagakerjaan.json - Data pekerjaan dan pelatihan
  • Bantuan: bantuan.json, bantuan-sasaran.json, bantuan-tahun.json - Data program bantuan
  • Kelembagaan: lembaga.json - Data lembaga desa

data-testid Selector Strategy

Menggunakan data-testid sebagai selector utama karena:

  1. Stable: Tidak berubah saat text/label UI diubah
  2. Explicit: Kontrak antara developer dan tester
  3. Recommended: Best practice dari Playwright documentation

LoginListener Testing Guard

if (!app()->environment('testing')) {
    // Skip external API calls during testing
    // Prevents test hang/timeout
}

File yang berubah

File Tipe Deskripsi
tests/Browser/SmokePendudukTest.php BARU Smoke test halaman penduduk (7 tests)
tests/Browser/SmokePendidikanTest.php BARU Smoke test halaman pendidikan (8 tests)
tests/Browser/SmokeKesehatanTest.php BARU Smoke test halaman kesehatan (8 tests)
tests/Browser/SmokeKetenagakerjaanTest.php BARU Smoke test halaman ketenagakerjaan (8 tests)
tests/Browser/SmokePenerimaBantuanTest.php BARU Smoke test halaman bantuan (6 tests)
tests/Browser/SmokeKelembagaanTest.php BARU Smoke test halaman lembaga (6 tests)
tests/Browser/fixtures/penduduk-data.json BARU Fixture data penduduk
tests/Browser/fixtures/pendidikan.json BARU Fixture data pendidikan
tests/Browser/fixtures/kesehatan.json BARU Fixture data kesehatan
tests/Browser/fixtures/ketenagakerjaan.json BARU Fixture data ketenagakerjaan
tests/Browser/fixtures/bantuan.json BARU Fixture data bantuan
tests/Browser/fixtures/bantuan-sasaran.json BARU Fixture data sasaran bantuan
tests/Browser/fixtures/bantuan-tahun.json BARU Fixture data tahun bantuan
tests/Browser/fixtures/lembaga.json BARU Fixture data lembaga
tests/Browser/MswSetup.php UPDATE Tambah 8 route baru ke fixture
resources/views/penduduk/index.blade.php UPDATE Tambah data-testid pada filter, cetak, excel, datatable
resources/views/bantuan/index.blade.php UPDATE Tambah data-testid pada filter, cetak, excel, datatable
resources/views/data_pokok/pendidikan/index.blade.php UPDATE Tambah data-testid pada cetak, excel, datatable
resources/views/data_pokok/kesehatan/index.blade.php UPDATE Tambah data-testid pada cetak, excel, datatable
resources/views/data_pokok/ketenagakerjaan/index.blade.php UPDATE Tambah data-testid pada cetak, excel, datatable
resources/views/lembaga/index.blade.php UPDATE Tambah data-testid pada filter, cetak, excel, datatable
resources/views/components/print-button.blade.php UPDATE Tambah prop testId untuk data-testid
resources/views/components/excel-download-button.blade.php UPDATE Tambah prop testId untuk data-testid
app/Listeners/LoginListener.php UPDATE Skip API call saat testing
app/Http/Controllers/Auth/LoginController.php UPDATE Refactor password validation
tests/Pest.php UPDATE Cleanup import

Testing

Manual Testing

# Jalankan semua smoke test kependudukan
php artisan pest --filter="Smoke(Penduduk|Pendidikan|Kesehatan|Ketenagakerjaan|PenerimaBantuan|Kelembagaan)Test"

# Jalankan dengan browser visible (headed mode)
php artisan pest --filter="SmokePendudukTest" --headed

# Jalankan test spesifik
php artisan pest --filter="opens the penduduk page" --headed

Automated Testing

  • SmokePendudukTest: 7 tests (page, filter, cetak, excel, datatable, action button, no errors)
  • SmokePendidikanTest: 8 tests (page, donut chart, bar chart, charts render, cetak, excel, datatable, no errors)
  • SmokeKesehatanTest: 8 tests (page, donut chart, bar chart, charts render, cetak, excel, datatable, no errors)
  • SmokeKetenagakerjaanTest: 8 tests (page, bar chart, donut chart, charts render, cetak, excel, datatable, no errors)
  • SmokePenerimaBantuanTest: 6 tests (page, filter, cetak, excel, datatable, no errors)
  • SmokeKelembagaanTest: 6 tests (page, filter, cetak, excel, datatable, no errors)

Breaking Changes

Tidak ada breaking changes. Perubahan blade hanya menambah atribut data-testid tanpa mengubah fungsi yang ada.

References


Catatan tambahan:

  • Test menggunakan MSW (Mock Service Worker) untuk mock API response, sehingga tidak bergantung pada data production.
  • Screenshot hanya disimpan saat SCREENSHOT_ON_SUCCESS=true di .env.testing.
  • Untuk menjalankan test di CI/CD, pastikan Playwright dependencies sudah terinstall (lihat .github/workflows/test.yml).

Screenshots

image

- Upgrade composer deps melalui 3 fase (L10→L11→L12→L13)
- Bump 12 package ke major version baru (slug, datatables, CSP, image, dll)
- Migrasi Intervention Image v2→v3 (Image::make → read, resize → scale)
- Migrasi Spatie CSP v2→v3 (Policy → Preset, addDirective → add, config format)
- Tambah helper csp_nonce() (dihilangkan di CSP v3)
- Tambah CspExclusion middleware untuk route exclusion
- Publikasikan ulang config/image.php, config/jsvalidation.php
- Update CustomCSPPolicy → CustomCspPreset implement Preset interface
- Update CSP test untuk v3 API
- Catat temuan post-upgrade di UPGRADE_LARAVEL_13_PLAN.md
@pandigresik pandigresik requested a review from affandii06 June 12, 2026 09:37
@github-actions

Copy link
Copy Markdown

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1059

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant