
    i                         d Z ddlZddlmZ ddlZ eej
                  j                  dd            Z G d d      Z G d d	      Z	 G d
 d      Z
 G d d      Zy)u   Hermes Agent 전수조사 검증 테스트 (task-850.1)

보고서의 핵심 내용이 올바르게 작성되었는지 검증합니다.
    N)PathWORKSPACE_ROOTz/home/jay/workspacec                        e Zd ZdZddZddZy)TestHermesAuditReportExistsu%   보고서 파일 존재 여부 검증Nc                 J    t         dz  }|j                         s
J d|        y)u+   보고서 파일이 생성되어야 한다.*memory/research/hermes-agent-full-audit.mdzReport file not found: N)
_WORKSPACEexistsselfreport_paths     H/home/jay/workspace/.worktrees/task-2116-dev1/tests/test_hermes_audit.pytest_report_file_existsz3TestHermesAuditReportExists.test_report_file_exists   s,     #OO!!#L'>{m%LL#    c                 v    t         dz  }|j                         }t        |      dkD  sJ d       d|v sJ d       y)u(   보고서에 내용이 있어야 한다.r   i'  zReport content too shortHermeszReport missing 'Hermes' keywordN)r	   	read_textlen)r   r   contents      r   test_report_has_contentz3TestHermesAuditReportExists.test_report_has_content   sG     #OO'')7|e#?%??#7"E$EE"r   )returnN)__name__
__module____qualname____doc__r   r    r   r   r   r      s    /M
Fr   r   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZdeddfdZy)TestHermesAuditReportStructureu   보고서 섹션 구조 검증r   c                 4    t         dz  }|j                         S Nr   r	   r   r   s     r   report_contentz-TestHermesAuditReportStructure.report_content!        #OO$$&&r   r"   Nc                     d|v sJ y)u&   Core Agent 섹션이 있어야 한다.z
Core AgentNr   r   r"   s     r   test_has_core_agent_sectionz:TestHermesAuditReportStructure.test_has_core_agent_section&   s    ~---r   c                     d|v sd|v sJ yy)u-   Memory & Learning 섹션이 있어야 한다.zMemory & LearningMemoryNr   r%   s     r   test_has_memory_sectionz6TestHermesAuditReportStructure.test_has_memory_section*   s    "n4N8RRR8R4r   c                     d|v sd|v sJ yy)u*   Skills & Tools 섹션이 있어야 한다.zSkills & ToolsSkillsNr   r%   s     r   test_has_skills_sectionz6TestHermesAuditReportStructure.test_has_skills_section.   s    >1X5OOO5O1r   c                     d|v sJ y)u$   Security 섹션이 있어야 한다.SecurityNr   r%   s     r   test_has_security_sectionz8TestHermesAuditReportStructure.test_has_security_section2   s    ^+++r   c                     d|v sJ y)u*   Infrastructure 섹션이 있어야 한다.InfrastructureNr   r%   s     r   test_has_infrastructure_sectionz>TestHermesAuditReportStructure.test_has_infrastructure_section6   s    >111r   c                     d|v sd|v sJ yy)u*   UX & Interface 섹션이 있어야 한다.zUX & InterfaceUXNr   r%   s     r   test_has_ux_sectionz2TestHermesAuditReportStructure.test_has_ux_section:   s    >1T^5KKK5K1r   c                     d|v sd|v sJ yy)u7   도입 권장 항목 요약 섹션이 있어야 한다.u   도입 권장u   요약Nr   r%   s     r   test_has_summary_sectionz7TestHermesAuditReportStructure.test_has_summary_section>       .0H4NNN4N0r   )r   r   r   r   pytestfixturestrr"   r&   r)   r,   r/   r2   r5   r7   r   r   r   r   r      s    (^^' ' '.# .$ .Sc Sd SPc Pd P, , ,2c 2d 2L# L$ LOs Ot Or   r   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZy)!TestHermesAuditReportCompletenessu   전수조사 완전성 검증r   c                 4    t         dz  }|j                         S r    r!   r   s     r   r"   z0TestHermesAuditReportCompleteness.report_contentF   r#   r   r"   Nc                 6    g d}|D ]  }||v rJ d|         y)u(   모든 카테고리가 있어야 한다.)z1. Core Agentz2. Memory & Learningz3. Skills & Toolsu   4. Skills 카탈로그 (전수)z5. Securityz6. Infrastructurez7. UX & Interface (Gateway)z8. Analytics & ObservabilityzMissing category: Nr   )r   r"   
categoriescats       r   test_has_all_categoriesz9TestHermesAuditReportCompleteness.test_has_all_categoriesK   s7    	

  	EC.(D,>se*DD(	Er   c                 (    d|v sJ d|v sJ d|v sJ y)u)   도입 가치 평가가 있어야 한다.u   상u   중u   하Nr   r%   s     r   test_has_value_ratingsz8TestHermesAuditReportCompleteness.test_has_value_ratingsZ   s,    &&&&&&&&&r   c                     d|v sJ y)u,   도입 난이도 평가가 있어야 한다.u	   난이도Nr   r%   s     r   test_has_difficulty_ratingsz=TestHermesAuditReportCompleteness.test_has_difficulty_ratings`   s     n,,,r   c                     d|v sd|v sJ yy)u5   우리 시스템과의 비교표가 있어야 한다.u   우리 시스템u   비교Nr   r%   s     r   test_has_comparison_tablesz<TestHermesAuditReportCompleteness.test_has_comparison_tablese   s    !^3x>7QQQ7Q3r   c                 D    |j                  d      }|dk\  s
J d|        y)u1   항목 수가 충분해야 한다 (최소 50개).z### 2   z"Expected at least 50 items, found N)count)r   r"   
item_counts      r   test_item_count_sufficientz<TestHermesAuditReportCompleteness.test_item_count_sufficienti   s/     $))&1
RR#Ej\!RRr   c                     d|v sd|v sJ yy)u)   구현 방식 설명이 있어야 한다.u   구현 방식u   구현Nr   r%   s     r   test_has_implementation_detailszATestHermesAuditReportCompleteness.test_has_implementation_detailso   r8   r   )r   r   r   r   r9   r:   r;   r"   rB   rD   rF   rH   rM   rO   r   r   r   r=   r=   C   s    '^^' ' 'Ec Ed E'S 'T '-# -$ -
R R RS S SOc Od Or   r=   c                       e Zd ZdZej
                  defd       ZdeddfdZdeddfdZ	deddfdZ
deddfd	Zdeddfd
ZdeddfdZdeddfdZdeddfdZy)TestHermesAuditKeyConceptsu"   핵심 개념 포함 여부 검증r   c                 4    t         dz  }|j                         S r    r!   r   s     r   r"   z)TestHermesAuditKeyConcepts.report_contentw   r#   r   r"   Nc                 6    d|v sd|j                         v sJ yy)u8   프롬프트 인젝션 탐지가 언급되어야 한다.u	   인젝션	injectionNlowerr%   s     r   )test_prompt_injection_detection_mentionedzDTestHermesAuditKeyConcepts.test_prompt_injection_detection_mentioned|   s&    n,~?S?S?U0UUU0U,r   c                 6    d|v sd|j                         v sJ yy)u.   컨텍스트 압축이 언급되어야 한다.u   압축compressNrU   r%   s     r   "test_context_compression_mentionedz=TestHermesAuditKeyConcepts.test_context_compression_mentioned   &    >)Z>;O;O;Q-QQQ-Q)r   c                 $    d|v sd|v sd|v sJ yyy)u1   Frozen Snapshot 패턴이 언급되어야 한다.FrozenSnapshotu	   스냅샷Nr   r%   s     r   test_frozen_snapshot_mentionedz9TestHermesAuditKeyConcepts.test_frozen_snapshot_mentioned   s(    >)Z>-I[\jMjjjMj-I)r   c                     d|v sd|v sJ yy)u&   FTS5 검색이 언급되어야 한다.FTS5u   전문 검색Nr   r%   s     r   test_fts5_search_mentionedz5TestHermesAuditKeyConcepts.test_fts5_search_mentioned   s    '?n+LLL+L'r   c                 6    d|j                         v sd|v sJ yy)u+   스킬 시스템이 언급되어야 한다.skillu   스킬NrU   r%   s     r   test_skill_system_mentionedz6TestHermesAuditKeyConcepts.test_skill_system_mentioned   s&    ...00H4NNN4N0r   c                 @    d|v sd|v sd|j                         v sJ yyy)u4   서브에이전트 위임이 언급되어야 한다.u   서브에이전트u   위임delegateNrU   r%   s     r   "test_subagent_delegation_mentionedz=TestHermesAuditKeyConcepts.test_subagent_delegation_mentioned   s2    #~5^9SWaeseyeye{W{{{W{9S5r   c                 6    d|v sd|j                         v sJ yy)u(   보안 스캔이 언급되어야 한다.u   보안securityNrU   r%   s     r    test_security_scanning_mentionedz;TestHermesAuditKeyConcepts.test_security_scanning_mentioned   r[   r   c                     d|v sd|v sJ yy)u%   요약 테이블이 있어야 한다.u   가치 '상'u
   가치 상Nr   r%   s     r   test_summary_table_existsz4TestHermesAuditKeyConcepts.test_summary_table_exists   s    /<>3QQQ3Q/r   )r   r   r   r   r9   r:   r;   r"   rW   rZ   r_   rb   re   rh   rk   rm   r   r   r   rQ   rQ   t   s    ,^^' ' 'V VPT VR R RkS kT kM M MO# O$ O| | |Rs Rt RR R Rr   rQ   )r   ospathlibr   r9   environgetr	   r   r   r=   rQ   r   r   r   <module>rr      sb   
 
  "**..!13HIJ
F F "O "OJ.O .Ob&R &Rr   