
    P1i                       d Z ddlmZmZ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 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 ddlmZ ddlm Z m!Z!  e       Z" G d de      Z# G d de      Z$ G d de      Z% G d de      Z& G d de      Z' G d de      Z( G d de      Z) G d d e      Z* G d! d"e      Z+ G d# d$e      Z,y%)&z
Comprehensive integration tests for AI analysis reporting system.

Tests cover:
- End-to-end reporting workflows
- Cross-component integration
- Real-world scenarios and user journeys
- Performance and scalability edge cases
    )TestCaseTransactionTestCaseoverride_settings)get_user_model)
Permission)ContentType)mail)timezone)Client)reverse)	APIClient)status)datetime)patch)Person)liuyao)send_admin_report_notification!send_user_resolution_notificationc                   d    e Zd ZdZd Zd Z ed      d        Z ed      d        Zd Z	d	 Z
y
)EndToEndReportingWorkflowTestsz,Test complete end-to-end reporting workflowsc                    t         j                  j                  dddd      | _        ddlm}  |dd	d
d      | _        t        j                  j                  dt        ddd      t        dd      | j                  dddidddi      | _        t        j                  j                  d| j                  t        j                         dddddddddi      | _        t!               | _        t%               | _        y)Set up test data13800138000user@example.com   测试   用户phoneemail
first_name	last_namer   )(create_admin_with_management_permissions13800138001admin@example.com	   管理员u   端到端测试        	completedbazi_analysisu   完整的八字分析内容number_analysisu   完整的数字分析内容name
birth_date
birth_time
created_byanalysis_statusai_analysisnumber_analysis_statusnumber_ai_analysisu   端到端六爻测试问题10responseu   完整的六爻分析内容questionuserqdatey1y2y3y4y5y6r2   r3   N)Userobjectscreate_userr;   tests.test_utilsr#   adminr   creater   r   personr   r
   nowliuyao_entryr   
api_clientr   
web_client)selfr#   s     _/home/cursorai/projects/iching/iching/tests/../../tests/ai_report/test_reporting_integration.pysetUpz$EndToEndReportingWorkflowTests.setUp!   s     LL,,$	 - 
	 	N=%"	

 nn++"D!Q'B{yy'(*GH#. 13PQ , 	
 #NN112,,.sssss'#%BC 2 
 $+ (    c                     ddl m}  |        yzClean up test datar   )cleanup_test_permissionsNrF   rT   rN   rT   s     rO   tearDownz'EndToEndReportingWorkflowTests.tearDownL       = "rQ   -django.core.mail.backends.locmem.EmailBackendEMAIL_BACKENDc                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  |j                  d
          | j                  j                          | j                  | j                  j                         | j                  | j                  j                  d       | j                  | j                  j                   d       | j                  | j                  j"                  d       | j%                  | j                  j&                         | j                  t)        t*        j,                        d       t*        j,                  d   }| j                  |j.                  dg       | j1                  d|j2                         | j1                  d|j2                         | j1                  d|j4                         d| j                  _        | j6                  | j                  _        t;        j<                         | j                  _        d| j                  _         | j                  jC                  g d       tE        | j                  | j                  ddd      }| j                  |       | j                  t)        t*        j,                        d       t*        j,                  d   }| j                  |j.                  dg       | j1                  d|j2                         | j1                  d|j4                         | j1                  d|j4                         | j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j"                  d       | jG                  | j                  j8                         | jG                  | j                  j>                         y)z?Test complete BaZi reporting workflow from report to resolutionr;   api:bazi_reportpkkwargsinappropriate_contentu-   这个分析包含不当内容，请审核。categorymessagejsonformatsuccesspendingr(   r   r%   u   新的AI分析举报BAZIu   这个分析包含不当内容resolvedu'   我们已经审核并处理了此问题)bazi_report_statusbazi_report_resolved_bybazi_report_resolved_atbazi_report_admin_notes)update_fieldsbazi   r      举报处理结果u   测试 用户N)$rL   force_authenticater;   r   rI   idpostassertEqualstatus_coder   HTTP_201_CREATED
assertTruedatarefresh_from_dbbazi_analysis_reportedbazi_report_categorybazi_report_messagerm   assertIsNotNonebazi_report_timestamplenr	   outboxtoassertInsubjectbodyrG   rn   r
   rJ   ro   rp   saver   assertIsNone)rN   
report_urlreport_datar8   admin_emailresult
user_emails          rO   %test_complete_bazi_reporting_workflowzDEndToEndReportingWorkflowTests.test_complete_bazi_reporting_workflowQ   s3   
 	**		*:.dkknn7MN
/F

 ??''
