feat: enforce >90% SonarQube coverage standards for CakePHP and Laravel

- Add sonar-project.properties templates for CakePHP and Laravel
- Update install.sh to automatically provision SonarQube config
- Enhance cakephp-unit-test skill with exhaustive branch coverage rules
- Update SonarQube guide with CakePHP specific rules and exclusion patterns
- Enhance TableTest template with buildRules and validation failure cases
This commit is contained in:
2026-09-14 10:31:56 +07:00
parent 7425b263d5
commit 8f7212ef65
6 changed files with 201 additions and 35 deletions
+27 -9
View File
@@ -105,15 +105,33 @@ Skill này là công cụ chính để tự động tạo ra file Test cho bất
$this->enableSecurityToken();
```
### Bước 4: Lập Ma Trận Test Scenarios (Bao Phủ 100% Nhánh SonarQube)
- **100% Public Methods**: Mọi phương thức public đều phải có test.
- Với Table: bắt buộc test custom finders, validation failures, save thành công & thất bại.
- Với Controller: bắt buộc test thành công (200/302), validation failure (422/render form), unauthorized (403/redirect login), not found (404).
- Với Command: bắt buộc test `execute()` với input đúng, input thiếu, exit code.
- **Bao phủ nhánh rẽ**:
- Kịch bản Null Coalescing `??` và Ternary `?:`.
- Kịch bản `try - catch`: ép mock/dữ liệu ném Exception để chạy qua khối `catch`.
- Mọi `if`, `else if`, `else`, `switch`, `match`.
### Bước 4: Lập Ma Trận Test Scenarios (Đảm Bảo Coverage > 90% Trên SonarQube)
Mục tiêu cốt lõi: SonarQube tính cả Line Coverage và Branch Coverage. Để đạt **Coverage > 90%**, Agent phải tuân thủ nghiêm ngặt ma trận sau:
1. **100% Public Methods**: Mọi phương thức public của class đều phải có test.
2. **Quét 100% Nhánh Rẽ (Branch / Condition Coverage)**:
- **Toán tử `??` (Null Coalescing)**: Bắt buộc 2 test case (có giá trị & null/empty).
- **Toán tử `?:` (Ternary)**: Bắt buộc 2 test case (true & false).
- **Toán tử logic `&&` và `||`**: Phải test các kịch bản kết hợp để thỏa mãn điều kiện rẽ nhánh SonarQube.
- **Khối `try - catch`**: BẮT BUỘC có test case ép mock/dữ liệu ném Exception để chạy qua khối `catch`.
- **Mọi `if`, `else if`, `else`, `switch`, `match`** (kể cả nhánh default).
3. **Chiến Lược Riêng Cho Từng Thành Phần CakePHP Để Đạt > 90%**:
- **ORM Table (`validationDefault`)**: Bắt buộc test dữ liệu hợp lệ VÀ các trường hợp vi phạm cho **từng rule**:
- Thiếu trường (`requirePresence`)
- Chuỗi rỗng (`notEmptyString`)
- Quá độ dài (`maxLength`)
- Sai định dạng (`email`, `integer`, `url`, số âm).
- **ORM Table (`buildRules`)**: Test cả 2 trường hợp: rule hợp lệ và rule bị vi phạm (`isUnique`, `existsIn`).
- **Controller (IntegrationTestTrait)**:
- GET request: Render view thành công (200).
- POST/PUT save thành công: Redirect 302 + Flash Success.
- POST/PUT save thất bại: Render view 200 + Flash Error.
- Unauthorized / Unauthenticated: Redirect login (hoặc 403).
- Not Found: Bắt RecordNotFoundException (404).
- **Console Command (ConsoleIntegrationTestTrait)**:
- Test chạy thành công: `assertExitSuccess()`.
- Test chạy lỗi hoặc thiếu options: `assertExitError()`.
- Test stdout chứa thông báo mong đợi: `assertOutputContains()`.
### Bước 5: Sinh Mã Nguồn Test Chuẩn Mirror
1. Xác định đường dẫn file test theo chuẩn CakePHP: