# 05.02. Third-party Integration Testing

## Mục đích
Kiểm thử khả năng kết nối và trao đổi dữ liệu giữa hệ thống đang phát triển với các dịch vụ của bên thứ ba (ví dụ: Cổng thanh toán, Nhà cung cấp SMS/Email, Hệ thống ERP, Dịch vụ bản đồ). Mục tiêu là đảm bảo tích hợp mượt mà, xử lý lỗi tốt khi bên thứ ba gặp sự cố và bảo mật dữ liệu truyền tải.

## Kiến thức cần có
- **Cơ chế tích hợp:** Hiểu về Webhooks, Callbacks, Rest API, SOAP, hoặc SDK của bên thứ ba.
- **Mạng và Bảo mật:** Kiến thức về IP Whitelisting, SSL/TLS Handshake, API Keys, JWT.
- **Kỹ thuật giả lập:** Cách sử dụng Mock (ví dụ: Mockoon, WireMock) hoặc Sandbox environment của bên thứ ba.
- **Xử lý bất đồng bộ:** Hiểu về Message Queues hoặc cơ chế xử lý background jobs khi chờ phản hồi từ bên thứ ba.

## Quy trình thực hiện
1. **Nghiên cứu tài liệu Integration:** Hiểu rõ các luồng nghiệp vụ, format dữ liệu yêu cầu và các mã lỗi của bên thứ ba.
2. **Cấu hình Sandbox/Staging:** Đăng ký và thiết lập thông tin kết nối (App ID, Secret Key, Callback URL) trên môi trường thử nghiệm của bên thứ ba.
3. **Kiểm thử kết nối (Connectivity):** Xác nhận hệ thống có thể "ping" và kết nối được đến server bên thứ ba (kiểm tra Firewall, DNS).
4. **Kiểm thử dữ liệu (Data Mapping):**
    - Gửi dữ liệu từ hệ thống chính -> 3rd party (đúng format, đúng giá trị).
    - Nhận dữ liệu từ 3rd party -> hệ thống chính (parse đúng dữ liệu, xử lý đúng logic).
5. **Kiểm thử Webhooks/Callbacks:** Giả lập các sự kiện từ bên thứ ba (ví dụ: Thanh toán thành công) và kiểm tra hệ thống chính cập nhật trạng thái tương ứng.
6. **Kiểm thử khả năng chịu lỗi (Resilience):** Giả lập tình huống bên thứ ba bị chậm (latency), sập (down), hoặc trả về lỗi 5xx.

## Checklist
- [ ] Kết nối thành công đến môi trường Sandbox/Staging của bên thứ ba.
- [ ] Dữ liệu gửi đi tuân thủ đúng định dạng và giới hạn của bên thứ ba.
- [ ] Dữ liệu nhận về được xử lý chính xác, không gây lỗi logic cho hệ thống chính.
- [ ] Webhook được xác thực nguồn gốc (Signature validation) để tránh giả mạo.
- [ ] Cơ chế Retry hoạt động đúng khi kết nối thất bại (ví dụ: Exponential backoff).
- [ ] Hệ thống hiển thị thông báo lỗi rõ ràng cho người dùng khi bên thứ ba gặp sự cố.
- [ ] Xử lý thành công các trường hợp trùng lặp Callback (Idempotency).
- [ ] Thông tin nhạy cảm (Secret Keys, Password) không bị log ra console hoặc file log.

## Output mong đợi
- **Tài liệu kịch bản tích hợp:** Mô tả các luồng trao đổi dữ liệu.
- **Kết quả kiểm thử môi trường Sandbox:** Xác nhận mọi tính năng hoạt động đúng với môi trường giả lập.
- **Báo cáo xử lý lỗi (Exception handling report):** Danh sách các trường hợp ngoại lệ đã được xử lý.
- **Log giao dịch:** Bản ghi chi tiết các request/response trao đổi với bên thứ ba.
