
    Ui                        d Z ddlmZ ddlZddlmc mZ ddl	m
Z
 ddlZddlmZmZmZmZ  e
d          Z G d d          Z G d	 d
          Z G d d          Z G d d          ZdS )zTests for scenario presets.    )annotationsN)Path)BUILTIN_SCENARIOSScenariolist_scenariosload_scenarioagentsc                  "    e Zd ZdZddZddZdS )TestScenariozTests for Scenario model.returnNonec                   t          ddddg          }|j        }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}|j
        }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}|j        }ddg}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}|j        }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}|j        }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}dS )z/Scenario stores name, description, agents list.testzA test scenario	architectdevops)namedescriptionr	   ==z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)sspy0py2py5assert %(py7)spy7N)z3%(py2)s
{%(py2)s = %(py0)s.description
} == %(py5)s)z.%(py2)s
{%(py2)s = %(py0)s.agents
} == %(py5)s
   z<%(py2)s
{%(py2)s = %(py0)s.suggested_max_rounds
} == %(py5)s z4%(py2)s
{%(py2)s = %(py0)s.context_hint
} == %(py5)s)r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   r	   suggested_max_roundscontext_hintselfr   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s          ;/root/projects/multi-agents-meeting/tests/test_scenarios.pytest_scenario_creationz#TestScenario.test_scenario_creation   s   )*
 
 

 vvvqqv}1 11} 11111111111} 1111111111111q11111q111111}1111 1111111111111111111111111111x2K22x22222222222x2222222222222q22222q222222x22222222222222222222222222222222%++%++++++++++%++++++++++++q+++++q++++++%+++++++++++++++++++++++++++++++~##~##########~############q#####q######~#################################    c                4   t          dddgdd          }|j        }d}||k    }|st          j        d|fd||f          d	t	          j                    v st          j        |          rt          j        |          nd	t          j        |          t          j        |          d
z  }dd|iz  }t          t          j	        |                    dx}x}}|j
        }d}||k    }|st          j        d|fd||f          d	t	          j                    v st          j        |          rt          j        |          nd	t          j        |          t          j        |          d
z  }dd|iz  }t          t          j	        |                    dx}x}}dS )z,Scenario with all optional fields populated.fullzFull scenarior      zProvide a product brief)r   r   r	   r*   r+   r   r   r   r   r   r   Nr!   )r   r*   r"   r#   r$   r%   r&   r'   r(   r)   r+   r,   s          r3   test_scenario_with_all_fieldsz*TestScenario.test_scenario_with_all_fields   s   '=!#2
 
 
 %++%++++++++++%++++++++++++q+++++q++++++%+++++++++++++++++++++++++++++++~:!::~!:::::::::::~!:::::::::::::q:::::q::::::~::::!::::::::::::::::::::::::::::::r5   Nr   r   )__name__
__module____qualname____doc__r4   r9    r5   r3   r   r      sB        ##$ $ $ $
; 
; 
; 
; 
; 
;r5   r   c                  2    e Zd ZdZd	dZd	dZd	dZd	dZdS )
TestBuiltinScenariosz$Tests for built-in scenario presets.r   r   c                F   t          t                    }d}||k    }|st          j        d|fd||f          dt	          j                    v st          j        t                     rt          j        t                     nddt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d	x}x}}d	S )
z%At least one builtin scenario exists.r   >z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)slenr   r   py1py3py6zassert %(py8)spy8N)
rF   r   r"   r#   r$   r%   r&   r'   r(   r)   )r-   @py_assert2@py_assert5r/   @py_format7@py_format9s         r3    test_builtin_scenarios_not_emptyz5TestBuiltinScenarios.test_builtin_scenarios_not_empty/   s+   $%%))%))))))))))%))))))))))))s)))))s)))))))))))))$)))))$))))))%)))))))))))))))))))))))))))))))))r5   c           
        t          j                    D ]q\  }}|j        D ]b}t          t                              | d                    }t          |          }d}||k    }|st          j        d|fd||f          dt          j
                    v st          j        t                    rt          j        t                    nddt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }t          j        d| d	| d
t                     dz   d|iz  }	t          t          j        |	                    dx}x}}dsdS )z@All agents referenced in builtin scenarios exist in agents/ dir.z.*r   rC   rE   rF   matchingrG   zAgent 'z' in scenario 'z' not found in z
>assert %(py8)srK   N)r   itemsr	   list
AGENTS_DIRglobrF   r"   r#   r$   r%   r&   r'   _format_assertmsgr(   r)   )
r-   scenario_namescenario
agent_namerR   rL   rM   r/   rN   rO   s
             r3   "test_builtin_scenario_agents_existz7TestBuiltinScenarios.test_builtin_scenario_agents_exist3   ss   '8'>'@'@ 	 	#M8&o  

