
    i-                         d Z ddlZddlmc mZ ddlZddlZddl	Z
ddlZ
ddlZ
 ej        e          j        j                                        ZdZd ZddZd Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )zY
Sprint 11 Tests: multi-provider model support, streaming smoothness, routes extraction.
    Nzhttp://127.0.0.1:8788c                     t           j                            t          | z   d          5 }t	          j        |                                          |j        fcd d d            S # 1 swxY w Y   d S )N
   timeout)urllibrequesturlopenBASEjsonloadsreadstatus)pathrs     0/home/ubuntu/hermes-webui/tests/test_sprint11.pygetr   	   s    			tR		8	8 .Az!&&((##QX-. . . . . . . . . . . . . . . . . .s   -A$$A(+A(c                    t          j        |pi                                           }t          j                            t          | z   |ddi          }	 t          j                            |d          5 }t          j        |	                                          |j
        fcd d d            S # 1 swxY w Y   d S # t          j        j        $ r7}t          j        |	                                          |j        fcY d }~S d }~ww xY w)NzContent-Typezapplication/json)dataheadersr   r   )r   dumpsencoder   r   Requestr
   r	   r   r   r   error	HTTPErrorcode)r   bodyr   reqr   es         r   postr      s?   :djb!!((**D
.
 
 4+9;M*N ! P PC,^##C#44 	2:affhh''1	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2<! , , ,z!&&((##QV+++++++,sB   !B> 7-B1$B> 1B55B> 8B59B> >D	,D>D	D	c                  t   t          d          \  } }d}||k    }|st          j        d|fd||f          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}}d	S )
z)GET /api/models returns a valid response./api/models   ==)z%(py0)s == %(py3)sr   )py0py3assert %(py5)spy5N)	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)dr   @py_assert2@py_assert1@py_format4@py_format6s         r    test_models_endpoint_returns_200r6      s    M""IAv6S=6S66S    c                     t          d          \  } }d}|| v }|st          j        d|fd|| f          t          j        |          dt	          j                    v st          j        |           rt          j        |           nddz  }dd|iz  }t          t          j        |                    d	x}}d
}|| v }|st          j        d|fd|| f          t          j        |          dt	          j                    v st          j        |           rt          j        |           nddz  }dd|iz  }t          t          j        |                    d	x}}d}|| v }|st          j        d|fd|| f          t          j        |          dt	          j                    v st          j        |           rt          j        |           nddz  }dd|iz  }t          t          j        |                    d	x}}d	S )z=Response includes groups, default_model, and active_provider.r!   groupsinz%(py1)s in %(py3)sr1   py1r&   r'   r(   Ndefault_modelactive_provider)	r   r)   r*   r.   r+   r,   r-   r/   r0   )r1   _@py_assert0r2   r4   r5   s         r   test_models_has_required_fieldsrC      sa   }DAq8q=8q8qq?a?a?aa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r7   c                  
   t          d          \  } }| d         }t          |t                    }|sddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j	        |                    dx}}| d         }t          |          }d}||k    }|st          j        d	|fd
||f          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    dx}x}x}}| d         D ]9}
d}||
v }|st          j        d|fd||
f          t          j        |          dt          j                    v st          j        |
          rt          j        |
          nddz  }dd|iz  }t          t          j	        |                    dx}}d}||
v }|st          j        d|fd||
f          t          j        |          dt          j                    v st          j        |
          rt          j        |
          nddz  }dd|iz  }t          t          j	        |                    dx}}|
d         }t          |t                    }|sddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j	        |                    dx}}|
d         }t          |          }d}||k    }|st          j        d	|fd
||f          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    dx}x}x}};dS )z-Each group has provider name and models list.r!   r9   5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}
isinstancelistr%   py2r&   r(   Nr   >z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)slenr%   rI   py4py7assert %(py9)spy9providerr:   r<   groupr=   r'   r(   models)r   rF   rG   r+   r,   r)   r-   r.   r/   r0   rM   r*   )r1   rA   r3   @py_assert4r5   @py_assert3@py_assert6@py_assert5@py_format8@py_format10rT   rB   r2   r4   s                 r   test_models_groups_structurer\   &   s   }DAqk(:k4(((((((((((((((:(((((:((((((k(((((((((((4(((((4(((((((((((((((((((((((((({3{aaa33{a8 ( ("zU""""""""""zU"""""z"""""""""""U"""""U""""""""""""""""""""""""""" x5          x5     x           5     5                           /0z/4000000000000000z00000z000000/00000000000400000400000000000000000000000000?'s?##'a'#a''''''''''#a''''''''''''s'''''s''''''?''''#''''a''''''''''''''''''''''''''''''	( (r7   c            	      
   t          d          \  } }| d         D ]6}|d         D ])}d}||v }|st          j        d|fd||f          t          j        |          dt	          j                    v st          j        |          rt          j        |          nddz  }d	d
|iz  }t          t          j        |                    dx}}d}||v }|st          j        d|fd||f          t          j        |          dt	          j                    v st          j        |          rt          j        |          nddz  }d	d
|iz  }t          t          j        |                    dx}}|d         }t          |t                    }	|	sddt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |	          dz  }t          t          j        |                    dx}}	|d         }t          |t                    }	|	sddt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |	          dz  }t          t          j        |                    dx}}	|d         }t          |          }
d}|
|k    }|st          j        d|fd|
|f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |
          t          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}
x}}|d         }t          |          }
d}|
|k    }|st          j        d|fd|
|f          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |
          t          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}
