# FLOW-002: Test Dependency Graph
# depends: declares which tests must have passed before this one runs.
# If any prerequisite failed or was skipped, this test is skipped — not failed.
#
# Suite Summary shows:
#   ⏭  TestName
#        └─ prerequisite 'X' failed
#
# Cascading: if A fails → B (depends on A) skips → C (depends on B) also skips.

ShouldCreateUser_ForDependsDemo:
  tags:
    - depends
  mock:
    interactions:
      - request:
          method: GET
          path: /api/demo/depends@test.com
        response:
          statusCode: 200
          body: &valid_body
            isValid: true
      - request:
          method: GET
          path: /api/demo
          params:
            email: depends@test.com
        response:
          statusCode: 200
          body: *valid_body
      - request:
          method: POST
          path: /api/demo
          body:
            email: depends@test.com
        response:
          statusCode: 200
          body: *valid_body
  api:
    request:
      method: POST
      path: /api/user
      body:
        name: depends-demo
        email: depends@test.com
        age: 25
    response:
      statusCode: 201
      body: {}
      extract:
        demoUserId: $.body.id
      matcher:
        semantic:
          id: greaterThan(0)

ShouldGetUserById_WhenDependsOnCreate:
  # Direct dependency — skipped if ShouldCreateUser_ForDependsDemo fails.
  tags:
    - depends
  depends:
    - ShouldCreateUser_ForDependsDemo
  api:
    request:
      method: GET
      path: "/api/user/{{demoUserId}}"
    response:
      statusCode: 200
      body:
        name: depends-demo
        email: depends@test.com
        age: 25
      matcher:
        ignore:
          - id

ShouldGetUserByEmail_CascadingDependency:
  # Cascading dependency — if ShouldGetUserById_WhenDependsOnCreate is skipped,
  # this test is also skipped automatically without any extra configuration.
  tags:
    - depends
  depends:
    - ShouldGetUserById_WhenDependsOnCreate
  api:
    request:
      method: GET
      path: /api/user/depends@test.com
    response:
      statusCode: 200
      body:
        name: depends-demo
        email: depends@test.com
        age: 25
      matcher:
        ignore:
          - id
