
    P1i                         d dl mZ d dlmZ d dlmZ d dlmZ d dl mZ d dl	m
Z
 d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlZ e       Z G d de      Zy)    )TestCase)site)get_user_model)timezone)RequestFactory)FallbackStorage)reverse)datetime)Person)PersonAdminreset_ai_analysisNc                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)PersonAdminTestCasez*Test cases for Person admin functionality.c           	         t         j                  j                  dddd      | _        t        j                  j                  dt        ddd      t        d	d
d
      | j                        | _        ddddddd| j                  _	        t        j                         | j                  _        d| j                  _        | j                  j                          t        t        t               | _        t%               | _        y)zSet up test data.
1000000001ztest@example.comTestUser)phoneemail
first_name	last_namezTest Personi     
   r   name
birth_date
birth_time
created_byzTest personality analysiszTest career analysis)personality_analysiscareer_wealthgroqzllama-3.3-70b-versatilezTest prompt)bazi_analysisprovidermodelprompt	completedN)r   objectscreate_useruserr   creater
   r   personai_analysisr   nowanalysis_timestampanalysis_statussaver   r   adminr   factory)selfs    >/home/cursorai/projects/iching/bazi/tests/test_person_admin.pysetUpzPersonAdminTestCase.setUp   s    LL,,$	 - 
	 nn++D!Q'B1~yy	 , 
 )D!7 .##
 *2&&1# .
%'    c                     | j                   j                  d      }| j                  |_        t        |di        t	        |      }t        |d|       |S )z5Create a proper request object with messages support.z/admin/session	_messages)r3   postr*   setattrr   )r4   requestmessagess      r5   _get_requestz PersonAdminTestCase._get_request3   sH    ,,##I.yyB'"7+h/r7   c                    | j                  | j                  j                         | j                  | j                  j                         | j	                  | j                  j
                  d       t        j                  j                  | j                  j                        }| j                         }t        | j                  ||       | j                  j                          | j                  | j                  j                         | j                  | j                  j                         | j                  | j                  j
                         y)zKTest that the reset AI analysis action properly clears the analysis fields.r'   )idN)assertIsNotNoner,   r-   r/   assertEqualr0   r   r(   filterrA   r?   r   r2   refresh_from_dbassertIsNone)r4   querysetr=   s      r5   test_reset_ai_analysis_actionz1PersonAdminTestCase.test_reset_ai_analysis_action=   s     	T[[445T[[;;<44kB >>((DKKNN(; ##% 	$**gx8 	##% 	$++112$++889$++556r7   c           	         t         j                  j                  dt        ddd      t	        ddd      | j
                        }ddd	d
|_        t        j                         |_	        d|_
        |j                          t         j                  j                  | j                  j                  |j                  g      }| j                         }t!        | j"                  ||       | j                  j%                          |j%                          | j'                  | j                  j                         | j'                  | j                  j                         | j'                  | j                  j                         | j'                  |j                         | j'                  |j                         | j'                  |j                         y)z6Test that the reset action works for multiple persons.zTest Person 2i        r   r   zAnother test analysisopenaizgpt-4o)r#   r$   r%   r'   )id__inN)r   r(   r+   r
   r   r*   r-   r   r.   r/   r0   r1   rD   r,   rA   r?   r   r2   rE   rF   )r4   person2rG   r=   s       r5   .test_reset_ai_analysis_action_multiple_personszBPersonAdminTestCase.test_reset_ai_analysis_action_multiple_personsU   sd    ..'' D!Q'B1~yy	 ( 
 5 

 &.\\^""- >>((0L(M ##% 	$**gx8 	##%! 	$++112$++889$++556'--.'445'112r7   c                     g }| j                   j                  D ];  }t        |d      r|j                  |j                         +|j                  |       = | j                  d|       | j                  d|       y)z4Test that the admin actions are properly registered.__name__generate_ai_analysisr   N)r2   actionshasattrappendrQ   assertIn)r4   action_namesactions      r5   !test_admin_actions_are_registeredz5PersonAdminTestCase.test_admin_actions_are_registered~   sg     jj((Fvz*##FOO4##F+	 )
 	,l;)<8r7   c                 *   | j                   j                  | j                        }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  | j                  j                  |       y)z?Test that the reset button appears when person has AI analysis.zReset AI Analysisu   🗑️href=zonclick=N)r2   reset_ai_analysis_buttonr,   rV   r   r4   button_htmls     r5   +test_reset_ai_analysis_button_with_analysisz?PersonAdminTestCase.test_reset_ai_analysis_button_with_analysis   sm    jj99$++F 	);7i-g{+j+.dkk&&4r7   c                     d| j                   _        | j                   j                          | j                  j	                  | j                         }| j                  d|       | j                  d|       y)zATest that no reset button appears when person has no AI analysis.NzNo AI analysis to resetr[   )r,   r-   r1   r2   r\   rV   assertNotInr]   s     r5   .test_reset_ai_analysis_button_without_analysiszBPersonAdminTestCase.test_reset_ai_analysis_button_without_analysis   sY     #'jj99$++F 	/=+.r7   c           	          t        dt        ddd      t        ddd      | j                        }| j                  j                  |      }| j                  d|       | j                  d|       y	)
zETest that reset button shows appropriate message for unsaved objects.zUnsaved Personi        r   r   zSave the person firstr[   N)r   r
   r   r*   r2   r\   rV   ra   )r4   
new_personr^   s      r5   (test_reset_ai_analysis_button_new_objectz<PersonAdminTestCase.test_reset_ai_analysis_button_new_object   sf     !D!Q'B1~yy	

 jj99*E 	-{;+.r7   c                     | j                   j                         }|D cg c]  }t        |d      s|j                   }}| j	                  d|       yc c}w )z6Test that the custom reset URL is properly registered.r   bazi_person_reset_ai_analysisN)r2   get_urlsrT   r   rV   )r4   urlsurl	url_namess       r5   test_custom_urls_are_registeredz3PersonAdminTestCase.test_custom_urls_are_registered   sL    zz""$)-F#f1ESXX	F 	5yA Gs
   AAN)rQ   
__module____qualname____doc__r6   r?   rH   rO   rY   r_   rb   rg   rn    r7   r5   r   r      s5    4(B70'3R
9	5
// Br7   r   )django.testr   django.contrib.admin.sitesr   django.contrib.authr   django.utilsr   r   (django.contrib.messages.storage.fallbackr   django.urlsr	   datetimer
   r   bazi.modelsr   
bazi.adminr   r   jsonr   r   rr   r7   r5   <module>r}      s>      + . ! & D    5 hB( hBr7   