K'O--v/F/FGi01 	##%::;99;RS88:ij77CT[[>>? 	T[[)1-kk!n*=)>?,k.A.ABfk11268H8HI *4&.2jj+.6lln+.W+ (
 	 3IIt{{FJ5
 	 	T[[)1-[[^
);(<=*J,>,>?oz7?Q ??''
K'O--v/F/FG 	##%77C$++==>$++==>rQ   c                 n   | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j                         | j                  | j                  j                  d       | j                  t        t         j"                        d
       d| j                  _        | j&                  | j                  _        t+        j,                         | j                  _        d| j                  _        | j                  j3                          t5        | j                  | j                  ddd       | j                  t        t         j"                        d       t         j"                  d
   }| j7                  d|j8                         | j7                  d|j:                         y)z'Test complete LiuYao reporting workflowr]   api:liuyao_reportr_   r`   inaccurate_analysisu3   卦象解释不准确，与传统解释相违背。rc   rf   rg   r(   rl   !   已重新生成更准确的分析r   rs   rt   N)rL   ru   r;   r   rK   rv   rw   rx   ry   r   rz   r}   r{   analysis_reportedreport_categoryr   r	   r   report_statusrG   report_resolved_byr
   rJ   report_resolved_atreport_admin_notesr   r   r   r   r   )rN   r   r   r8   r   s        rO   'test_complete_liuyao_reporting_workflowzFEndToEndReportingWorkflowTests.test_complete_liuyao_reporting_workflow   s   
 	**		*:0$@Q@Q@T@T9UV
-L

 ??''
K'O--v/F/FG 	))+));;<**::<QRT[[)1- +5'/3zz,/7||~,/R,  	*IIt(((J/	
 	T[[)1-[[^
*J,>,>?9:??KrQ   c                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         t        d
d| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }	| j                  |	j                  t        j                         | j                  j                          | j                  j                          | j                  | j                  j                         | j                  | j                  j                         | j                  | j                  j                          | j                  | j                  j"                  d       | j                  | j                  j$                  d       | j                  | j                  j&                  d       y)z+Test user reporting multiple analysis typesr]   r^   r_   r`   rb   u
   BaZi报告rc   rf   rg   api:number_reporttechnical_erroru   数字分析报告r   r   u   六爻分析报告N)rL   ru   r;   r   rI   rv   rw   rx   ry   r   rz   rK   r}   r{   r~   number_analysis_reportedr   r   number_report_messagereport_message)
rN   bazi_url	bazi_data	response1
number_urlnumber_data	response2
liuyao_urlliuyao_data	response3s
             rO   &test_multiple_analysis_types_same_userzEEndToEndReportingWorkflowTests.test_multiple_analysis_types_same_user   s   **		*: ,dDKKNN5KL!8\R	OO((9V(L	..0G0GH 0$9OP
#4AUVOO(([(P	..0G0GH 0$@Q@Q@T@T9UV
#8EYZOO(([(P	..0G0GH 	##%))+::;<<=));;<88,G::<PQ**99;OPrQ   c                 t   t         j                  j                  dddd      }t        j                  j	                  dt        ddd	      |d
ddi      }| j                  j                  | j                         t        dd|j                  i      }ddd}| j                  j                  ||d      }| j                  |j                  t        j                         | j!                  d|j"                  d   j%                                |j'                          | j)                  |j*                         y)zATest that users cannot access each other's analyses for reporting13800138002zother@example.comu   其他r   r   u   其他用户分析        r*   r+   u   其他用户的分析r.   r/   r1   r2   r3   r]   r^   r_   r`   rb   u   尝试报告他人分析rc   rf   rg   	not founderrorN)rC   rD   rE   r   rH   r   rL   ru   r;   r   rv   rw   rx   ry   r   HTTP_400_BAD_REQUESTr   r|   lowerr}   assertFalser~   )rN   
other_userother_personr   r   r8   s         rO   test_cross_user_isolationz8EndToEndReportingWorkflowTests.test_cross_user_isolation   s    \\--%	 . 

 ~~,,%D!R(!'(*AB - 
 	**		*:.loo7NO
#:Gab??''
K'O--v/J/JKk8==#9#?#?#AB 	$$&<<=rQ   N)__name__
__module____qualname____doc__rP   rW   r   r   r   r   r    rQ   rO   r   r      sX    6)#V#
 %TUB? VB?H %TU&L V&LP QD>rQ   r   c                   L    e Zd ZdZd Zd Zd Z ed      d        Zd Z	d	 Z
y
)PerformanceAndScalabilityTestsz<Test performance and scalability aspects of reporting systemc                 z    t         j                  j                  dd      | _        ddlm}  |dd      | _        y)	r   r   r   r   r    r   $create_admin_with_report_permissionsr$   r%   N)rC   rD   rE   r;   rF   r   rG   rN   r   s     rO   rP   z$PerformanceAndScalabilityTests.setUp  s;    LL,,$ - 
	 	J9%

rQ   c                     ddl m}  |        yrS   rU   rV   s     rO   rW   z'PerformanceAndScalabilityTests.tearDown  rX   rQ   c           
         g }t        d      D ]T  }t        j                  j                  d| t	        ddd      | j
                  ddd| i      }|j                  |       V t               }|j                  | j
                  	       |D ]k  }t        d
d|j                  i      }dd|j                   d}|j                  ||d      }| j                  |j                  t        j                         m t        j                  j!                  |D cg c]  }|j                   c}d      j#                         }	| j                  |	d       yc c}w )z'Test handling of bulk report operations
   u   批量测试 r'   r(   r*   r+   u   批量分析内容 r   r]   r^   r_   r`   otheru   批量报告 rc   rf   rg   T)id__inr~   N)ranger   rD   rH   r   r;   appendr   ru   r   rv   rw   rx   ry   r   rz   filtercount)
