# AI生成测试质量门禁配置
# 基于1210个测试的真实经验

---

gates:
  # 门禁1: 虚假测试检测
  fake_test_detection:
    enabled: true
    block_on_issue: true
    
    checks:
      - name: "no_framework_testing"
        description: "禁止测试getter/setter/构造函数"
        banned_patterns:
          - "should.*whenGet[A-Z].*"
          - "should.*whenSet[A-Z].*"
          - "shouldConstruct.*"
        max_violations: 0
        
      - name: "no_fake_assertions"
        description: "禁止虚假断言"
        banned_assertions:
          - "assertTrue(true)"
          - "assertFalse(false)"
          - "assertNotNull(new Object())"
          - "assertEquals(1, 1)"
        max_violations: 0
        
      - name: "meaningful_assertions"
        description: "必须有业务意义断言"
        min_assertions: 2
        min_business_verification: 1
        max_null_checks_ratio: 0.5

  # 门禁2: 边界条件检查
  boundary_coverage:
    enabled: true
    warning_only: false
    
    requirements:
      - type: "numeric"
        min_test_values: 5
        required_values: ["MIN", "-1", "0", "1", "MAX"]
        
      - type: "string"
        min_test_values: 6
        required_values: ["null", "empty", "single", "max_length", "unicode", "special"]
        
      - type: "collection"
        min_test_values: 4
        required_values: ["null", "empty", "single", "max_size"]
        
      - type: "concurrency"
        min_tests: 1
        required: false

  # 门禁3: Mock使用检查
  mock_usage:
    enabled: true
    max_mock_ratio: 0.5
    
    banned_layers:
      - "com.mosquito.project.service.*"
      - "com.mosquito.project.controller.*"
      - "com.mosquito.project.repository.*"
      
    required_real:
      - interface: "javax.sql.DataSource"
        implementation: "testcontainers"
      - interface: "org.springframework.data.redis.connection.RedisConnectionFactory"
        implementation: "testcontainers"

  # 门禁4: 分支覆盖率
  branch_coverage:
    enabled: true
    min_coverage: 60
    auto_generate: true

  # 门禁5: 可维护性
  maintainability:
    enabled: true
    
    naming:
      pattern: "should_.*_when_.*"
      required_format: "BDD"
      
    structure:
      require_given_when_then: true
      max_lines_per_test: 30
      max_duplicate_code_ratio: 0.1
      
    assertions:
      prefer_assertj: true
      ban_junit4: true

  # 门禁6: 性能基础
  performance_baseline:
    enabled: true
    warning_only: true
    
    requirements:
      - type: "execution_time"
        max_ms: 100
        
      - type: "large_object"
        min_size_mb: 1
        test_required: false
        
      - type: "concurrent_load"
        min_threads: 2
        test_required: false

scoring:
  weights:
    fake_test_detection: 25
    boundary_coverage: 20
    mock_usage: 20
    branch_coverage: 20
    maintainability: 10
    performance_baseline: 5
    
  total_thresholds:
    A: 90
    B: 80
    C: 70
    D: 60
    F: 0

actions:
  on_failure:
    generate_report: true
    suggest_fixes: true
    block_merge: true
    
  on_warning:
    generate_report: true
    allow_merge: true

reporting:
  format: "html"
  output_path: "target/quality-gates-report.html"
  include_suggestions: true
  include_examples: true
  
  sections:
    - summary
    - gate_results
    - violations
    - suggestions
    - examples
