- POST /api/login: เข้าสู่ระบบและรับ JWT token
{
"username": "admin",
"password": "adminpassword"
}
GET /api/users: รับรายการผู้ใช้ทั้งหมดGET /api/users/:id: รับข้อมูลผู้ใช้ตาม IDPOST /api/users: สร้างผู้ใช้ใหม่PUT /api/users/:id: อัปเดตข้อมูลผู้ใช้DELETE /api/users/:id: ลบผู้ใช้POST /api/users/:id/roles: เพิ่มบทบาทให้กับผู้ใช้DELETE /api/users/:id/roles/:roleId: ลบบทบาทออกจากผู้ใช้
GET /api/roles: รับรายการบทบาททั้งหมดGET /api/roles/:id: รับข้อมูลบทบาทตาม IDPOST /api/roles: สร้างบทบาทใหม่PUT /api/roles/:id: อัปเดตข้อมูลบทบาทDELETE /api/roles/:id: ลบบทบาทPOST /api/roles/:id/permissions: เพิ่มสิทธิ์ให้กับบทบาทDELETE /api/roles/:id/permissions/:permissionId: ลบสิทธิ์ออกจากบทบาท
GET /api/permissions: รับรายการสิทธิ์ทั้งหมดGET /api/permissions/:id: รับข้อมูลสิทธิ์ตาม IDPOST /api/permissions: สร้างสิทธิ์ใหม่PUT /api/permissions/:id: อัปเดตข้อมูลสิทธิ์DELETE /api/permissions/:id: ลบสิทธิ์
- การเข้าสู่ระบบ (Login)
curl -X POST http://localhost:8080/api/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "adminpassword"}'
- การเรียกดูข้อมูลผู้ใช้ทั้งหมด (Get all users)
curl -X GET http://localhost:8080/api/users \
-H "Authorization: Bearer <your_access_token>"
- การสร้างผู้ใช้ใหม่ (Create a new user)
curl -X POST http://localhost:8080/api/users \
-H "Authorization: Bearer <your_access_token>" \
-H "Content-Type: application/json" \
-d '{"username": "newuser", "email": "newuser@example.com",
"password": "password123", "full_name": "New User"}'
- การเพิ่มบทบาทให้กับผู้ใช้ (Add role to user)
curl -X POST http://localhost:8080/api/users/2/roles \
-H "Authorization: Bearer <your_access_token>" \
-H "Content-Type: application/json" \
-d '{"role_id": 2}'
-
Unit Testing: ทดสอบส่วนประกอบย่อยๆ แยกจากกัน เช่น:
- ทดสอบโมเดล User และการเข้ารหัสรหัสผ่าน
- ทดสอบระบบ JWT
- ทดสอบ Service และ Middleware
-
Integration Testing: ทดสอบการทำงานร่วมกันของหลายส่วนประกอบ:
- ทดสอบ API endpoints ทั้งระบบ
-
Mock Testing: จำลองส่วนประกอบบางอย่างในระบบ เช่น ฐานข้อมูล เพื่อให้สามารถทดสอบได้อย่างแยกส่วน
- จำลองฐานข้อมูลโดยไม่ต้องใช้ฐานข้อมูลจริง
- จำลอง interfaces ต่างๆ เพื่อควบคุมพฤติกรรมในการทดสอบ
-
Behavior-Driven Development (BDD): ใช้แนวคิดการทดสอบตามพฤติกรรมที่คาดหวัง
- ใช้รูปแบบ Test Suite
-
testing: แพ็คเกจมาตรฐานของ Go สำหรับการทดสอบ
-
stretchr/testify:
assert: ใช้สำหรับการตรวจสอบค่าที่คาดหวังsuite: ใช้สำหรับจัดกลุ่มการทดสอบและจัดการ setup/teardown
-
DATA-DOG/go-sqlmock: ใช้จำลองฐานข้อมูล SQL
- จำลองการเรียกใช้ SQL queries และกำหนดผลลัพธ์
- ทดสอบโดยไม่ต้องเชื่อมต่อกับฐานข้อมูลจริง
-
golang/mock/mockgen: สร้าง mock objects จาก interfaces
- ใช้จำลองพฤติกรรมของ interfaces ต่างๆ
-
steinfletcher/apitest: ใช้ทดสอบ API endpoints
- สร้าง HTTP requests ไปยัง endpoints
- ตรวจสอบ HTTP responses
-
steinfletcher/apitest-jsonpath: ใช้ตรวจสอบข้อมูล JSON ใน response
- ตรวจสอบข้อมูลใน JSON ด้วย JSONPath expressions
-
โมเดลทดสอบ:
- ทดสอบการเข้ารหัสและตรวจสอบรหัสผ่าน
- ทดสอบ hooks ต่างๆ เช่น BeforeCreate
-
ทดสอบ JWT:
- ทดสอบการสร้างและตรวจสอบ tokens
- ทดสอบ tokens ที่หมดอายุหรือไม่ถูกต้อง
-
ทดสอบ Service:
- ทดสอบการ login สำเร็จและไม่สำเร็จ
- ทดสอบการดึงข้อมูลผู้ใช้
- ทดสอบการตรวจสอบสิทธิ์
-
ทดสอบ Middleware:
- ทดสอบการตรวจสอบ JWT tokens
- ทดสอบการตรวจสอบสิทธิ์และบทบาท
-
ทดสอบ API Integration:
- ทดสอบการเรียกใช้ API endpoints ทั้งหมด
- ทดสอบการทำงานร่วมกันของทั้งระบบ
# รัน unit tests
make test-unit
# รัน integration tests
make test-integration
# รัน tests ทั้งหมด
make test
# รัน tests พร้อมสร้างรายงานความครอบคลุมของโค้ด
make cover
# รัน tests ด้วย Docker
make docker-compose-test