"""GUARDiA ITSM 단위 테스트 — Pydantic 모델 검증""" import sys, os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) import pytest from models import ( SRCreate, SRStatusUpdate, SRType, SRStatus, Priority, InstitutionCreate, ScrapingTargetCreate, ) class TestSRCreate: def test_valid_sr_create(self): sr = SRCreate(title="서버 장애 점검", requested_by="admin") assert sr.title == "서버 장애 점검" assert sr.requested_by == "admin" assert sr.priority == Priority.MEDIUM assert sr.sr_type == SRType.OTHER def test_sr_create_with_priority(self): sr = SRCreate(title="긴급 배포", requested_by="admin", priority=Priority.CRITICAL, sr_type=SRType.DEPLOY) assert sr.priority == Priority.CRITICAL assert sr.sr_type == SRType.DEPLOY def test_sr_create_optional_fields(self): sr = SRCreate(title="테스트", requested_by="user") assert sr.description is None assert sr.assigned_to is None def test_sr_type_enum_values(self): assert SRType.DEPLOY == "DEPLOY" assert SRType.RESTART == "RESTART" assert SRType.LOG == "LOG" assert SRType.INQUIRY == "INQUIRY" assert SRType.OTHER == "OTHER" def test_priority_enum_values(self): assert Priority.CRITICAL == "CRITICAL" assert Priority.HIGH == "HIGH" assert Priority.MEDIUM == "MEDIUM" assert Priority.LOW == "LOW" class TestSRStatusUpdate: def test_valid_status_update(self): upd = SRStatusUpdate(status=SRStatus.APPROVED, actor="admin") assert upd.status == SRStatus.APPROVED assert upd.actor == "admin" def test_status_with_comment(self): upd = SRStatusUpdate(status=SRStatus.REJECTED, actor="admin", comment="요건 미충족") assert upd.comment == "요건 미충족" def test_optional_comment_default_none(self): upd = SRStatusUpdate(status=SRStatus.APPROVED, actor="admin") assert upd.comment is None def test_sr_status_transitions(self): for s in [SRStatus.RECEIVED, SRStatus.APPROVED, SRStatus.IN_PROGRESS, SRStatus.COMPLETED, SRStatus.REJECTED]: upd = SRStatusUpdate(status=s, actor="system") assert upd.status == s class TestInstitutionCreate: def test_valid_institution(self): inst = InstitutionCreate(inst_code="INST001", inst_name="테스트기관") assert inst.inst_code == "INST001" assert inst.inst_name == "테스트기관" def test_institution_optional_fields(self): inst = InstitutionCreate(inst_code="INST002", inst_name="기관2") assert inst.org_type is None assert inst.contact_pm is None def test_institution_with_fields(self): inst = InstitutionCreate(inst_code="INST003", inst_name="전체기관", org_type="공공기관", contact_pm="홍길동") assert inst.org_type == "공공기관" class TestScrapingTargetCreate: def test_valid_scraping_target(self): target = ScrapingTargetCreate(name="뉴스 수집", url="https://example.com") assert target.name == "뉴스 수집" assert target.url == "https://example.com" assert target.is_active is True def test_scraping_target_with_selector(self): target = ScrapingTargetCreate(name="기사", url="https://news.co.kr", selector=".article-content", schedule="0 9 * * *") assert target.selector == ".article-content" assert target.schedule == "0 9 * * *"