o
    *h�j¿  ã                   @   s’   d dl Zd dlm  mZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ dd„ Zejjdd„ ƒZejjd	d
„ ƒZdd„ Zdd„ Zdd„ ZdS )é    N)Ústatus)Úget_database)Úget_session_by_idc                 C   sª  dt  ¡ jd d… › d�}| jd|ddœd�}|j}tj}||k}|sht d|fd	||f¡d
t	 
¡ v s8t |¡r=t |¡nd
t |¡dt	 
¡ v sMt t¡rRt t¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  } }}| ¡ d }dd|› �i}	| jdd|i|	d�}
|
j}tj}||k}|sÖt d|fd	||f¡dt	 
¡ v s¦t |
¡r«t |
¡ndt |¡dt	 
¡ v s»t t¡rÀt t¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  } }}|
 ¡ }d}||v }|�st d|fd||f¡t |¡dt	 
¡ v �st |¡�r	t |¡nddœ }dd|i }tt |¡ƒ‚d  }}|d }|j}d}||ƒ}|�sKdt |¡t |¡t |¡t |¡dœ }tt |¡ƒ‚d  } } }}d S )Nzshop-é   ú.comú/api/v1/tenant/registerzSession Test Store©ÚdomainÚname©Újson©ú==©zY%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_201_CREATED
}Úreg_respr   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8ÚsiteIdÚOriginúhttp://ú/api/v1/session/init©r   ÚheadersÚ	init_respÚ	sessionId©Úin)z%(py1)s in %(py3)sÚdata)Úpy1Úpy3úassert %(py5)sÚpy5Úsess_zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})r#   r$   r&   Úpy7)ÚuuidÚuuid4ÚhexÚpostÚstatus_coder   ÚHTTP_201_CREATEDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   Ú
startswith)Úclientr	   r   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Úsite_idr   r   r"   Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6Ú@py_assert4Ú@py_assert6Ú@py_format8© rF   ú3/web/html/dev/chatbot/backend/tests/test_session.pyÚtest_init_session_success   s   
þ®®~lrH   c                 Ã   sü  �dt  ¡ jd d… › d�}| jd|ddœd�}| ¡ d }d	d
|› �i}|ddddœdœ}| jd||d�}|j}tj}||k}	|	s‡t 	d|	fd||f¡dt
 ¡ v sWt |¡r\t |¡ndt |¡dt
 ¡ v slt t¡rqt t¡ndt |¡dœ }
dd|
i }tt |¡ƒ‚d  } }	}| ¡ d }tƒ }t||ƒI d H }d }||u}|sÖt 	d|fd||f¡dt
 ¡ v s»t |¡rÀt |¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  }}|d  }d}	||	k}|�s
t 	d|fd!||	f¡t |¡t |	¡d"œ }d#d$|i }
tt |
¡ƒ‚d  } }}	|d% }d}	||	k}|�s@t 	d|fd!||	f¡t |¡t |	¡d"œ }d#d$|i }
tt |
¡ƒ‚d  } }}	|d& }d}	||	k}|�svt 	d|fd!||	f¡t |¡t |	¡d"œ }d#d$|i }
tt |
¡ƒ‚d  } }}	d S )'Nzuser-r   r   r   zUser Identity Storer   r   r   r   r   Úusr_test_101zJohn Visitorzjohn.visitor@example.com)Úidr
   Úemail)r   Úuserr   r   r   r   r   r   r   r   r   r   ©úis not©z%(py0)s is not %(py3)sÚsession_doc©r   r$   r%   r&   ÚuserId©z%(py1)s == %(py4)s©r#   r   úassert %(py6)sr   ÚuserNameÚ	userEmail©r)   r*   r+   r,   r   r-   r   r.   r/   r0   r1   r2   r3   r4   r5   r6   r   r   )r8   r	   r   r>   r   Úuser_payloadr   r9   r:   r;   r<   r=   Ú
session_idÚdbrP   r@   rA   rB   r?   Ú@py_format5rF   rF   rG   Ú%test_init_session_with_logged_in_user   s.   €
þýþ®xllpr]   c                 Ã   s  �dt  ¡ jd d… › d�}| jd|ddœd�}| ¡ d }d	|› �d
dœ}| jdd|i|d�}|j}tj}||k}|s�t 	d|fd||f¡dt
 ¡ v sQt |¡rVt |¡ndt |¡dt
 ¡ v sft t¡rkt t¡ndt |¡dœ }	dd|	i }
