# Smoke / UAT Runbook

Runbook นี้ใช้สำหรับตรวจ flow หลักของระบบ CCW ก่อนปล่อยงาน หรือหลัง merge งานใหญ่

ดูเพิ่ม: [CI / Pipeline Gate](./ci-pipeline-gate.md)
ดูเพิ่มสำหรับงานเชิงหน้าจอ: [Browser Spot Check](./browser-spot-check.md)

## Recommended Gate

รัน pre-release gate ก่อน:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\pre_release_gate.ps1
```

หรือถ้าต้องการรันเฉพาะ smoke suite:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke_system_suite.ps1
```

ชุด smoke หลักจะรันต่อกันดังนี้:

- `order-flow`
- `customer-search`
- `booking-deposit`
- `quick-service`
- `branch-scope`
- `admin-support`

ผลท้ายรันต้องขึ้น `passed` ครบทุกก้อน

## Post-Deploy Spot Check

หลัง deploy แล้ว แนะนำให้รัน:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\post_deploy_spot_check.ps1
```

สคริปต์นี้เป็น read-only spot check โดยจะ:

- เช็ก `manifest.webmanifest`, `offline.html`, `service-worker.js`
- ล็อกอิน admin
- เปิดหน้า `dashboard`, `booking`, `queue`, `quick_service`, `manage_system`, `member`, `sale_report`
- ถ้ามีคิวในระบบ จะ probe `job_details` เพิ่ม 1 รายการ

ถ้ามี restricted credentials สำหรับ user จำกัดสาขา สามารถส่งเพิ่มได้:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\post_deploy_spot_check.ps1 `
  -RestrictedUsername "branch_probe" `
  -RestrictedPassword "branchprobe123" `
  -RestrictedAllowedBranches "สาขาศรีนครินทร์"
```

เมื่อส่งค่าชุดนี้ สคริปต์จะตรวจเพิ่มแบบ read-only:

- restricted branch options บนหน้า booking
- จำนวน order ที่ admin เห็น เทียบกับ restricted user
- allowed job probe
- blocked job probe

## Automated Browser Spot Check

สำหรับ regression เชิงหน้าจอ ให้รันเพิ่ม:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\browser_critical_pages_spot_check.ps1
```

Coverage ของสคริปต์นี้:

- login page render
- browser login redirect
- dashboard shell + KPI grid
- queue hero + queue grid หรือ empty state
- job details summary 1 รายการแรก ถ้ามี queue item

ผลลัพธ์จะบอก path ของ screenshot artifact ให้ด้วย

หมายเหตุ: browser automation ตัวนี้เน้นตรวจ route, DOM, และ action จริงผ่าน Windows browser control ไม่ได้แทน manual visual QA แบบเต็มรูปแบบในกรณีที่ release แตะ CSS/layout หนัก

## Preconditions

- Web app ต้องเปิดใช้งานได้ที่ URL ที่ smoke ยิงถึงได้
- ต้องล็อกอินด้วย user ที่มีสิทธิ์ admin ได้
- ค่า default ปัจจุบันของ smoke scripts คือ `admin / admin123`
- ฐานข้อมูลต้องมีข้อมูลตั้งต้นเพียงพอสำหรับ service management และ queue

## Focused Suites

รันเฉพาะก้อนที่ต้องการได้:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke_order_flow.ps1
powershell -ExecutionPolicy Bypass -File scripts\smoke_customer_search.ps1
powershell -ExecutionPolicy Bypass -File scripts\smoke_booking_deposit_flow.ps1
powershell -ExecutionPolicy Bypass -File scripts\smoke_quick_service_suite.ps1
powershell -ExecutionPolicy Bypass -File scripts\smoke_branch_scope_flow.ps1
powershell -ExecutionPolicy Bypass -File scripts\smoke_admin_support_suite.ps1
```

`smoke_admin_support_suite.ps1` จะรัน:

- `member-employee`
- `service-management`

## Useful Flags

เก็บข้อมูลทดสอบไว้ไม่ cleanup:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke_system_suite.ps1 -KeepTestData
```

ปิด duplicate-submit check ใน order flow:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke_system_suite.ps1 -CheckDuplicateSubmit:$false
```

ส่งค่า URL หรือ credential เอง:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\smoke_system_suite.ps1 `
  -BaseUrl "http://127.0.0.1/CCW" `
  -Username "admin" `
  -Password "admin123"
```

## Coverage Map

`order-flow`

- login
- booking
- update job info
- update job services
- queue status
- payment
- cancel
- reopen
- duplicate submit guard

`customer-search`

- search customer
- package balance batch path

`booking-deposit`

- add/update/delete admin deposit
- add/delete branch deposit

`quick-service`

- guest flow
- matched customer flow
- transfer + slip upload
- delete quick service payment

`branch-scope`

- create temporary employee with assigned branch scope
- verify booking page only exposes allowed branch
- verify allowed booking succeeds
- verify forged booking to blocked branch is rejected
- verify allowed job is visible
- verify blocked branch job redirects away
- verify queue only shows allowed branch work
- deactivate temporary employee in cleanup

`admin-support`

- save member
- save employee
- save service category
- save service group

## Pass Criteria

- ทุก suite ต้องจบด้วย `passed`
- ต้องไม่มี uncaught exception หรือ PowerShell error
- flow ที่มี cleanup ต้อง cleanup สำเร็จ
- ถ้า suite ล้มหลังสร้างข้อมูลทดสอบ ต้องถือว่า gate ยังไม่ผ่านจนกว่าจะตรวจ cleanup เรียบร้อย

## Known Notes

- บางเคสของ `quick_receipt` ไม่มี flash หลัง redirect โดยตั้งใจให้ smoke ตรวจจาก `receipt URI`, `HTTP 200` และ marker ของหน้าแทน
- suite ฝั่ง service management จะสร้างแล้วลบ `service category` และ `service group` ทุกครั้ง
- suite `branch-scope` จะสร้าง employee จำกัดสาขาชั่วคราว สร้างบิล seed 2 สาขา แล้ว cleanup ตอนจบ
- ถ้าใช้ `-KeepTestData` จะมีข้อมูลทดสอบค้างในระบบ ควรใช้เฉพาะตอน debug

## Failure Handling

ถ้า `smoke_system_suite.ps1` ล้ม:

1. อ่านว่าล้มที่ก้อนไหนก่อน
2. รัน suite ย่อยของก้อนนั้นซ้ำ
3. ถ้ายังล้ม ให้รัน script ย่อยที่แคบลงอีกระดับ
4. ถ้ามีข้อมูลทดสอบค้าง ให้ cleanup ก่อน rerun

ตัวอย่าง:

- ล้มที่ `quick-service` ให้รัน `scripts\smoke_quick_service_suite.ps1`
- ล้มที่ `admin-support` ให้รัน `scripts\smoke_admin_support_suite.ps1`
- ล้มที่ `service-management` ให้รัน `scripts\smoke_service_management_flow.ps1`

## Release Recommendation

ก่อน release จริง แนะนำลำดับนี้:

1. รัน `scripts\pre_release_gate.ps1`
2. ถ้างานแตะ flow เฉพาะ ให้รัน focused suite ซ้ำ
3. หลัง deploy ให้รัน `scripts\post_deploy_spot_check.ps1`
4. ถ้ามี restricted probe account ให้รัน post-deploy แบบมี `RestrictedUsername/Password/AllowedBranches`
5. ถ้า smoke ผ่านครบ ค่อยทำ UAT แบบคลิกหน้าเว็บตาม [Browser Spot Check](./browser-spot-check.md) ในจุดที่เปลี่ยน UI มาก