rN   personsirI   rL   urlr|   r8   preported_counts
             rO   test_bulk_report_processingz:PerformanceAndScalabilityTests.test_bulk_report_processing  sH    rA^^**$QC(a+99 +,0CA3.GH + F NN6"  [
%%499%5F+T6994EFC 'mFII;4OPD!sD@HX1163J3JK   ..")*'QADD'*#' / 
 %' 	 	, +s   ErY   rZ   c                    g }t        d      D ]W  }t        j                  j                  d| t	        ddd      | j
                  ddd| idd	d
      }|j                  |       Y |D ]i  }d|_        | j                  |_	        t        j                         |_        |j                          t        | j
                  |ddd|j                          k t        j                  j!                  |D cg c]  }|j                   c}d      j#                         }| j%                  |d       | j%                  t'        t(        j*                        d       yc c}w )z4Test concurrent admin resolution of multiple reportsr   u   并发测试 r'   r(   r*   r+   u   并发分析 Trj   r   )r.   r/   r1   r2   r3   r~   rm   r   rl   rr   u   问题已解决 )r   rm   N)r   r   rD   rH   r   r;   r   rm   rG   rn   r
   rJ   ro   r   r   rv   r   r   rx   r   r	   r   )rN   r   r   rI   r   resolved_counts         rO    test_concurrent_admin_resolutionz?PerformanceAndScalabilityTests.test_concurrent_admin_resolution8  sD    qA^^**$QC(a+99 +,aS.AB'+#,%6 + 	F NN6"  F(2F%-1ZZF*-5\\^F*KKM .		66:9I&))7U   ..")*'QADD'*) / 
 %' 	 	+ 	T[[)1- +s   3Ec                 4   t         j                  j                  dt        ddd      | j                  dddi      }d}t               }|j                  | j                  	       t        d
d|j                  i      }d|d}|j                  ||d      }| j                  |j                  t        j                  t        j                  g       |j                  t        j                  k(  r,|j                          | j!                  |j"                         yy)z&Test handling of large report messagesu   大消息测试r'   r(   r*   r+   u   大消息分析内容r   u4  这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。这是一个非常详细的举报消息。r]   r^   r_   r`   r   rc   rf   rg   N)r   rD   rH   r   r;   r   ru   r   rv   rw   r   ry   r   rz   r   r}   r{   r~   )rN   rI   large_messagerL   r   r|   r8   s          rO   "test_large_report_message_handlingzAPerformanceAndScalabilityTests.test_large_report_message_handling`  s    &&"D!Q'yy'(*AB ' 
 J[
%%499%5'vyy0AB#>??3V?< 	h**##''-
 	
 6#:#::""$OOF99: ;rQ   c                    t         j                  j                  dt        ddd      | j                  dddi      }d}t               }|j                  | j                  	       t        d
d|j                  i      }d|d}|j                  ||d      }| j                  |j                  t        j                         |j                          | j                  |j                  |       y)z%Test performance with Unicode contentu   Unicode性能测试🚀r'   r(   r*   r+   u   Unicode分析内容💫r   uy   这个分析包含大量的中文字符、特殊符号！@#$%^&*()、以及emoji表情🎯🔮✨🌟💎🎪🎨🎭🎪r]   r^   r_   r`   r   rc   rf   rg   N)r   rD   rH   r   r;   r   ru   r   rv   rw   rx   ry   r   rz   r}   r   )rN   rI   unicode_messagerL   r   r|   r8   s          rO    test_unicode_content_performancez?PerformanceAndScalabilityTests.test_unicode_content_performance  s    &&*D!Q'yy'(*CD ' 
 V[
%%499%5'vyy0AB#@??3V?<--v/F/FG 33_ErQ   N)r   r   r   r   rP   rW   r   r   r   r   r   r   rQ   rO   r   r     s<    F
#
-@ %TU%. V%.N;>FrQ   r   c                   P    e Zd ZdZd Zd Z ed      d        Zd Zd Z	d Z
d	 Zy
)ErrorHandlingAndRecoveryTestsz1Test error handling and system recovery scenariosc                     ddl m}  |d      | _        t        j                  j                  dd      | _        t        j                  j                  dt        d	d
d
      | j                  dddi      | _
        y)r   r   r   z admin_error_handling@example.com)r    r   r   r   u   错误处理测试r'   r(   r*   r+   u   错误处理分析内容r   N)rF   r   rG   rC   rD   rE   r;   r   rH   r   rI   r   s     rO   rP   z#ErrorHandlingAndRecoveryTests.setUp  sy     	J94

 LL,,$ - 
	
 nn++%D!Q'yy'(*DE , 
rQ   c                     ddl m}  |        yrS   rU   rV   s     rO   rW   z&ErrorHandlingAndRecoveryTests.tearDown  rX   rQ   z(api.utils.send_admin_report_notificationc                    d|_         t               }|j                  | j                         t	        dd| j
                  j                  i      }ddd}|j                  ||d	
      }| j                  |j                  t        j                         | j
                  j                          | j                  | j
                  j                         | j                  | j
                  j                  d       y)z,Test reporting when email notification failsFr]   r^   r_   r`   r   u   邮件失败测试rc   rf   rg   N)return_valuer   ru   r;   r   rI   rv   rw   rx   ry   r   rz   r}   r{   r~   r   )rN   
mock_emailrL   r   r|   r8   s         rO   test_report_with_email_failurez<ErrorHandlingAndRecoveryTests.test_report_with_email_failure  s     #(
[
%%499%5't{{~~0FG-:NO ??3V?<--v/F/FG 	##%::;88:NOrQ   c                 N   t               }|j                  | j                         t        dddi      }ddd}|j	                  ||d	
      }| j                  |j                  t        j                         | j                  d|j                  d   j                                y)z'Test reporting with invalid analysis IDr]   r^   r_   i r`   r   u   无效ID测试rc   rf   rg   r   r   N)r   ru   r;   r   rw   rx   ry   r   r   r   r|   r   )rN   rL   r   r|   r8   s        rO   test_report_invalid_analysis_idz=ErrorHandlingAndRecoveryTests.test_report_invalid_analysis_id  s    [
%%499%5'u>-:JK??3V?<--v/J/JKk8==#9#?#?#ABrQ   c                    t         j                  j                  dt        ddd      | j                  dd      }t               }|j                  | j                         t        dd	|j                  i
      }ddd}|j                  ||d      }| j                  |j                  t        j                         | j                  d|j                  d          y)z-Test reporting analysis that is not completedu   未完成分析r'   r(   rj   Nr   r]   r^   r_   r`   r   u   未完成分析测试rc   rf   rg   cannot be reportedr   )r   rD   rH   r   r;   r   ru   r   rv   rw   rx   ry   r   r   r   r|   )rN   incomplete_personrL   r   r|   r8   s         rO   test_report_incomplete_analysisz=ErrorHandlingAndRecoveryTests.test_report_incomplete_analysis  s    "NN11"D!Q'yy% 2 
 [
%%499%5'7H7K7K0LM-:QR??3V?<--v/J/JK*HMM',BCrQ   c                    t               }|j                  | j                         t        dd| j                  j
                  i      }|j                  |ddid      }| j                  |j                  t        j                         |j                  |d	d
