# Kiểm thử Ràng buộc phụ thuộc (Dependency Validation)

## Mục đích (Purpose)
Xác minh tính toàn vẹn và sự ổn định của hệ thống khi có các mối quan hệ phụ thuộc giữa các dữ liệu, các module hoặc các dịch vụ bên ngoài. Đảm bảo rằng sự thay đổi hoặc lỗi ở một thành phần phụ thuộc không làm sụp đổ toàn bộ hệ thống hoặc gây ra dữ liệu rác/mồ côi.

## Kiến thức cần có (Required Knowledge)
- Hiểu về quan hệ thực thể (ER Diagram) trong cơ sở dữ liệu (One-to-One, One-to-Many, Many-to-Many).
- Kiến thức về các ràng buộc Database: Primary Key, Foreign Key, Cascading (Delete/Update).
- Hiểu về kiến trúc hệ thống (Microservices, Third-party APIs) và các điểm phụ thuộc.
- Nắm vững logic nghiệp vụ về sự phụ thuộc tính năng (ví dụ: Tính năng A chỉ hoạt động nếu tính năng B đã được cấu hình).

## Quy trình thực hiện (Process)
1. **Xác định các mối quan hệ phụ thuộc:** Liệt kê các thành phần Master-Detail, Parent-Child hoặc các Service-to-Service dependencies.
2. **Kiểm thử Ràng buộc dữ liệu (Data Dependency):** Thử thực hiện các thao tác Xóa/Cập nhật dữ liệu Master khi đang có dữ liệu Detail phụ thuộc.
3. **Kiểm thử Hiệu ứng dây chuyền (Cascading Effects):** Kiểm tra xem các bản ghi con có được xử lý đúng (xóa theo, set null, hoặc báo lỗi) khi bản ghi cha bị tác động.
4. **Kiểm thử Phụ thuộc Module (Module Dependency):** Tắt hoặc thay đổi cấu hình của một module nguồn và kiểm tra phản ứng của các module đích phụ thuộc.
5. **Kiểm thử Phụ thuộc Dịch vụ bên ngoài (Service Dependency):** Giả lập tình huống dịch vụ bên thứ ba (ví dụ: Cổng thanh toán, Bản đồ) bị chậm hoặc ngừng hoạt động (Mocking/Stubbing).
6. **Kiểm thử Phục hồi:** Xác minh hệ thống tự phục hồi hoặc hoạt động lại bình thường khi thành phần phụ thuộc có lại.

## Checklist
### Ràng buộc dữ liệu & Database
- [ ] Không cho phép xóa bản ghi cha nếu đang có bản ghi con tham chiếu (nếu cấu hình No Action/Restrict).
- [ ] Dữ liệu con bị xóa hoàn toàn khi dữ liệu cha bị xóa (nếu cấu hình Cascade Delete).
- [ ] Không có "dữ liệu mồ hôi" (Orphan data) tồn tại trong Database sau các thao tác xóa.
- [ ] Cập nhật ID ở bản ghi cha thì ID ở bản ghi con cũng được cập nhật đồng bộ (nếu cấu hình Cascade Update).

### Phụ thuộc tính năng & Module
- [ ] Thông báo lỗi rõ ràng khi người dùng cố truy cập tính năng mà các điều kiện tiên quyết chưa được thỏa mãn.
- [ ] Module phụ thuộc không bị "crash" (lỗi trắng trang/lỗi 500) khi module nguồn bị tắt.
- [ ] Dữ liệu mặc định (Fallback data) được hiển thị khi dữ liệu từ module phụ thuộc không có sẵn.

### Phụ thuộc dịch vụ bên ngoài
- [ ] Hệ thống hiển thị trạng thái đang xử lý (Loading) hoặc thông báo bảo trì khi dịch vụ ngoài bị chậm/lỗi.
- [ ] Cơ chế Retry hoạt động đúng (nếu có) khi gọi dịch vụ ngoài thất bại.
- [ ] Dữ liệu được đồng bộ lại (Sync) sau khi dịch vụ bên ngoài hoạt động trở lại.

## Output mong đợi (Expected Output)
- Ma trận các mối quan hệ phụ thuộc được xác định rõ ràng.
- Bộ Test Scenarios kiểm tra các tình huống lỗi phụ thuộc (Negative Testing).
- Báo cáo về khả năng chịu lỗi và tính toàn vẹn dữ liệu của hệ thống.
