# QA360 Example: Complete Test Suite
# All quality gates enabled - comprehensive quality assurance

version: 2
name: complete-qa-suite
description: Comprehensive QA suite with all quality gates

gates:
  api-health:
    adapter: playwright-api
    enabled: true
    config:
      baseUrl: "https://api.example.com"
      smoke:
        - "GET /health -> 200"
        - "GET /status -> 200"
        - "POST /login -> 200"

  api-crud:
    adapter: playwright-api
    enabled: true
    config:
      baseUrl: "https://api.example.com"
      smoke:
        - "GET /api/v1/users -> 200"
        - "POST /api/v1/users -> 201"
        - "PUT /api/v1/users/1 -> 200"
        - "DELETE /api/v1/users/1 -> 204"
    budgets:
      p95_ms: 1000

  ui-smoke:
    adapter: playwright-ui
    enabled: true
    config:
      baseUrl: "https://example.com"
      pages:
        - url: "/"
          expectedElements: ["body", "main"]
        - url: "/dashboard"
          expectedElements: ["body", ".dashboard"]

  a11y:
    adapter: playwright-ui
    enabled: true
    config:
      baseUrl: "https://example.com"
      pages:
        - url: "/"
          a11yRules:
            - wcag2a
            - wcag2aa
    budgets:
      violations: 10
      a11y_score: 90

  perf:
    adapter: k6-perf
    enabled: true
    config:
      script: |
        import http from 'k6/http';
        import { check } from 'k6';

        export const options = {
          stages: [
            { duration: '10s', target: 10 },
            { duration: '20s', target: 50 },
            { duration: '10s', target: 0 },
          ],
        };

        export default function () {
          const res = http.get('https://api.example.com/health');
          check(res, {
            'status is 200': (r) => r.status === 200,
            'response time < 500ms': (r) => r.timings.duration < 500,
          });
        }
    budgets:
      p95_ms: 2000
      p99_ms: 5000

  sast:
    adapter: semgrep-sast
    enabled: true
    config:
      rules:
        - security
        - owasp-top-10
      paths:
        - src/
        - lib/
    budgets:
      high_findings: 3
      medium_findings: 10

  dast:
    adapter: zap-dast
    enabled: true
    config:
      target: api
      profile: baseline
      url: "https://api.example.com"
      scanType: baseline
    budgets:
      high_findings: 5
      medium_findings: 20

  secrets:
    adapter: gitleaks-secrets
    enabled: true
    config:
      paths:
        - .
        - src/
        - config/
    budgets:
      critical_findings: 0

execution:
  default_timeout: 120000
  default_retries: 2
  on_failure: continue
  parallel: true
  max_concurrency: 3

# Optional: Docker Compose integration (uncomment if using Docker)
# hooks:
#   beforeAll:
#     - type: docker
#       compose:
#         file: docker-compose.yml
#         command: up -d
#       timeout: 30000
#     - type: wait_on
#       wait_for:
#         resource: http://localhost:3000
#         timeout: 30000
#
#   afterAll:
#     - type: docker
#       compose:
#         file: docker-compose.yml
#         command: down
#       timeout: 30000