x}}+8dS )zEach model has id and label.r!   r9   rU   idr:   r<   modelr=   r'   r(   NlabelrE   rF   strrH   r   rJ   rL   rM   rN   rQ   rR   )r   r)   r*   r.   r+   r,   r-   r/   r0   rF   ra   rM   )r1   rA   rT   r_   rB   r2   r4   r5   r3   rV   rW   rX   rY   rZ   r[   s                  r   test_models_model_structurerb   1   s   }DAq8 + +8_ 	+ 	+E 45=         45     4           5     5                           #7e##########7e#####7###########e#####e############################Dk/:k3///////////////://///://////k///////////3/////3//////////////////////////#Gn2:nc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2n22222222222c22222c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T{'3{##'a'#a''''''''''#a''''''''''''3'''''3''''''{''''#''''a'''''''''''''''''''''''''''''W~*3~&&**&**********&************3*****3******~****&**********************************	++ +r7   c                  
   t          d          \  } }| d         }t          |t                    }|sddt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j	        |                    dx}}| d         }t          |          }d}||k    }|st          j        d	|fd
||f          dt          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    dx}x}x}}dS )z+Default model should be a non-empty string.r!   r?   rE   rF   ra   rH   Nr   rJ   rL   rM   rN   rQ   rR   )r   rF   ra   r+   r,   r)   r-   r.   r/   r0   rM   r*   )
r1   rA   r3   rV   r5   rW   rX   rY   rZ   r[   s
             r   #test_models_default_model_not_emptyrd   =   s   }DAq(.:(#...............:.....:......(...........#.....#..........................!&3!""&Q&"Q&&&&&&&&&&"Q&&&&&&&&&&&&3&&&&&3&&&&&&!&&&&"&&&&Q&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&r7   c                  p   t          d          \  } }d | d         D             }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        |          rt          j        |          ndt          j        |          t          j        |          d	z  }d
d|iz  }t          t          j	        |                    dx}x}}dS )zDAt least one provider group should exist (fallback list at minimum).r!   c                     g | ]
}|d          S )rS    ).0gs     r   
<listcomp>z5test_models_at_least_one_provider.<locals>.<listcomp>F   s    4441:444r7   r9      )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)srM   	providers)r%   r>   r&   py6zassert %(py8)spy8N)
r   rM   r)   r*   r+   r,   r-   r.   r/   r0   )r1   rA   rm   r2   rY   rV   @py_format7@py_format9s           r   !test_models_at_least_one_providerrr   C   sK   }DAq44(444Iy>>Q>Q>Q33yy>Qr7   c                     t          d          \  } }| d         D ]G}d |d         D             }t          |          }t          |          }t          |          }||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        |          rt          j        |          ndt          j        |          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	dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          d
z  }t          j	        d|d          d|           dz   d|iz  }	t          t          j        |	                    dx}x}x}}IdS )z9Model IDs should not be duplicated within a single group.r!   r9   c                     g | ]
}|d          S )r^   rg   )rh   ms     r   rj   z0test_models_no_duplicate_ids.<locals>.<listcomp>M   s    0001qw000r7   rU   r#   )zn%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py11)s
{%(py11)s = %(py5)s(%(py9)s
{%(py9)s = %(py6)s(%(py7)s)
})
}rM   idsset)r%   r>   r&   r(   rn   rP   rR   py11zDuplicate model IDs in rS   z: z
>assert %(py13)spy13N)r   rM   rw   r)   r*   r+   r,   r-   r.   _format_assertmsgr/   r0   )
r1   rA   rT   rv   r2   @py_assert8@py_assert10rV   @py_format12@py_format14s
             r   test_models_no_duplicate_idsr   I   sd   }DAq8 _ _00h0003xx^s3xx^3x==^x=(^^^^^^^^^x=^^^^^^^^^^^^s^^^^^s^^^^^^^^^^^^^3^^^^^3^^^^^^x^^^^^^^^^^^3^^^^^3^^^^^^^^^^^^^s^^^^^s^^^^^^^^^^^^^3^^^^^3^^^^^^x^^^^=^^^^^^^^*^E*DU*^*^Y\*^*^^^^^^^^^^^^^^^^^^^^^^^^^^^^_ _r7   c                  l   t          di           \  } }| d         d         }	 d}t          d||| d         d         d           t          d|           \  }}|d         d	         }||k    }|st          j        d
|fd||f          t          j        |          dt          j                    v st          j        |          rt          j        |          nddz  }dd|iz  }t          t          j	        |                    dx}}t          dd|i           dS # t          dd|i           w xY w)zGA session with a model not in the dropdown should still load correctly.z/api/session/newsession
session_idzcustom-provider/test-model-999z/api/session/update	workspace)r   r_   r   z/api/session?session_id=r_   r#   )z%(py1)s == %(py3)scustom_modelr=   r'   r(   Nz/api/session/delete)
r   r   r)   r*   r.   r+   r,   r-   r/   r0   )	r1   rA   sidr   d2rB   r2   r4   r5   s	            r   %test_session_preserves_unlisted_modelr   P   s    "B''DAq
I,|
$C97"!9k2%
 %
 	 	 	 4s4455A)}W%5%5555555555%55555%5555555555555555555555555555555555555555555"\3$788888"\3$78888s   C(D D3)N)__doc__builtinsr+   _pytest.assertion.rewrite	assertionrewriter)   r   pathliburllib.errorr   urllib.requesturllib.parsePath__file__parentresolve	REPO_ROOTr
   r   r   r6   rC   r\   rb   rd   rr   r   r   rg   r7   r   <module>r      s8                 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @GL"")088::	. . ., , , ,  
" " "	( 	( 	(
+ 
+ 
+' ' '  _ _ _9 9 9 9 9r7   