kdrug-inventory-system/dev_scripts/test_lot_validation.py
시골약사 ad9ac396e2 chore: 개발 파일 정리 및 구조화
- 개발/테스트 스크립트를 dev_scripts/ 폴더로 이동
- 스크린샷을 screenshots/ 폴더로 이동
- 백업 파일 보존 (.backup)
- 처방 관련 추가 스크립트 포함

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-18 04:44:48 +00:00

108 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""
로트 배분 검증 테스트 - 재고 부족 및 잘못된 배분 테스트
"""
import json
import requests
BASE_URL = "http://localhost:5001"
def test_insufficient_stock():
print("=== 로트 배분 검증 테스트 ===\n")
# 1. 배분 합계가 맞지 않는 경우
print("1. 배분 합계가 필요량과 맞지 않는 경우")
compound_data = {
"patient_id": 1,
"formula_id": None,
"je_count": 1,
"cheop_total": 1,
"pouch_total": 1,
"ingredients": [
{
"herb_item_id": 63,
"grams_per_cheop": 100.0,
"total_grams": 100.0,
"origin": "manual",
"lot_assignments": [
{"lot_id": 208, "quantity": 50.0}, # 50g
{"lot_id": 219, "quantity": 30.0} # 30g = 총 80g (100g 필요)
]
}
]
}
response = requests.post(f"{BASE_URL}/api/compounds", json=compound_data, headers={"Content-Type": "application/json"})
if response.status_code != 200:
result = response.json()
print(f" ✅ 예상된 오류 발생: {result.get('error')}")
else:
print(f" ❌ 오류가 발생해야 하는데 성공함")
# 2. 로트 재고가 부족한 경우
print("\n2. 로트 재고가 부족한 경우")
compound_data = {
"patient_id": 1,
"formula_id": None,
"je_count": 1,
"cheop_total": 1,
"pouch_total": 1,
"ingredients": [
{
"herb_item_id": 63,
"grams_per_cheop": 5000.0, # 5000g 요청
"total_grams": 5000.0,
"origin": "manual",
"lot_assignments": [
{"lot_id": 208, "quantity": 5000.0} # 로트 208에 5000g 요청 (실제로는 4784g만 있음)
]
}
]
}
response = requests.post(f"{BASE_URL}/api/compounds", json=compound_data, headers={"Content-Type": "application/json"})
if response.status_code != 200:
result = response.json()
print(f" ✅ 예상된 오류 발생: {result.get('error')}")
else:
print(f" ❌ 오류가 발생해야 하는데 성공함")
# 3. 존재하지 않는 로트
print("\n3. 존재하지 않는 로트 ID 사용")
compound_data = {
"patient_id": 1,
"formula_id": None,
"je_count": 1,
"cheop_total": 1,
"pouch_total": 1,
"ingredients": [
{
"herb_item_id": 63,
"grams_per_cheop": 10.0,
"total_grams": 10.0,
"origin": "manual",
"lot_assignments": [
{"lot_id": 99999, "quantity": 10.0} # 존재하지 않는 로트
]
}
]
}
response = requests.post(f"{BASE_URL}/api/compounds", json=compound_data, headers={"Content-Type": "application/json"})
if response.status_code != 200:
result = response.json()
print(f" ✅ 예상된 오류 발생: {result.get('error')}")
else:
print(f" ❌ 오류가 발생해야 하는데 성공함")
print("\n✅ 모든 검증 테스트 완료 - 잘못된 요청을 올바르게 거부함")
if __name__ == "__main__":
test_insufficient_stock()