
    lTj                     \   d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 ej
                            d  e ej        e                                          j        d                              d dlmZmZmZmZ  G d dej                  Zedk    r ej                     dS dS )    N)mock   )DEFAULT_HOSTDEFAULT_PORTcreate_serverresolve_bind_addressc            
           e Zd Zed             Zed             Zddedededz  dedz  fd	Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )ServerTestCasec                    t          j                    | _        t          j                    | _        t          j        | j        j                   t          ddd          5 }|	                    d           d d d            n# 1 swxY w Y   t          dd          | _        | j        j        d         | _        t          j        | j        j        d	
          | _        | j                                         d S )Nz
index.htmlwutf-8)encodingok	127.0.0.1r   r   T)targetdaemon)tempfileTemporaryDirectorytemp_dirosgetcwdoriginal_cwdchdirnameopenwriter   serverserver_addressport	threadingThreadserve_foreverthreadstart)clsfs     1/opt/self-improvement-portal/tests/test_server.py
setUpClasszServerTestCase.setUpClass   s   2449;;
"###,g666 	!GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	";22
:,Q/%SZ-EdSSS

s   !BB
Bc                    | j                                          | j                                          | j                            d           t          j        | j                   | j        	                                 d S )N   timeout)
r   shutdownserver_closer#   joinr   r   r   r   cleanup)r%   s    r'   tearDownClasszServerTestCase.tearDownClass   sm    

!!!
"""
!"""    GETNpathmethodbodyheadersc                    t           j                            d| j        d          }|                    ||||pi            |                                }|                                }|                                 ||fS )Nr   r*   r+   )r6   r7   )httpclientHTTPConnectionr   requestgetresponsereadclose)selfr4   r5   r6   r7   connresponses          r'   r<   zServerTestCase.request%   ss    {))+ty!)LLVTgmDDD##%%}}

~r2   c                 8   |                      d          \  }}|                     |j        d           |                     |                    d          d           |                     t	          j        |                    d                    ddi           d S )Nz/health   Content-Typezapplication/json; charset=utf-8r   statusr   )r<   assertEqualrF   	getheaderjsonloadsdecoder@   rB   r6   s      r'   test_health_endpointz#ServerTestCase.test_health_endpoint-   s    i00$#...++N;;=^___DKK$8$899Hd;KLLLLLr2   c                 l    |                      d          \  }}|                     |j        d           d S )Nz/missingi  )r<   rG   rF   )r@   rB   _s      r'   test_not_foundzServerTestCase.test_not_found3   s5    ll:..!#.....r2   c                     |                      d          \  }}|                     |j        d           |                     d|           d S )Nz/index.htmlrD   s   ok)r<   rG   rF   assertInrL   s      r'   test_static_file_servedz&ServerTestCase.test_static_file_served7   sI    m44$#...eT"""""r2   c                    t           j                            t          j        i d          5  t                      \  }}d d d            n# 1 swxY w Y   |                     |t                     |                     |t                     d S )NT)clear)	r   patchdictr   environr   rG   r   r   )r@   hostr   s      r'   test_default_bind_addressz(ServerTestCase.test_default_bind_address<   s    Z__RZ4_88 	0 	0-//JD$	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0|,,,|,,,,,s   AAAc                    dddd}|                      ddt          j        |                              d          dd	i
          \  }}|                     |j        d           t          j        |                    d                    }|                     d|           |                     |d         d         |d                    |                     d|d                    |                     d|d                    d S )NCaseyzAdd filtersz+Add status and owner filters to the portal.	requestertitledetails/api/suggestionsPOSTr   rE   application/jsonr5   r6   r7      
suggestionr^   iddoneAt	r<   rI   dumpsencoderG   rF   rJ   rK   rR   r@   payloadrB   r6   datas        r'   test_submit_suggestionz%ServerTestCase.test_submit_suggestionB   s    "D
 

 G$$++G44#%78	 & 
 
$ 	#...z$++g..//lD)))l+K8'+:NOOOdD.///h\ 233333r2   c                 H   dddd}|                      ddt          j        |                              d          dd	i
          \  }}|                     |j        d           t          j        |                    d                    }|                     d|           d S )Nr\    zMissing titler]   ra   rb   r   rE   rc   rd   i  errorri   rl   s        r'   !test_submit_suggestion_validationz0ServerTestCase.test_submit_suggestion_validationU   s     '"QQG$$++G44#%78	 & 
 