dd      }| j                  |j                  t        j                         y)z*Test reporting with malformed request datar]   r^   r_   r`   re   u   缺少类别rf   rg   invalid_categoryu   无效类别rc   N)r   ru   r;   r   rI   rv   rw   rx   ry   r   r   )rN   rL   r   r8   s       rO   "test_report_malformed_request_dataz@ErrorHandlingAndRecoveryTests.test_report_malformed_request_data  s    [
%%499%5't{{~~0FG ??3N(CF?S--v/J/JK ??3*%)
  #  	--v/J/JKrQ   c           
         g }t        d      D ]T  }t        j                  j                  d| t	        ddd      | j
                  ddd| i      }|j                  |       V t               }|j                  | j
                  	       |D ]k  }t        d
d|j                  i      }dd|j                   d}|j                  ||d      }| j                  |j                  t        j                         m |D ]d  }|j!                          | j#                  |j$                         | j                  |j&                  d       | j)                  |j*                         f y)z/Test database integrity under stress conditionsr   u   压力测试 r'   r(   r*   r+   u   压力测试内容 r   r]   r^   r_   r`   r   rc   rf   rg   rj   N)r   r   rD   rH   r   r;   r   r   ru   r   rv   rw   rx   ry   r   rz   r}   r{   r~   rm   r   r   )rN   r   r   rI   rL   r   r|   r8   s           rO   $test_database_integrity_under_stresszBErrorHandlingAndRecoveryTests.test_database_integrity_under_stress  sG    qA^^**$QC(a+99 +,0CA3.GH + F NN6"  [
%%499%5 F+T6994EFC 'mFII;4OPD!sD@HX1163J3JK  F""$OOF99:V66	B  !=!=>	 rQ   N)r   r   r   r   rP   rW   r   r   r   r   r   r   r   rQ   rO   r   r     sB    ;
*#
 56P 7P&
CD(L$?rQ   r   c                   @    e Zd ZdZd Zd Z ed      d        Zd Zy)	RealWorldScenarioTestsz1Test real-world usage scenarios and user journeysc                     t         j                  j                  dddd      | _        t         j                  j                  dddd      | _        d	d
lm}  |dddd      | _        y)zSet up realistic test datar   zregular@example.comu   普通r   r   r$   zpremium@example.comu   高级r   r   r   r%   u   管理u   员N)rC   rD   rE   regular_userpremium_userrF   r   
admin_userr   s     rO   rP   zRealWorldScenarioTests.setUp  st     !LL44'	 5 
 !LL44'	 5 
 	J>%	
rQ   c                     ddl m}  |        yrS   rU   rV   s     rO   rW   zRealWorldScenarioTests.tearDown9  rX   rQ   rY   rZ   c                    t         j                  j                  dt        ddd      t	        dd      | j
                  ddd	idd
di      }t        j                  j                  d| j
                  t        j                         dddddddddi      }t               }|j                  | j
                         t        dd|j                  i      }|j                  |dddd      }| j                  |j                  t         j"                         t        dd|j                  i      }|j                  |dddd      }| j                  |j                  t         j"                         t        dd|j                  i      }|j                  |d d!dd      }| j                  |j                  t         j"                         |j%                          |j%                          | j'                  |j(                         | j'                  |j*                         | j'                  |j,                         | j                  t/        t0        j2                        d       d"|_        | j6                  |_        t        j                         |_        d#|_        |j?                          tA        | j
                  |d$d"d#       d%|_!        | j6                  |_"        t        j                         |_#        d&|_$        |j?                          tA        | j
                  |d'd%d&       d"|_%        | j6                  |_&        t        j                         |_'        d(|_(        |j?                          tA        | j
                  |d)d"d(       | j                  t/        t0        j2                        d*       |j                  |d+d,dd      }| j                  |j                  t         j"                         y-).z#Test typical user reporting journeyu   张三r      r         r*   r+   u   张三的八字分析结果r,   u   张三的数字分析结果r-   u   今年事业发展如何？r6   r7   r8   u   事业发展六爻分析结果r9   r]   r^   r_   r`   r   uH   分析结果与我的实际情况差距很大，希望能重新分析。rc   rf   rg   r   r   u-   数字计算似乎有误，请检查算法。r   rb   u!   解释内容包含不当建议。rl   r   rr   	dismissedu-   经检查算法无误，可能是理解差异numberu*   已上报给高级审核员进一步处理r   r   r   u   再次举报N))r   rD   rH   r   r   r   r   r
   rJ   r   ru   r   rv   rw   rx   ry   r   rz   r}   r{   r~   r   r   r   r	   r   rm   r   rn   ro   rp   r   r   number_report_statusnumber_report_resolved_bynumber_report_resolved_atnumber_report_admin_notesr   r   r   r   )rN   person1liuyao1rL   r   r8   r   r   s           rO    test_typical_user_report_journeyz7RealWorldScenarioTests.test_typical_user_report_journey>  s    ..''D!R(Ar{(('(*GH#. 13PQ ( 	
 ..''2"",,.sssss'#%EF ( 
 [
%%4+<+<%= ,dGJJ5GH??8-a.
  #  	--v/F/FG 0$

9KL
??:)F0
  #  	--v/F/FG 0$

9KL
??:/:0
  #  	--v/F/FG 	!!667889112 	T[[)1- &0"*.//'*2,,.'*M')w
/	
 (3$,0OO),4LLN),[))w+;	
 !+%)__"%-\\^"%Q")w*8	
 	T[[)1- ??8%.
  #  	--v/F/FGrQ   c                 P   g }t        d      D ]  }t        j                  j                  d| d| dd| d      }t        j                  j                  d| t        d	d
d
      |ddd| idddd| 	      }|j                  ||f        |D ]F  \  }}d|_        | j                  |_
        t        j                         |_        |j                          H t        j                  j                  d| j                        j!                         }| j#                  |d       y)z0Test admin handling multiple reports efficientlyr   
