{
  "$schema": "flow-tester-schema.json",
  "name": "분기 테스트 플로우 예시",
  "description": "Flow Tester의 조건 분기 기능을 보여주는 예시 플로우입니다. 로그인 성공/실패에 따른 분기, 권한에 따른 분기, 조건부 의존성 등을 테스트합니다.",
  "version": "1.0.0",
  "author": "SAM Team",
  "category": "examples",
  "tags": ["branching", "condition", "if-else", "example"],
  "config": {
    "baseUrl": "",
    "timeout": 30000,
    "stopOnFailure": false
  },
  "variables": {
    "user_id": "{{$env.FLOW_TESTER_USER_ID}}",
    "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}"
  },
  "steps": [
    {
      "id": "login",
      "name": "1. 로그인 시도",
      "description": "사용자 인증을 시도합니다",
      "method": "POST",
      "endpoint": "/api/v1/login",
      "body": {
        "user_id": "{{variables.user_id}}",
        "user_pwd": "{{variables.user_pwd}}"
      },
      "expect": {
        "status": [200, 401]
      },
      "extract": {
        "token": "$.access_token",
        "role": "$.user.role",
        "permissions": "$.user.permissions"
      },
      "continueOnFailure": true
    },

    {
      "id": "login_success_path",
      "name": "2-A. 로그인 성공 처리",
      "description": "로그인이 성공했을 때만 실행됩니다",
      "condition": {"stepResult": "login", "is": "success"},
      "dependsOn": ["login"],
      "method": "GET",
      "endpoint": "/api/v1/users/me",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200]
      }
    },

    {
      "id": "login_failure_path",
      "name": "2-B. 로그인 실패 처리",
      "description": "로그인이 실패했을 때만 실행됩니다",
      "condition": {"stepResult": "login", "is": "failure"},
      "dependsOn": [{"step": "login", "onlyIf": "any"}],
      "method": "POST",
      "endpoint": "/api/v1/auth/password-reset-request",
      "body": {
        "email": "{{variables.user_id}}"
      },
      "expect": {
        "status": [200, 404]
      },
      "continueOnFailure": true
    },

    {
      "id": "admin_dashboard",
      "name": "3-A. 관리자 대시보드",
      "description": "관리자 권한이 있을 때만 실행됩니다",
      "condition": "{{login.role}} == 'admin'",
      "dependsOn": ["login_success_path"],
      "method": "GET",
      "endpoint": "/api/v1/admin/dashboard",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200]
      }
    },

    {
      "id": "user_dashboard",
      "name": "3-B. 일반 사용자 대시보드",
      "description": "일반 사용자 권한일 때만 실행됩니다",
      "condition": "{{login.role}} == 'user'",
      "dependsOn": ["login_success_path"],
      "method": "GET",
      "endpoint": "/api/v1/user/dashboard",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200]
      }
    },

    {
      "id": "premium_features",
      "name": "3-C. 프리미엄 기능",
      "description": "프리미엄 권한이 있을 때만 실행됩니다",
      "condition": {
        "and": [
          {"stepResult": "login", "is": "success"},
          {"left": "{{login.permissions}}", "op": "contains", "right": "premium"}
        ]
      },
      "dependsOn": ["login_success_path"],
      "method": "GET",
      "endpoint": "/api/v1/premium/features",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200]
      }
    },

    {
      "id": "create_report",
      "name": "4. 리포트 생성 (관리자만)",
      "description": "관리자만 리포트를 생성할 수 있습니다",
      "condition": {"stepResult": "admin_dashboard", "is": "success"},
      "dependsOn": [{"step": "admin_dashboard", "onlyIf": "executed"}],
      "method": "POST",
      "endpoint": "/api/v1/admin/reports",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "type": "daily",
        "date": "{{$faker.date}}"
      },
      "expect": {
        "status": [201]
      }
    },

    {
      "id": "cleanup_always",
      "name": "5. 정리 작업 (항상 실행)",
      "description": "성공/실패와 무관하게 항상 실행되는 정리 작업입니다",
      "dependsOn": [
        {"step": "login", "onlyIf": "any"},
        {"step": "admin_dashboard", "onlyIf": "any"},
        {"step": "user_dashboard", "onlyIf": "any"}
      ],
      "method": "POST",
      "endpoint": "/api/v1/logout",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200, 401]
      },
      "continueOnFailure": true
    }
  ]
}