$ 	#...z$++g..//gt$$$$$r2   c                 $   dddd|                      ddt          j                                      d          dd	i
          \  }}|                     |j        d           |                      d          \  }}|                     |j        d           t          j        |                    d                    }|                     |d         d           | 	                    t          fd|d         D                                  d S )NPriyazImprove mobile spacingz1Tighten paddings and reduce card width on phones.r]   ra   rb   r   rE   rc   rd   re   rD   countr   c              3   V   K   | ]#}|                     d           d          k    V  $dS )r_   Nget).0itemrm   s     r'   	<genexpr>z7ServerTestCase.test_list_suggestions.<locals>.<genexpr>s   s9      bbdDHHW--1AAbbbbbbr2   suggestions)r<   rI   rj   rk   rG   rF   rJ   rK   assertGreaterEqual
assertTrueany)r@   create_responserO   rB   r6   rn   rm   s         @r'   test_list_suggestionsz$ServerTestCase.test_list_suggestionsa   s    -J
 

 "\\G$$++G44#%78	 * 
 
 	/555&899$#...z$++g..//Wq111bbbbdS`Nabbbbbcccccr2   c           	      X   dddd}|                      ddt          j        |                              d          dd	i
          \  }}|                     |j        d           t          j        |                    d                    d         |                      ddt          j        dd         i                              d          dd	i
          \  }}|                     |j        d           |                      d          \  }}|                     |j        d           t          j        |                    d                    d         }|                     t          fd|D                                  |                      d          \  }	}
|                     |	j        d           t          j        |
                    d                    d         }t          fd|D                       }|                     |                    d                     d S )NChriszComplete mezMark me done.r]   ra   rb   r   rE   rc   rd   re   rf   z/api/suggestions/mark-donerg   rD   r}   c              3   V   K   | ]#}|                     d           d          k    V  $dS rg   Nrx   rz   r{   createds     r'   r|   zSServerTestCase.test_mark_suggestion_done_hides_from_active_queue.<locals>.<genexpr>   s6      PPTXXd^^wt}<PPPPPPr2   z/api/suggestions?includeDone=1c              3   Z   K   | ]%}|                     d           d          k    !|V  &dS r   rx   r   s     r'   r|   zSServerTestCase.test_mark_suggestion_done_hides_from_active_queue.<locals>.<genexpr>   s<      WW$txx~~QU7V7V7V7V7V7VWWr2   rh   )r<   rI   rj   rk   rG   rF   rJ   rK   assertFalser   nextassertIsNotNonery   )r@   rm   r   create_bodydone_responserO   active_responseactive_bodyactiveall_responseall_body	all_items	done_itemr   s                @r'   1test_mark_suggestion_done_hides_from_active_queuez@ServerTestCase.test_mark_suggestion_done_hides_from_active_queueu   s$    "&
 

 (,||G$$++G44#%78	 (4 (
 (
$ 	/555*[//8899,G<<(T74=12299'BB#%78	 ( 
 
q 	-s333'+||4F'G'G$/555K..w7788GPPPPPPPPPQQQ!%.N!O!Oh,c222Jxw7788G	WWWW)WWWWW	Y]]84455555r2   )r3   NN)__name__
__module____qualname__classmethodr(   r1   strbytesrW   r<   rM   rP   rS   rZ   ro   rs   r   r    r2   r'   r
   r
      s       	 	 [	   [ C  EDL Z^aeZe    M M M/ / /# # #
- - -4 4 4&
% 
% 
%d d d( 6  6  6  6  6r2   r
   __main__)http.clientr9   rI   r   pathlibr   sysr    unittestr   r4   insertr   Path__file__resolveparentsr   r   r   r   r   TestCaser
   r   mainr   r2   r'   <module>r      s%        				   



            33|w|H--5577?BCC D D D R R R R R R R R R R R RE6 E6 E6 E6 E6X& E6 E6 E6P zHMOOOOO r2   