1380013810r;   z@example.comr   r   r   u   批量处理测试r'   r(   r*   r+   u   批量分析Trj   r   u   批量报告)	r.   r/   r1   r2   r3   r~   rm   r   r   rl   )rm   rn   N)r   rC   rD   rE   r   rH   r   r   rm   r   rn   r
   rJ   ro   r   r   r   rx   )rN   users_and_reportsr   r;   rI   r   s         rO   #test_admin_bulk_resolution_scenarioz:RealWorldScenarioTests.test_admin_bulk_resolution_scenario  s>    qA<<++"1#&QC|,#A3<"	 , D ^^**)!-a+ +,QC.@A'+#,%6&21#$6 + 
F $$dF^4) . .LD&(2F%-1__F*-5\\^F*KKM	 .  ..)$(OO / 
 %' 	 	+rQ   N)	r   r   r   r   rP   rW   r   r  r  r   rQ   rO   r   r     s4    ;
4#
 %TUkH VkHZ&,rQ   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	ReReportingFunctionalityTestsz0Test re-reporting functionality after resolutionc                    t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddidddi      | _        t        j                  j                  d| j                  t        j                         dddddddddi      | _        t               | _        y)r   r   r   r   r   r   r$   r%   r&   Tr   r    r!   r"   is_staffzRe-reporting Testr'   r(   r*   r+   Test BaZi analysis contentr,   Test Number analysis contentr.   r/   r1   r2   r3   r4   r5   zRe-reporting test questionr6   r7   liuyao_analysisTest LiuYao analysis contentr9   N)rC   rD   rE   r;   rG   r   rH   r   rI   r   r
   rJ   rK   r   rL   rN   s    rO   rP   z#ReReportingFunctionalityTests.setUp  s    LL,,$	 - 
	 \\--%" . 

 nn++$D!Q'yy'(*FG#. 13QR , 
 #NN111,,.sssss'*,JK 2 
 $+rQ   c                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          d
| j                  _        | j                  | j                  _        t        j                          | j                  _        d| j                  _        | j                  j'                          ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j                  d       | j                  | j                  j(                  d       | j                  | j                  j*                  d       | j-                  | j                  j                         | j-                  | j                  j"                         | j-                  | j                  j$                         y)z<Test that users can re-report BaZi analysis after resolutionr]   r^   r_   r`   r   Initial BaZi reportrc   rf   rg   rl   Admin resolved this BaZi reportrb   z+Re-reporting BaZi analysis after resolutionrj   N)rL   ru   r;   r   rI   rv   rw   rx   ry   r   rz   r}   rm   rG   rn   r
   rJ   ro   rp   r   r   r   r   rN   r   r   r8   new_report_datas        rO   'test_bazi_re_reporting_after_resolutionzEReReportingFunctionalityTests.test_bazi_re_reporting_after_resolution  s    	**		*:.dkknn7MN
-,

 ??''
K'O--v/F/FG 	##%)3&.2jj+.6lln+.O+ 0D

 ??''
OF'S--v/F/FG 	##%77C99;RS88:gh$++==>$++==>$++==>rQ   c                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          d
| j                  _        | j                  | j                  _        t        j                          | j                  _        d| j                  _        | j                  j'                          ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j                  d       | j                  | j                  j(                  d       | j                  | j                  j*                  d       | j-                  | j                  j                         | j-                  | j                  j"                         | j-                  | j                  j$                         y)z>Test that users can re-report Number analysis after resolutionr]   r   r_   r`   r   zInitial Number reportrc   rf   rg   rl   z!Admin resolved this Number reportrb   z-Re-reporting Number analysis after resolutionrj   N)rL   ru   r;   r   rI   rv   rw   rx   ry   r   rz   r}   r   rG   r   r
   rJ   r   r  r   number_report_categoryr   r   r  s        rO   )test_number_re_reporting_after_resolutionzGReReportingFunctionalityTests.test_number_re_reporting_after_resolution&  s    	**		*:0$9OP
).

 ??''
K'O--v/F/FG 	##%+5(04

-08-0S- 0F

 ??''
OF'S--v/F/FG 	##%999E;;=TU::<kl$++??@$++??@$++??@rQ   c                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          d
| j                  _        | j                  | j                  _        t        j                          | j                  _        d| j                  _        | j                  j'                          ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j                  d       | j                  | j                  j(                  d       | j                  | j                  j*                  d       | j-                  | j                  j                         | j-                  | j                  j"                         | j-                  | j                  j$                         y)z>Test that users can re-report LiuYao analysis after resolutionr]   r   r_   r`   r   zInitial LiuYao reportrc   rf   rg   rl   z!Admin resolved this LiuYao reportrb   z-Re-reporting LiuYao analysis after resolutionrj   N)rL   ru   r;   r   rK   rv   rw   rx   ry   r   rz   r}   r   rG   r   r
   rJ   r   r   r   r   r   r   r  s        rO   )test_liuyao_re_reporting_after_resolutionzGReReportingFunctionalityTests.test_liuyao_re_reporting_after_resolutionM  s    	**		*:0$@Q@Q@T@T9UV
-.

 ??''
K'O--v/F/FG 	))+*4'/3zz,/7||~,/R,  0F

 ??''
OF'S--v/F/FG 	))+**88)D**::<ST**99;jk$++>>?$++>>?$++>>?rQ   c                    | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          d
| j                  _        | j                  | j                  _        t        j                          | j                  _        d| j                  _        | j                  j'                          | j                  j)                          | j                  j'                          ddd}| j                   j                  ||d	      }| j                  |j                  t        j*                         | j-                  d|j.                  d          y)z?Test that users cannot re-report after admin resets AI analysisr]   r^   r_   r`   r   r  rc   rf   rg   rl   r  rb   z"Trying to re-report after AI resetr   r   N)rL   ru   r;   r   rI   rv   rw   rx   ry   r   rz   r}   rm   rG   rn   r
   rJ   ro   rp   r   reset_bazi_analysisr   r   r|   r  s        rO   $test_cannot_re_report_after_ai_resetzBReReportingFunctionalityTests.test_cannot_re_report_after_ai_resett  s[    	**		*:.dkknn7MN
-,

 ??''
K'O--v/F/FG 	##%)3&.2jj+.6lln+.O+ 	'') 0;

 ??''
OF'S--v/J/JK*HMM',BCrQ   c                 
   | j                   j                  | j                         t        dd| j                  j
                  i      }ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          d
| j                  _        | j                  | j                  _        t        j                          | j                  _        d| j                  _        | j                  j'                          ddd}| j                   j                  ||d	      }| j                  |j                  t        j                         | j                  j                          | j                  | j                  j                  d       | j                  | j                  j(                  d       | j                  | j                  j*                  d       y)zBTest that users can re-report after dismissal (same as resolution)r]   r^   r_   r`   r   r  rc   rf   rg   r   z Admin dismissed this BaZi reportrb   z*Re-reporting BaZi analysis after dismissalrj   N)rL   ru   r;   r   rI   rv   rw   rx   ry   r   rz   r}   rm   rG   rn   r
   rJ   ro   rp   r   r   r   r  s        rO   %test_cannot_re_report_after_dismissalzCReReportingFunctionalityTests.test_cannot_re_report_after_dismissal  s    	**		*:.dkknn7MN
