{
    "name": "품목 삭제 API 테스트",
    "description": "품목 삭제 시 참조 무결성 체크 및 soft delete 동작을 테스트합니다.",
    "version": "1.0",
    "config": {
        "apiKey": "42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a",
        "baseUrl": "https://api.sam.kr/api/v1",
        "timeout": 30000,
        "stopOnFailure": false
    },
    "variables": {
        "user_id": "codebridgex",
        "user_pwd": "code1234",
        "testProductCode": "TEST-DEL-001",
        "testProductName": "삭제 테스트용 품목",
        "testBomParentCode": "TEST-BOM-PARENT-001",
        "testBomParentName": "BOM 부모 품목"
    },
    "steps": [
        {
            "id": "login",
            "name": "로그인",
            "description": "API 테스트를 위한 로그인",
            "method": "POST",
            "endpoint": "/login",
            "body": {
                "user_id": "{{variables.user_id}}",
                "user_pwd": "{{variables.user_pwd}}"
            },
            "extract": {
                "accessToken": "$.access_token",
                "refreshToken": "$.refresh_token"
            },
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.access_token": "@isString"
                }
            }
        },
        {
            "id": "create_product_for_delete",
            "name": "삭제 테스트용 품목 생성",
            "description": "단순 삭제 테스트용 품목 생성 (BOM에 미사용)",
            "method": "POST",
            "endpoint": "/items",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "body": {
                "code": "{{variables.testProductCode}}",
                "name": "{{variables.testProductName}}",
                "unit": "EA",
                "product_type": "FG",
                "is_active": true
            },
            "dependsOn": ["login"],
            "extract": {
                "createdProductId": "$.data.id",
                "createdProductCode": "$.data.code"
            },
            "expect": {
                "status": [200, 201],
                "jsonPath": {
                    "$.success": true,
                    "$.data.id": "@isNumber"
                }
            }
        },
        {
            "id": "get_items_list",
            "name": "품목 목록 조회",
            "description": "생성된 품목이 목록에 있는지 확인",
            "method": "GET",
            "endpoint": "/items?type=FG&search={{create_product_for_delete.createdProductCode}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["create_product_for_delete"],
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "delete_product_success",
            "name": "품목 삭제 (정상)",
            "description": "BOM에서 사용되지 않는 품목 삭제 - 성공해야 함",
            "method": "DELETE",
            "endpoint": "/items/{{create_product_for_delete.createdProductId}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["get_items_list"],
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "verify_deleted_not_in_list",
            "name": "삭제된 품목 목록 미포함 확인",
            "description": "삭제된 품목이 기본 목록에서 제외되는지 확인",
            "method": "GET",
            "endpoint": "/items?type=FG&search={{create_product_for_delete.createdProductCode}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["delete_product_success"],
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.success": true
                }
            },
            "note": "data.total이 0이어야 함 (삭제된 품목 미포함)"
        },
        {
            "id": "delete_already_deleted_item",
            "name": "이미 삭제된 품목 재삭제 시도",
            "description": "soft delete된 품목을 다시 삭제하면 404 반환해야 함",
            "method": "DELETE",
            "endpoint": "/items/{{create_product_for_delete.createdProductId}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["verify_deleted_not_in_list"],
            "expect": {
                "status": [404],
                "jsonPath": {
                    "$.success": false
                }
            }
        },
        {
            "id": "create_bom_parent",
            "name": "BOM 부모 품목 생성",
            "description": "BOM 테스트를 위한 부모 품목 생성",
            "method": "POST",
            "endpoint": "/items",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "body": {
                "code": "{{variables.testBomParentCode}}",
                "name": "{{variables.testBomParentName}}",
                "unit": "EA",
                "product_type": "FG",
                "is_active": true
            },
            "dependsOn": ["login"],
            "extract": {
                "bomParentId": "$.data.id"
            },
            "expect": {
                "status": [200, 201],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "create_bom_child",
            "name": "BOM 자식 품목 생성",
            "description": "BOM 구성품으로 사용될 품목 생성",
            "method": "POST",
            "endpoint": "/items",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "body": {
                "code": "TEST-BOM-CHILD-001",
                "name": "BOM 자식 품목",
                "unit": "EA",
                "product_type": "PT",
                "is_active": true
            },
            "dependsOn": ["create_bom_parent"],
            "extract": {
                "bomChildId": "$.data.id"
            },
            "expect": {
                "status": [200, 201],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "add_bom_component",
            "name": "BOM 구성품 추가",
            "description": "부모 품목에 자식 품목을 BOM으로 등록",
            "method": "POST",
            "endpoint": "/items/{{create_bom_parent.bomParentId}}/bom",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "body": {
                "items": [
                    {
                        "ref_type": "PRODUCT",
                        "ref_id": "{{create_bom_child.bomChildId}}",
                        "quantity": 2,
                        "sort_order": 1
                    }
                ]
            },
            "dependsOn": ["create_bom_child"],
            "expect": {
                "status": [200, 201],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "delete_bom_used_item_fail",
            "name": "BOM 사용 중인 품목 삭제 시도",
            "description": "다른 BOM에서 구성품으로 사용 중인 품목 삭제 - 400 에러 반환해야 함",
            "method": "DELETE",
            "endpoint": "/items/{{create_bom_child.bomChildId}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["add_bom_component"],
            "expect": {
                "status": [400],
                "jsonPath": {
                    "$.success": false,
                    "$.message": "@contains:BOM"
                }
            }
        },
        {
            "id": "cleanup_bom",
            "name": "BOM 구성품 제거",
            "description": "테스트 정리 - BOM 구성품 제거",
            "method": "DELETE",
            "endpoint": "/items/{{create_bom_parent.bomParentId}}/bom",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["delete_bom_used_item_fail"],
            "expect": {
                "status": [200, 204]
            }
        },
        {
            "id": "delete_bom_child_after_cleanup",
            "name": "BOM 해제 후 자식 품목 삭제",
            "description": "BOM에서 제거된 품목은 삭제 가능해야 함",
            "method": "DELETE",
            "endpoint": "/items/{{create_bom_child.bomChildId}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["cleanup_bom"],
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.success": true
                }
            }
        },
        {
            "id": "cleanup_bom_parent",
            "name": "BOM 부모 품목 삭제",
            "description": "테스트 정리 - 부모 품목 삭제",
            "method": "DELETE",
            "endpoint": "/items/{{create_bom_parent.bomParentId}}",
            "headers": {
                "Authorization": "Bearer {{login.accessToken}}"
            },
            "dependsOn": ["delete_bom_child_after_cleanup"],
            "expect": {
                "status": [200],
                "jsonPath": {
                    "$.success": true
                }
            }
        }
    ]
}