# 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` ผ่าน