-,

 ??''
K'O--v/F/FG 	##%)4&.2jj+.6lln+.P+ 0C

 ??''
OF'S--v/F/FG 	##%77C99;RS88:fgrQ   N)
r   r   r   r   rP   r  r  r  r!  r#  r   rQ   rO   r
  r
    s,    :%&N%?N%AN%@N!DF"hrQ   r
  c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
UserSiteDisplayTestsz<Test that report details are properly displayed on user sitec                    t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddidddi      | _        t        j                  j                  d| j                  t        j                         dddddddddi      | _        y)r   r   r   r   r   r   r$   r%   r&   Tr  zDisplay Testr'   r(   r*   r+   r  r,   r  r  zDisplay test questionr6   r7   r  r  r9   N)rC   rD   rE   r;   rG   r   rH   r   rI   r   r
   rJ   rK   r  s    rO   rP   zUserSiteDisplayTests.setUp  s    LL,,$	 - 
	 \\--%" . 

 nn++D!Q'yy'(*FG#. 13QR , 
 #NN11,,,.sssss'*,JK 2 
rQ   c                    | j                   j                  dd       t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j                  |j                  t        j                         |j                         }| j                  |d          | j                  |d   d	       | j                  |d
   d       | j                  |d   d       | j                  |d          | j                  |d          | j                  |d          y)z8Test that BaZi report details are displayed when pendingr   Test BaZi report messager]   api:bazi-analysisr_   r`   r~   rm   rj   r   r   r   rp   ro   N)rI   report_bazi_analysisr   ru   r;   r   rv   getrx   ry   r   HTTP_200_OKrf   r{   r   r   rN   rL   r   r8   r|   s        rO   (test_bazi_report_details_display_pendingz=UserSiteDisplayTests.test_bazi_report_details_display_pending  s    	(()>@Z[ [
%%499%5)42HI>>#&--v/A/AB}} 	56723Y?457LM346PQT"9:;$89:$89:rQ   c                 x   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j+                  |d	          | j!                  |d
   d       | j!                  |d   d       | j!                  |d   d       | j-                  |d          | j!                  |d   d       | j-                  |d          y)zLTest that BaZi report details with admin remarks are displayed when resolvedr   r(  rl   z5Admin resolved this BaZi report with detailed remarksr]   r)  r_   r`   r~   rm   r   r   r   rp   ro   NrI   r*  rm   rG   rn   r
   rJ   ro   rp   r   r   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r{   r   r-  s        rO   )test_bazi_report_details_display_resolvedz>UserSiteDisplayTests.test_bazi_report_details_display_resolved  sh    	(()>@Z[)3&.2jj+.6lln+.e+ [
%%499%5)42HI>>#&--v/A/AB}} 	56723Z@457LM346PQT"9:;78:qrT";<=rQ   c                    | j                   j                  dd       t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j                  |j                  t        j                         |j                         }| j                  |d          | j                  |d   d	       | j                  |d
   d       | j                  |d   d       | j                  |d          | j                  |d          | j                  |d          y)z:Test that Number report details are displayed when pendingr   Test Number report messager]   api:number_analysis	person_idr`   r   r   rj   r  r   number_report_timestampr  r   N)rI   report_number_analysisr   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r{   r   r   r-  s        rO   *test_number_report_details_display_pendingz?UserSiteDisplayTests.test_number_report_details_display_pending  s    	**+<>Z[ [
%%499%5+[$++..4QR>>#&--v/A/AB}} 	78945yA679JK568TUT";<=$:;<$:;<rQ   c                 x   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j+                  |d	          | j!                  |d
   d       | j!                  |d   d       | j!                  |d   d       | j-                  |d          | j!                  |d   d       | j-                  |d          y)zNTest that Number report details with admin remarks are displayed when resolvedr   r3  rl   z7Admin resolved this Number report with detailed remarksr]   r4  r5  r`   r   r   r  r   r6  r  r   N)rI   r7  r   rG   r   r
   rJ   r   r  r   r   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r{   r   r-  s        rO   +test_number_report_details_display_resolvedz@UserSiteDisplayTests.test_number_report_details_display_resolved1  sh    	**+<>Z[+5(04

-08-0i- [
%%499%5+[$++..4QR>>#&--v/A/AB}} 	78945zB679JK568TUT";<=9:<uvT"=>?rQ   c                    | j                   j                  dd       t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j                  |j                  t        j                         |j                         }| j                  |d          | j                  |d   d	       | j                  |d
   d       | j                  |d   d       | j                  |d          | j                  |d          | j                  |d          y)z:Test that LiuYao report details are displayed when pendingr   Test LiuYao report messager]   api:liuyao-analysisr_   r`   r   r   rj   r   r   report_timestampr   r   N)rK   report_analysisr   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r{   r   r   r-  s        rO   *test_liuyao_report_details_display_pendingz?UserSiteDisplayTests.test_liuyao_report_details_display_pendingN  s     	))*?A]^ [
%%499%5+T4;L;L;O;O4PQ>>#&--v/A/AB}} 	012o.	:/02GH./1MNT"456$345$345rQ   c                 x   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j+                  |d	          | j!                  |d
   d       | j!                  |d   d       | j!                  |d   d       | j-                  |d          | j!                  |d   d       | j-                  |d          y)zNTest that LiuYao report details with admin remarks are displayed when resolvedr   r<  rl   z7Admin resolved this LiuYao report with detailed remarksr]   r=  r_   r`   r   r   r   r   r>  r   r   N)rK   r?  r   rG   r   r
   rJ   r   r   r   r   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r{   r   r-  s        rO   +test_liuyao_report_details_display_resolvedz@UserSiteDisplayTests.test_liuyao_report_details_display_resolvedf  sw    	))*?A]^*4'/3zz,/7||~,/h,  [