:0A0A0A B BCC8}} q }q(        }q                	             $     	 $      	 %    	 ()        1j 1 1 1 1$.1 1                      	 	r5   c                   d}|t           v }|st          j        d|fd|t           f          t          j        |          dt	          j                    v st          j        t                     rt          j        t                     nddz  }dd|iz  }t          t          j        |                    dx}}t           d         }d	}|j	        }||v }|st          j        d|fd
||f          t          j        |          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}}d}|j	        }||v }|st          j        d|fd
||f          t          j        |          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}}dS )z4product_review scenario exists with expected agents.product_reviewinz%(py1)s in %(py3)sr   rH   rI   assert %(py5)sr   Ngstack_commercial)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.agents
}r   )rH   rI   r   r   r   gstack_technical)
r   r"   r#   r'   r$   r%   r&   r(   r)   r	   )r-   @py_assert0rL   @py_format4r1   r   r/   r2   s           r3   test_product_review_scenarioz1TestBuiltinScenarios.test_product_review_scenario=   s   4#44444444444#44444444444444444#444444#4444444444444444444444444444./".ah."h.........."h....."...........a.....a......h...........................!-QX-!X----------!X-----!-----------Q-----Q------X-----------------------------r5   c                   d}|t           v }|st          j        d|fd|t           f          t          j        |          dt	          j                    v st          j        t                     rt          j        t                     nddz  }dd|iz  }t          t          j        |                    dx}}t           d         }|j	        }d	}||k    }|st          j        d
|fd||f          dt	          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }	t          t          j        |	                    dx}x}}dS )z-startup_pitch scenario has higher max_rounds.startup_pitchr^   r`   r   ra   rb   r   N   r   r   r   r   r   r   )
r   r"   r#   r'   r$   r%   r&   r(   r)   r*   )
r-   re   rL   rf   r1   r   r.   r/   r0   r2   s
             r3   test_startup_pitch_scenarioz0TestBuiltinScenarios.test_startup_pitch_scenarioD   s   3"33333333333"33333333333333333"333333"3333333333333333333333333333o.%++%++++++++++%++++++++++++q+++++q++++++%+++++++++++++++++++++++++++++++++r5   Nr:   )r;   r<   r=   r>   rP   r[   rg   rk   r?   r5   r3   rA   rA   ,   sj        ..* * * *   . . . ., , , , , ,r5   rA   c                  "    e Zd ZdZddZddZdS )TestLoadScenarioz!Tests for load_scenario function.r   r   c                   t          d          }t          |t                    }|sddt          j                    v st          j        t                    rt          j        t                    nddt          j                    v st          j        |          rt          j        |          nddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j	        |                    d}|j
        }d}||k    }|st          j        d|fd	||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d
z  }dd|iz  }t          t          j	        |                    dx}x}}dS )z-load_scenario returns the requested scenario.r]   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r   )r   rH   r   py4Nr   r   r   r   r   )r   ro   r   r$   r%   r"   r&   r'   r(   r)   r   r#   )r-   r   r0   @py_format5r.   r/   r1   r2   s           r3   test_load_existing_scenarioz,TestLoadScenario.test_load_existing_scenarioN   s   *++!X&&&&&&&&&&&&&&&z&&&&&z&&&&&&&&&&&&&!&&&&&!&&&&&&&&&&&&&X&&&&&X&&&&&&&&&&&&&&&&&&&&&&&&v)))v)))))))))))v)))))))))))))q)))))q))))))v))))))))))))))))))))))))))))))))))r5   c                    t          j        t                    5  t          d           ddd           dS # 1 swxY w Y   dS )z3load_scenario raises KeyError for unknown scenario.nonexistent_scenarioN)pytestraisesKeyErrorr   )r-   s    r3   %test_load_nonexistent_scenario_raisesz6TestLoadScenario.test_load_nonexistent_scenario_raisesT   s    ]8$$ 	2 	20111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   7;;Nr:   )r;   r<   r=   r>   rr   rx   r?   r5   r3   rm   rm   K   sB        ++* * * *2 2 2 2 2 2r5   rm   c                      e Zd ZdZddZdS )TestListScenariosz"Tests for list_scenarios function.r   r   c                   t                      }|t          k    }|st          j        d|fd|t          f          dt	          j                    v st          j        |          rt          j        |          nddt	          j                    v st          j        t                    rt          j        t                    nddz  }dd|iz  }t          t          j	        |                    d}dS )	z-list_scenarios returns all builtin scenarios.r   )z%(py0)s == %(py2)sresultr   )r   r   zassert %(py4)srp   N)
r   r   r"   r#   r$   r%   r&   r'   r(   r)   )r-   r|   r.   @py_format3rq   s        r3   test_list_scenarios_returns_allz1TestListScenarios.test_list_scenarios_returns_all]   s    !!***********v*************v*****v***********************************************r5   Nr:   )r;   r<   r=   r>   r~   r?   r5   r3   rz   rz   Z   s.        ,,+ + + + + +r5   rz   )r>   
__future__r   builtinsr$   _pytest.assertion.rewrite	assertionrewriter"   pathlibr   ru   src.scenariosr   r   r   r   rU   r   rA   rm   rz   r?   r5   r3   <module>r      s0   ! ! " " " " " "                      T T T T T T T T T T T T T(^^
; ; ; ; ; ; ; ;:, , , , , , , ,>2 2 2 2 2 2 2 2+ + + + + + + + + +r5   