tt |
¡ƒ‚d  } }}| ¡ d }tƒ }t||ƒI d H }d }||u}|sÐt 	d|fd||f¡dt
 ¡ v sµt |¡rºt |¡ndt |¡dœ }dd|i }tt |¡ƒ‚d  }}|d }d}||k}|�st 	d|fd||f¡t |¡t |¡dœ }d d!|i }	tt |	¡ƒ‚d  } }}d S )"Nzip-r   r   r   zIP Capture Storer   r   r   r   z203.0.113.195, 70.41.3.18)r   zX-Forwarded-Forr   r   r   r   r   r   r   r   r   r   rM   rO   rP   rQ   r%   r&   Ú	ipAddressz203.0.113.195rS   rT   rU   r   rX   )r8   r	   r   r>   r   r   r9   r:   r;   r<   r=   rZ   r[   rP   r@   rA   rB   r?   r\   rF   rF   rG   Ú,test_init_session_x_forwarded_for_ip_capture8   s"   €
þþ®xpr_   c                 C   s<  ddi}| j dddi|d�}|j}tj}||k}|s_t d|fd||f¡d	t ¡ v s/t |¡r4t 	|¡nd	t 	|¡d
t ¡ v sDt t¡rIt 	t¡nd
t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}d}| ¡ d }||v }	|	s–t d|	fd||f¡t 	|¡t 	|¡dœ }
dd|
i }t
t |¡ƒ‚d  } }	}d S )Nr   úhttp://example.comr   r   Úsite_nonexistent_999r   r   )z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_404_NOT_FOUND
}Úresponser   r   r   r   zTenant not foundÚdetailr    ©z%(py1)s in %(py4)srT   rU   r   )r,   r-   r   ÚHTTP_404_NOT_FOUNDr/   r0   r1   r2   r3   r4   r5   r6   r   )r8   r   rb   r9   r:   r;   r<   r=   r?   r@   r\   rF   rF   rG   Ú!test_init_session_unknown_site_idO   s   ®rrf   c                 C   sv  dt  ¡ jd d… › d�}| jd|ddœd�}| ¡ d }d	d
i}| jdd|i|d�}|j}tj}||k}|s|t 	d|fd||f¡dt
 ¡ v sLt |¡rQt |¡ndt |¡dt
 ¡ v sat t¡rft t¡ndt |¡dœ }	dd|	i }
tt |
¡ƒ‚d  } }}d}| ¡ d }||v }|s³t 	d|fd||f¡t |¡t |¡dœ }dd|i }	tt |	¡ƒ‚d  } }}d S )Nzauthorized-r   r   r   zAuthorized Storer   r   r   r   z http://unauthorized-attacker.comr   r   r   )z[%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_403_FORBIDDEN
}rb   r   r   r   r   znot authorizedrc   r    rd   rT   rU   r   )r)   r*   r+   r,   r   r-   r   ÚHTTP_403_FORBIDDENr/   r0   r1   r2   r3   r4   r5   r6   )r8   r	   r   r>   Úunauthorized_headersrb   r9   r:   r;   r<   r=   r?   r@   r\   rF   rF   rG   Ú%test_init_session_unauthorized_originU   s   
þ®rri   c                 C   sÎ   ddi}| j dddi|d�}|j}tj}||k}|s_t d|fd||f¡d	t ¡ v s/t |¡r4t 	|¡nd	t 	|¡d
t ¡ v sDt t¡rIt 	t¡nd
t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}d S )Nr   r`   r   r   Ú r   r   )zf%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py6)s
{%(py6)s = %(py4)s.HTTP_422_UNPROCESSABLE_ENTITY
}rb   r   r   r   r   )r,   r-   r   ÚHTTP_422_UNPROCESSABLE_ENTITYr/   r0   r1   r2   r3   r4   r5   r6   )r8   r   rb   r9   r:   r;   r<   r=   rF   rF   rG   Ú"test_init_session_validation_errorc   s   ²rl   )Úbuiltinsr1   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter/   r)   ÚpytestÚfastapir   Úapp.databaser   Ú#app.repositories.session_repositoryr   rH   ÚmarkÚanyior]   r_   rf   ri   rl   rF   rF   rF   rG   Ú<module>   s   " 