%%499%5+T4;L;L;O;O4PQ>>#&--v/A/AB}} 	012o.
;/02GH./1MNT"456235noT"678rQ   N)r   r   r   r   rP   r.  r1  r8  r:  r@  rB  r   rQ   rO   r%  r%    s*    F#
J;0>:=0@:609rQ   r%  c                   p    e Zd ZdZd Z ed      d        Z ed      d        Z ed      d        Zy)	EmailNotificationTestsz Test email notification behaviorc                 &   t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddi      | _        y)r   r   r   r   r   r   r$   r%   r&   Tr  z
Email Testr'   r(   r*   r+   r  r   N	rC   rD   rE   r;   rG   r   rH   r   rI   r  s    rO   rP   zEmailNotificationTests.setUp  s    LL,,$	 - 
	 \\--%" . 

 nn++D!Q'yy'(*FG , 
rQ   rY   rZ   c                 H   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          ddl
m}  || j                  | j                   ddd      }| j                  |       | j                  t        t         j"                        d       d	| j                   _        d
| j                   _        | j                   j                           || j                  | j                   dd	d
      }| j%                  |       | j                  t        t         j"                        d       d| j                   _        d| j                   _        | j                   j                           || j                  | j                   ddd      }| j%                  |       | j                  t        t         j"                        d       y)z6Test that email is sent only once per resolution cycler   Test report messagerl   Admin resolved this reportr   r   rr   r(   r   Admin dismissed this reportz Admin resolved this report againN)rI   r*  rm   rG   rn   r
   rJ   ro   rp   r   	api.utilsr   r;   r{   rx   r   r	   r   r   rN   r   r   s      rO   (test_email_sent_only_once_per_resolutionz?EmailNotificationTests.test_email_sent_only_once_per_resolution  s    	(()>@UV *4&.2jj+.6lln+.J+ 	@2IIt{{FJ8T
 	T[[)1- *5&.K+2IIt{{FK9V

 	 T[[)1- *4&.P+2IIt{{FJ8Z

 	 T[[)1-rQ   c                 @   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        d| j                   _	        | j                   j                          | j                   j                  dd       | j                   j                          | j                  | j                   j                         d| j                   _        d| j                   _        | j                   j                          d	d
lm}  || j                  | j                   ddd      }| j!                  |       | j#                  t%        t&        j(                        d       y)z2Test that email flag is reset when user re-reportsr   rH  rl   rI  Trb   Re-reporting after resolutionAdmin resolved the re-reportr   rJ  rr   r(   N)rI   r*  rm   rG   rn   r
   rJ   ro   rp   !bazi_report_resolution_email_sentr   r}   r   rL  r   r;   r{   rx   r   r	   r   rM  s      rO   %test_email_reset_when_user_re_reportsz<EmailNotificationTests.test_email_reset_when_user_re_reports  s&    	(()>@UV *4&.2jj+.6lln+.J+8<5 	(()@Bab 	##%FFG *4&.L+?2IIt{{FJ8V
 	T[[)1-rQ   c                    | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        d| j                   _	        | j                   j                          d| j                   _        d| j                   _	        | j                   j                          | j                   j                          | j                  | j                   j                         d| j                   _        d| j                   _        d| j                   _        | j                   j                          dd	lm}  || j                   | j                   d
dd      }| j#                  |       | j%                  t'        t(        j*                        d       y)zCTest that email flag is reset when admin unchecks reported checkboxr   rH  rl   rI  TFzAdmin resolved after uncheckingr   rJ  rr   r(   N)rI   r*  rm   rG   rn   r
   rJ   ro   rp   rR  r   r~   r}   r   rL  r   r;   r{   rx   r   r	   r   rM  s      rO   -test_email_reset_when_admin_unchecks_reportedzDEmailNotificationTests.test_email_reset_when_admin_unchecks_reported  sD    	(()>@UV *4&.2jj+.6lln+.J+8<5 .3*8=5 	##%FFG .2*)3&.O+?2IIt{{FJ8Y
 	T[[)1-rQ   N)	r   r   r   r   rP   r   rN  rS  rU  r   rQ   rO   rD  rD    s]    *
4 %TU-. V-.^ %TU. V.B %TU". V".rQ   rD  c                   "    e Zd ZdZd Zd Zd Zy)AdminRemarksDisplayTestsz7Test that admin remarks are properly displayed to usersc                 &   t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddi      | _        y)r   r   r   r   r   r   r$   r%   r&   Tr  zAdmin Remarks Testr'   r(   r*   r+   r  r   NrF  r  s    rO   rP   zAdminRemarksDisplayTests.setUp  s    LL,,$	 - 
	 \\--%" . 

 nn++%D!Q'yy'(*FG , 
rQ   c                    | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j!                  |d	   d       y
)z6Test that admin remarks with line breaks are preservedr   rH  rl   z?Admin resolved this report

With multiple lines
And line breaksr]   r)  r_   r`   rp   NrI   r*  rm   rG   rn   r
   rJ   ro   rp   r   r   ru   r;   r   rv   r+  rx   ry   r   r,  rf   r-  s        rO   #test_admin_remarks_with_line_breaksz<AdminRemarksDisplayTests.test_admin_remarks_with_line_breaks6  s     	(()>@UV)3&.2jj+.6lln+.r+ [
%%499%5)42HI>>#&--v/A/AB}} 	78:~rQ   c                    | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j!                  |d	   d       y
)z=Test that admin remarks with special characters are preservedrb   rH  rl   uW   Admin remarks with special chars: 中文 🎯 <script>alert("test")</script> & "quotes"r]   r)  r_   r`   rp   NrZ  r-  s        rO   *test_admin_remarks_with_special_characterszCAdminRemarksDisplayTests.test_admin_remarks_with_special_charactersM  s     	(()@BWX)3&.2jj+.6lln+ /H+ [
%%499%5)42HI>>#&--v/A/AB}} 	78  ;T  	UrQ   N)r   r   r   r   rP   r[  r]  r   rQ   rO   rW  rW    s    A
4@.UrQ   rW  c                       e Zd ZdZd Zd Zy)DismissedReportDisplayTestsz4Test that dismissed reports show as pending to usersc                 &   t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddi      | _        y)r   r   r   r   r   r   r$   r%   r&   Tr  zDismissed Testr'   r(   r*   r+   r  r   NrF  r  s    rO   rP   z!DismissedReportDisplayTests.setUph  s    LL,,$	 - 
	 \\--%" . 

 nn++!D!Q'yy'(*FG , 
rQ   c                 x   | j                   j                  dd       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _        | j                   j                          t               }|j                  | j                         t        dd| j                   j                  i      }|j                  |      }| j!                  |j"                  t$        j&                         |j)                         }| j+                  |d	          | j!                  |d
   d       | j!                  |d   d       | j!                  |d   d       | j-                  |d          | j!                  |d   d       | j-                  |d          y)z6Test that dismissed reports appear as pending to usersr   rH  r   rK  r]   r)  r_   r`   r~   rm   r   r   r   rp   ro   Nr0  r-  s        rO   .test_dismissed_report_shows_as_pending_to_userzJDismissedReportDisplayTests.test_dismissed_report_shows_as_pending_to_user  sh    	(()>@UV)4&.2jj+.6lln+.K+ [
%%499%5)42HI>>#&--v/A/AB}} 	56723[A457LM346KLT"9:;78:WXT";<=rQ   N)r   r   r   r   rP   rb  r   rQ   rO   r_  r_  e  s    >
4>rQ   r_  c                   "    e Zd ZdZd Zd Zd Zy)ReportStatusTransitionTestsz-Test report status transitions and edge casesc                 &   t         j                  j                  dddd      | _        t         j                  j                  ddddd	
      | _        t
        j                  j                  dt        ddd      | j                  dddi      | _        y)r   r   r   r   r   r   r$   r%   r&   Tr  zStatus Transition Testr'   r(   r*   r+   r  r   NrF  r  s    rO   rP   z!ReportStatusTransitionTests.setUp  s    LL,,$	 - 
	 \\--%" . 

 nn++)D!Q'yy'(*FG , 
rQ   c                 `   | j                   j                  dd       | j                  | j                   j                  d       d| j                   _        | j                  | j                   _        t        j                         | j                   _        d| j                   _	        | j                   j                          | j                  | j                   j                  d       | j                  | j                   j
                         | j                  | j                   j                         | j                   j                  dd       | j                  | j                   j                  d       | j                  | j                   j
                         | j                  | j                   j                         | j                  | j                   j                         d| j                   _        | j                  | j                   _        t        j                         | j                   _        d	| j                   _	        | j                   j                          | j                  | j                   j                  d       | j                   j                  d
d       | j                  | j                   j                  d       | j                  | j                   j
                         | j                  | j                   j                         | j                  | j                   j                         y)z(Test all valid report status transitionsr   rH  rj   rl   rI  rb   rP  r   rK  r   zRe-reporting after dismissalN)rI   r*  rx   rm   rG   rn   r
   rJ   ro   rp   r   r   r   r  s    rO   test_report_status_transitionsz:ReportStatusTransitionTests.test_report_status_transitions  s$    	(()>@UV77C *4&.2jj+.6lln+.J+77DT[[@@AT[[@@A 	(()@Bab77C$++==>$++==>$++==> *5&.2jj+.6lln+.K+77E 	(():<Z[77C$++==>$++==>$++==>rQ   c                    | j                   j                  dd       | j                  | j                   j                         d| j                   _        | j
                  | j                   _        t        j                         | j                   _	        d| j                   _
        d| j                   _        | j                   j                          | j                  | j                   j                         | j                   j                  dd       | j                  | j                   j                         d| j                   _        | j
                  | j                   _        t        j                         | j                   _	        d| j                   _
        | j                   j                          | j                  | j                   j                         y	)
z2Test email flag behavior during status transitionsr   rH  rl   rI  Trb   rP  rQ  N)rI   r*  r   rR  rm   rG   rn   r
   rJ   ro   rp   r   r{   r  s    rO   test_email_flag_behaviorz4ReportStatusTransitionTests.test_email_flag_behavior  s4    	(()>@UVFFG *4&.2jj+.6lln+.J+8<5EEF 	(()@BabFFG *4&.2jj+.6lln+.L+FFGrQ   N)r   r   r   r   rP   rg  ri  r   rQ   rO   rd  rd    s    7
4(?THrQ   rd  N)-r   django.testr   r   r   django.contrib.authr   django.contrib.auth.modelsr   "django.contrib.contenttypes.modelsr   django.corer	   django.utilsr
   r   django.urlsr   rest_framework.testr   rest_frameworkr   datetimer   r   unittest.mockr   bazi.modelsr   liuyao.modelsr   rL  r   r   rC   r   r   r   r   r
  r%  rD  rW  r_  rd  r   rQ   rO   <module>rw     s    I H . 1 :  !   ) !      Wa>%8 a>HSFX SFlA?H A?Hv,X v,rdhH dhNE98 E9PR.X R.jIUx IUX:>( :>zcH( cHrQ   