454 lines
10 KiB
Markdown
454 lines
10 KiB
Markdown
# Training System Test Flow
|
|
|
|
เอกสารนี้ใช้สำหรับทดสอบระบบตามโครงสร้างล่าสุดของโปรเจ็กต์:
|
|
|
|
- `Super Admin` จัดการ `Organizers`
|
|
- `Admin` จัดการ `Users`, `Courses`, `Training Records`, `Training Matrix`, `Reports`
|
|
- `User` เห็นเฉพาะ `Dashboard`, `Training Records`, `Reports`
|
|
- ใช้ `users` เป็น person entity เดียวของระบบแล้ว ไม่ใช้ `employees` เป็น runtime module
|
|
|
|
## 1. Scope
|
|
|
|
ครอบคลุม flow หลักดังนี้:
|
|
|
|
- Authentication และ organizer access
|
|
- Organizer management
|
|
- User management
|
|
- Course management
|
|
- Training record CRUD
|
|
- Certificate upload
|
|
- Approval workflow
|
|
- Training matrix
|
|
- Dashboard
|
|
- Reports และ CSV export
|
|
- RBAC และ data scoping
|
|
|
|
## 2. Test Prerequisites
|
|
|
|
ก่อนเริ่มทดสอบ ให้ตรวจสอบว่า:
|
|
|
|
- ตั้งค่า `.env.local` แล้ว
|
|
- PostgreSQL ทำงานได้
|
|
- migrations ถูก apply แล้ว
|
|
- dev server รันได้ด้วย `npm run dev`
|
|
- มีข้อมูล master ของ `departments` และ `positions`
|
|
|
|
บัญชีทดสอบที่แนะนำ:
|
|
|
|
- `super_admin` 1 คน
|
|
- `admin` 1 คน
|
|
- `user` 1 คน
|
|
|
|
ข้อมูลทดสอบขั้นต่ำ:
|
|
|
|
- 1 organizer
|
|
- 2 departments
|
|
- 2 positions
|
|
- 3 users
|
|
- 3 courses
|
|
|
|
## 3. Recommended Test Order
|
|
|
|
1. Auth and access
|
|
2. Organizer management
|
|
3. User management
|
|
4. Courses
|
|
5. Training records
|
|
6. Certificates
|
|
7. Approval workflow
|
|
8. Training matrix
|
|
9. Dashboard
|
|
10. Reports
|
|
11. RBAC regression
|
|
|
|
## 4. Auth And Access
|
|
|
|
### 4.1 Sign In
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/auth/sign-in`
|
|
- login ด้วย `super_admin`
|
|
- login ด้วย `admin`
|
|
- login ด้วย `user`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- `super_admin` เข้า organizer flow ได้
|
|
- `admin` เข้า `/dashboard/overview` ได้
|
|
- `user` เข้า `/dashboard/overview` ได้
|
|
|
|
### 4.2 Sign Up Disabled
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/auth/sign-up`
|
|
- เรียก `POST /api/auth/register`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ผู้ใช้สมัครเองไม่ได้
|
|
- ระบบแจ้งชัดว่าต้องให้ admin สร้างบัญชีให้
|
|
|
|
### 4.3 Protected Routes
|
|
|
|
ทดสอบ:
|
|
|
|
- logout
|
|
- เปิด `/dashboard/overview`
|
|
- เรียก `/api/users`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- หน้า dashboard redirect ไป sign-in
|
|
- protected API ตอบ `401`
|
|
|
|
## 5. Organizer Flow
|
|
|
|
ใช้ `super_admin`
|
|
|
|
### 5.1 Organizer List
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/organizers`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็นรายการ organizer ทั้งหมด
|
|
|
|
### 5.2 Create Organizer
|
|
|
|
ทดสอบ:
|
|
|
|
- สร้าง organizer ใหม่
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- สร้าง organizer สำเร็จ
|
|
- master data ของ organizer ใหม่ถูก seed ให้
|
|
|
|
## 6. User Flow
|
|
|
|
ใช้ `admin` หรือ `super_admin`
|
|
|
|
### 6.1 User List
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/users`
|
|
- search
|
|
- filter status
|
|
- sort
|
|
- pagination
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ตารางโหลดข้อมูลได้
|
|
- filter และ sort ทำงานถูกต้อง
|
|
|
|
### 6.2 Create User
|
|
|
|
ทดสอบ:
|
|
|
|
- กดเพิ่ม user
|
|
- กรอก `full name`, `email`, `phone`, `employee code`
|
|
- เลือก `department` จาก dropdown
|
|
- เลือก `position` จาก dropdown
|
|
- ระบุ `hired date`
|
|
- สำหรับ `super_admin` ให้เลือก organizer ได้
|
|
- สำหรับ `admin` organizer ต้อง default จาก active organizer
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- สร้าง user สำเร็จ
|
|
- user ใหม่มี membership ใน organizer ที่เลือก
|
|
|
|
### 6.3 Edit User
|
|
|
|
ทดสอบ:
|
|
|
|
- แก้ไข department, position, role, status
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ข้อมูลอัปเดตสำเร็จ
|
|
|
|
## 7. Sidebar Visibility
|
|
|
|
### 7.1 Super Admin
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็น `Dashboard`, `Organizers`, `Users`, `Courses`, `Training Records`, `Training Matrix`, `Reports`
|
|
|
|
### 7.2 Admin
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็น `Dashboard`, `Users`, `Courses`, `Training Records`, `Training Matrix`, `Reports`
|
|
- ไม่เห็น `Organizers`
|
|
|
|
### 7.3 User
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็นเฉพาะ `Dashboard`, `Training Records`, `Reports`
|
|
|
|
## 8. Course Flow
|
|
|
|
ใช้ `admin`
|
|
|
|
### 8.1 Course List And Filters
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/courses`
|
|
- search
|
|
- filter category
|
|
- filter status
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ตารางแสดงผลถูกต้อง
|
|
|
|
### 8.2 Create And Edit Course
|
|
|
|
ทดสอบ:
|
|
|
|
- สร้าง course ใหม่
|
|
- แก้ไขข้อมูล course
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- create/update สำเร็จ
|
|
|
|
## 9. Training Record Flow
|
|
|
|
### 9.1 Admin Creates Training Record
|
|
|
|
ใช้ `admin`
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/training-records`
|
|
- สร้าง record ใหม่
|
|
- เลือก `user`
|
|
- เลือก `course`
|
|
- กรอก date, type, hours, organizer, note
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- สร้าง record สำเร็จ
|
|
- status เริ่มที่ `pending`
|
|
|
|
### 9.2 User Creates Own Training Record
|
|
|
|
ใช้ `user`
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/training-records`
|
|
- สร้าง record ใหม่
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- dropdown `user` ต้องมองเห็นได้เฉพาะตัวเอง
|
|
- สร้าง record ของคนอื่นไม่ได้
|
|
|
|
### 9.3 List And Edit
|
|
|
|
ทดสอบ:
|
|
|
|
- list records
|
|
- filter by status
|
|
- filter by type
|
|
- เปิดหน้า detail/edit
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- `admin` เห็นทุก record ใน organizer
|
|
- `user` เห็นเฉพาะ record ของตัวเอง
|
|
|
|
## 10. Certificate Flow
|
|
|
|
### 10.1 Upload Certificate
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิดหน้า edit training record
|
|
- อัปโหลด `pdf`, `jpg`, `jpeg`, `png`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- upload สำเร็จ
|
|
- metadata ถูกบันทึก
|
|
|
|
### 10.2 View And Delete
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิดดูไฟล์ย้อนหลัง
|
|
- ลบ certificate
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เปิดไฟล์ได้
|
|
- ลบแล้วรายการหาย
|
|
|
|
## 11. Approval Workflow
|
|
|
|
### 11.1 Admin Review
|
|
|
|
ใช้ `admin`
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/training-records?status=pending`
|
|
- `Approve`
|
|
- `Reject`
|
|
- `Request Changes`
|
|
- ใส่ reviewer note
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เปลี่ยน status ได้
|
|
- reviewer note ถูกบันทึก
|
|
|
|
### 11.2 User Restrictions
|
|
|
|
ใช้ `user`
|
|
|
|
ทดสอบ:
|
|
|
|
- พยายาม review record
|
|
- พยายามแก้ approved record
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- review ไม่ได้
|
|
- approved record แก้ไม่ได้ตาม policy
|
|
|
|
## 12. Training Matrix
|
|
|
|
ใช้ `admin`
|
|
|
|
### 12.1 Create Rules
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/training-matrix`
|
|
- เพิ่ม rule แบบ department -> course
|
|
- เพิ่ม rule แบบ position -> course
|
|
- กำหนด renewal period
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- สร้าง rules สำเร็จ
|
|
|
|
### 12.2 Compliance
|
|
|
|
ทดสอบ:
|
|
|
|
- user ที่มี approved records ครบ
|
|
- user ที่ยังขาด course
|
|
- user ที่มี course หมดอายุ
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- compliance คำนวณถูกต้อง
|
|
- missing courses แสดงถูกต้อง
|
|
|
|
## 13. Dashboard
|
|
|
|
### 13.1 Admin Dashboard
|
|
|
|
ใช้ `admin`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็นภาพรวมระดับ organizer
|
|
- summary cards, charts, recent activity ใช้ข้อมูลจริง
|
|
|
|
### 13.2 User Dashboard
|
|
|
|
ใช้ `user`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็นเฉพาะข้อมูลของตัวเอง
|
|
- ไม่เห็น organizer-wide management views
|
|
|
|
## 14. Reports
|
|
|
|
### 14.1 Admin Reports
|
|
|
|
ใช้ `admin`
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/reports`
|
|
- filter ตาม user
|
|
- filter ตาม department
|
|
- filter ตาม expiring days
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ตารางรายงานอัปเดตตาม filter
|
|
- export CSV ได้
|
|
|
|
### 14.2 User Reports
|
|
|
|
ใช้ `user`
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/reports`
|
|
- ทดลองแก้ query string เอง
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- เห็นเฉพาะข้อมูลของตัวเอง
|
|
- server บังคับ self-scope แม้ปรับ URL เอง
|
|
- export CSV ได้เฉพาะข้อมูลของตัวเอง
|
|
|
|
## 15. RBAC Regression
|
|
|
|
### 15.1 Cross-Organizer Isolation
|
|
|
|
ทดสอบ:
|
|
|
|
- login ด้วย user ของ organizer A
|
|
- พยายามเปิดข้อมูลของ organizer B
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- มองไม่เห็นข้อมูลข้าม organizer
|
|
|
|
### 15.2 Legacy Employee Routes
|
|
|
|
ทดสอบ:
|
|
|
|
- เปิด `/dashboard/employees`
|
|
- เปิด `/dashboard/employees/new`
|
|
|
|
ผลที่คาดหวัง:
|
|
|
|
- ระบบพาไปหน้า `/dashboard/users`
|
|
|
|
## 16. Final Regression Checklist
|
|
|
|
- sign-in / sign-out ทำงาน
|
|
- sign-up ถูกปิด
|
|
- sidebar แยกตาม role ถูกต้อง
|
|
- organizer flow ใช้งานได้
|
|
- users ใช้งานได้
|
|
- courses ใช้งานได้
|
|
- training-records ใช้งานได้
|
|
- certificate upload ใช้งานได้
|
|
- approval workflow ใช้งานได้
|
|
- training matrix ใช้งานได้
|
|
- dashboard ใช้งานได้
|
|
- reports และ CSV export ใช้งานได้
|
|
- `npm run build` ผ่าน
|