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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user