
    P1ipd                     
   d 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 ddlmZ ddlmZ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  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 unit tests for AI analysis reporting Django admin functionality.

Tests cover:
- PersonAdmin reporting features
- LiuYaoAdmin reporting features
- Admin actions for report resolution
- Admin display methods
- Bulk operations and edge cases
    )TestCaseRequestFactory)	AdminSite)get_user_model)
ModelAdmin)FallbackStorage)timezone)datetime)patch	MagicMock)Person)PersonAdmin)liuyao)LiuYaoAdminc                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)PersonAdminTestsz(Test PersonAdmin reporting functionalityc                    t               | _        t               | _        t	        t
        | j                        | _        t        j                  j                  dddddd      | _
        t        j                  j                  ddd	d
      | _        t
        j                  j                  dt        ddd      t        dd      | j                  dddidddi      | _        y)Set up test data13800138001admin@example.comAdminUserTphoneemail
first_name	last_nameis_staffis_superuser13800138000user@example.comTestr   r   r   r   u   测试人员        r   	completedbazi_analysiszTest BaZi analysisnumber_analysiszTest Number analysis)name
birth_date
birth_time
created_byanalysis_statusai_analysisnumber_analysis_statusnumber_ai_analysisN)r   factoryr   
admin_siter   r   person_adminr   objectscreate_user
admin_userregular_usercreater
   r   personselfs    Y/home/cursorai/projects/iching/iching/tests/../../tests/ai_report/test_reporting_admin.pysetUpzPersonAdminTests.setUp   s    %'#+'@,,22% 3 
 !LL44$	 5 
 nn++D!Q'B{(('(*>?#. 13IJ , 	
    c                 r    | j                   j                  | j                        }| j                  d|       y)z5Test BaZi report status display when no report exists	   无举报N)r5   bazi_report_status_displayr;   assertInr=   results     r>   )test_bazi_report_status_display_no_reportz:PersonAdminTests.test_bazi_report_status_display_no_report@   s*    ""==dkkJk6*r@   c                     d| j                   _        d| j                   _        | j                  j	                  | j                         }| j                  d|       | j                  d|       y)z3Test BaZi report status display for pending reportsTpending	   待处理orangeNr;   bazi_analysis_reportedbazi_report_statusr5   rC   rD   rE   s     r>   'test_bazi_report_status_display_pendingz8PersonAdminTests.test_bazi_report_status_display_pendingE   sP    -1*)2&""==dkkJk6*h'r@   c                     d| j                   _        d| j                   _        | j                  j	                  | j                         }| j                  d|       | j                  d|       y)z4Test BaZi report status display for resolved reportsTresolved	   已解决greenNrL   rE   s     r>   (test_bazi_report_status_display_resolvedz9PersonAdminTests.test_bazi_report_status_display_resolvedN   sP    -1*)3&""==dkkJk6*gv&r@   c                     d| j                   _        d| j                   _        | j                  j	                  | j                         }| j                  d|       | j                  d|       y)z5Test BaZi report status display for dismissed reportsT	dismissed	   已忽略grayNrL   rE   s     r>   )test_bazi_report_status_display_dismissedz:PersonAdminTests.test_bazi_report_status_display_dismissedW   sP    -1*)4&""==dkkJk6*ff%r@   c                 F   g d}|D ]  \  }}}| j                  |      5  d| j                  _        || j                  _        | j                  j                  | j                        }| j                  ||       | j                  ||       ddd        y# 1 sw Y   xY w)z2Test Number report status display for all statuses)rI   rJ   rK   )reviewedu	   已审核blue)rQ   rR   rS   )rV   rW   rX   statusTN)subTestr;   number_analysis_reportednumber_report_statusr5   number_report_status_displayrD   r=   status_testsr_   display_textcolorrF   s         r>   .test_number_report_status_display_all_statusesz?PersonAdminTests.test_number_report_status_display_all_statuses`   s    
 ,8'FL%V,7;4390**GGTlF3eV, -, ,8,,s   A,BB 	c                    d| j                   _        d| j                   _        d| j                   _        d| j                   _        | j                   j                          | j                  j                  d      }| j                  |_	        t        |di        t        |      }t        |d|       t        j                  j                  | j                   j                        }t!        d	      5 }d|_        | j$                  j'                  ||       d
d
d
       | j                   j)                          | j+                  | j                   j                  d       | j+                  | j                   j,                  | j                         | j/                  | j                   j0                         j3                          y
# 1 sw Y   xY w)z-Test successful BaZi report resolution actionTrI   inappropriate_contentzTest report/session	_messagesid+api.utils.send_user_resolution_notificationNrQ   )r;   rM   rN   bazi_report_categorybazi_report_messagesaver3   postr8   usersetattrr   r   r6   filterro   r   return_valuer5   resolve_bazi_reportsrefresh_from_dbassertEqualbazi_report_resolved_byassertIsNotNonebazi_report_resolved_atassert_called_once)r=   requestmessagesqueryset
mock_emails        r>   (test_resolve_bazi_reports_action_successz9PersonAdminTests.test_resolve_bazi_reports_action_successr   sU    .2*)2&+B(*7' ,,##C(B'"7+h/ >>((DKKNN(; @AZ&*J# 227HE	 B 	##%77D<<dooNT[[@@A 	%%' BAs   /$GG
c                 
   d| j                   _        d| j                   _        d| j                   _        | j                   j	                          | j
                  j                  d      }| j                  |_        t        |di        t        |dt        |             t        j                  j                  | j                   j                        }t        d      5 }d|_        | j"                  j%                  ||       d	d	d	       | j                   j'                          | j)                  | j                   j                  d
       | j)                  | j                   j*                  | j                         y	# 1 sw Y   zxY w)z/Test successful Number report resolution actionTrI   inaccurate_analysisrk   rl   rm   rn   rp   NrQ   )r;   ra   rb   number_report_categoryrs   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r   rx   r5   resolve_number_reportsrz   r{   number_report_resolved_byr=   r   r   r   s       r>   *test_resolve_number_reports_action_successz;PersonAdminTests.test_resolve_number_reports_action_success   s    04,+4(-B*,,##C(B'og&>?>>((DKKNN(;@AZ&*J#44WhG B 	##%99:F>>P BAs   $E99Fc                 f   d| j                   _        d| j                   _        | j                   j                          | j                  j                  d      }| j                  |_        t        |di        t        |dt        |             t        j                  j                  | j                   j                        }| j                   j                  }| j                  j!                  ||       | j                   j#                          | j%                  | j                   j                  |       y)z9Test BaZi report resolution when no pending reports existTrQ   rk   rl   rm   rn   N)r;   rM   rN   rs   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r~   r5   ry   rz   r{   r=   r   r   original_resolved_ats       r>   ,test_resolve_bazi_reports_no_pending_reportsz=PersonAdminTests.test_resolve_bazi_reports_no_pending_reports   s     .2*)3&,,##C(B'og&>?>>((DKKNN(;  ${{BB..wA##%<<>RSr@   c                    d| j                   _        d| j                   _        | j                   j                          | j                  j                  d      }| j                  |_        t        |di        t        |dt        |             t        j                  j                  | j                   j                        }t        d      5 }t        d      |_        | j"                  j%                  ||       d	d	d	       | j                   j'                          | j)                  | j                   j                  d
       y	# 1 sw Y   JxY w)z8Test handling when email sending fails during resolutionTrI   rk   rl   rm   rn   rp   zEmail service downNrQ   )r;   rM   rN   rs   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r   	Exceptionside_effectr5   ry   rz   r{   r   s       r>   +test_resolve_reports_email_failure_handlingz<PersonAdminTests.test_resolve_reports_email_failure_handling   s    -1*)2&,,##C(B'og&>?>>((DKKNN(; @AZ%./C%DJ" 227HE	 B 	##%77D BAs   -EE
c                    d| j                   _        | j                   j                          d| j                  _        d| j                  _        | j                  j                          | j                  j                  d      }| j                  |_	        t        |di        t        |dt        |             t        j                  j                  | j                  j                        }| j                   j#                  ||       | j                  j%                          | j'                  | j                  j
                  d       y	)
z-Test report resolution when user has no email TrI   rk   rl   rm   rn   rQ   N)r9   r   rs   r;   rM   rN   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r5   ry   rz   r{   r=   r   r   s      r>   "test_resolve_reports_no_user_emailz3PersonAdminTests.test_resolve_reports_no_user_email   s     #% -1*)2&,,##C(B'og&>?>>((DKKNN(; 	..wA##%77Dr@   c           
         g }t        d      D ]V  }t        j                  j                  d| t	        ddd      | j
                  ddd| idd	
      }|j                  |       X | j                  j                  d      }| j                  |_
        t        |di        t        |dt        |             t        j                  j                  |D cg c]  }|j                   c}      }t        d      5  | j                   j#                  ||       ddd       |D ].  }|j%                          | j'                  |j(                  d       0 yc c}w # 1 sw Y   BxY w)zTest bulk report resolution   z
Bulk Test r%   r&   r(   testzdata TrI   r+   r,   r.   r/   r0   rM   rN   rk   rl   rm   id__inrp   NrQ   )ranger   r6   r:   r
   r9   appendr3   rt   r8   ru   rv   r   rw   ro   r   r5   ry   rz   r{   rN   )r=   personsir;   r   pr   s          r>   #test_resolve_reports_bulk_operationz4PersonAdminTests.test_resolve_reports_bulk_operation   s<    qA^^**!!%a+,, +#uQC[1'+#, + F NN6"  ,,##C(B'og&>?>>((w0Gw!w0G(H@A227HE B F""$V66
C  1HAAs   E9EE N)__name__
__module____qualname____doc__r?   rG   rO   rT   rY   rh   r   r   r   r   r   r    r@   r>   r   r      sH    2
B+
('&-$!(FQ.T*E0E.Dr@   r   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)LiuYaoAdminTestsz(Test LiuYaoAdmin reporting functionalityc                    t               | _        t               | _        t	        t
        | j                        | _        t        j                  j                  dddddd      | _
        t        j                  j                  ddd	d
      | _        t
        j                  j                  d| j                  t        j                         dddddddddi      | _        y)r   r   r   r   r   Tr   r!   r"   r#   r$   u   测试问题10r(   responseTest LiuYao analysis contentquestionru   qdatey1y2y3y4y5y6r/   r0   N)r   r3   r   r4   r   r   liuyao_adminr   r6   r7   r8   r9   r:   r	   nowliuyao_entryr<   s    r>   r?   zLiuYaoAdminTests.setUp  s    %'#+'@,,22% 3 
 !LL44$	 5 
 #NN11#"",,.sssss'#%CD 2 
r@   c                     | j                   j                  | j                        }| j                  d|       | j                  | j                  j
                  |       y)z(Test user display method in LiuYao adminz	Test UserN)r   user_displayr   rD   r9   r   rE   s     r>   test_user_displayz"LiuYaoAdminTests.test_user_display2  sF    ""//0A0ABk6*d''--v6r@   c                     d| j                   _        | j                  j                  | j                         }| j	                  d|       y)z%Test user display method when no userNz
Guest User)r   ru   r   r   rD   rE   s     r>   test_user_display_no_userz*LiuYaoAdminTests.test_user_display_no_user8  s:    !%""//0A0ABlF+r@   c                 (   g d}|D ]}  \  }}}| j                  |      5  || j                  _        | j                  j	                  | j                        }| j                  ||       |r| j                  ||       ddd        y# 1 sw Y   xY w)z#Test analysis status display method))r(   u   ✓ CompletedrS   )rI   u   ⟳ PendingrK   )erroru	   ✗ Errorred)NzNot AnalyzedNr^   N)r`   r   r/   r   analysis_status_displayrD   rd   s         r>   test_analysis_status_displayz-LiuYaoAdminTests.test_analysis_status_display>  s    
 ,8'FL%V,4:!!1**BB4CTCTUlF3MM%0 -, ,8,,s   ABB	c                    | j                   j                  | j                        }| j                  d|       g d}|D ]  \  }}}| j	                  |      5  d| j                  _        || j                  _        | j                   j                  | j                        }| j                  ||       | j                  ||       ddd        y# 1 sw Y   xY w)z+Test report status display for all statusesrB   r[   r^   TN)r   report_status_displayr   rD   r`   analysis_reportedreport_status)r=   rF   re   r_   rf   rg   s         r>   'test_report_status_display_all_statusesz8LiuYaoAdminTests.test_report_status_display_all_statusesO  s     ""889J9JKk6*
 ,8'FL%V,6:!!328!!/**@@ARARSlF3eV, -, ,8,,s   A,CC	c                     | j                   j                  | j                        }| j                  d|       | j                  d|       y)zTest AI analysis display methodr   UnknownN)r   ai_analysis_displayr   rD   rE   s     r>   test_ai_analysis_displayz)LiuYaoAdminTests.test_ai_analysis_displayf  s;    ""66t7H7HI4f=i(r@   c                     d| j                   _        | j                  j                  | j                         }| j	                  d|       y)z0Test AI analysis display when no analysis existsNzNo analysis available)r   r0   r   r   rD   rE   s     r>   $test_ai_analysis_display_no_analysisz5LiuYaoAdminTests.test_ai_analysis_display_no_analysisl  s;    (,%""66t7H7HI-v6r@   c                     d}d|i| j                   _        | j                  j                  | j                         }| j	                  d|       | j	                  d|       | j                  d|       y)z4Test AI analysis display truncation for long contentX  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr   z...  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN)r   r0   r   r   rD   assertNotIn)r=   long_contentrF   s      r>   #test_ai_analysis_display_truncationz4LiuYaoAdminTests.test_ai_analysis_display_truncationr  sd     )3\(B%""66t7H7HIeV$ 	i(F+r@   c                 t   d| j                   _        d| j                   _        d| j                   _        | j                   j	                          | j
                  j                  d      }| j                  |_        t        |di        t        |dt        |             t        j                  j                  | j                   j                        }t        d      5 }d|_        | j"                  j%                  ||       d	d	d	       | j                   j'                          | j)                  | j                   j                  d
       | j)                  | j                   j*                  | j                         | j-                  | j                   j.                         j1                          y	# 1 sw Y   xY w)z/Test successful LiuYao report resolution actionTrI   r   rk   rl   rm   rn   rp   NrQ   )r   r   r   report_categoryrs   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r   rx   r   resolve_reportsrz   r{   report_resolved_byr}   report_resolved_atr   r   s       r>   #test_resolve_reports_action_successz4LiuYaoAdminTests.test_resolve_reports_action_success~  sP    /3+*3',A) ,,##C(B'og&>?>>((D,=,=,@,@(A@AZ&*J#--gx@ B
 	))+**88*E**==tOT..AAB 	%%' BAs   $F..F7c                 f   d| j                   _        d| j                   _        | j                   j                          | j                  j                  d      }| j                  |_        t        |di        t        |dt        |             t        j                  j                  | j                   j                        }| j                   j                  }| j                  j!                  ||       | j                   j#                          | j%                  | j                   j                  |       y)z.Test resolving already resolved LiuYao reportsTrQ   rk   rl   rm   rn   N)r   r   r   rs   r3   rt   r8   ru   rv   r   r   r6   rw   ro   r   r   r   rz   r{   r   s       r>   %test_resolve_reports_already_resolvedz6LiuYaoAdminTests.test_resolve_reports_already_resolved  s    .2+*4' ,,##C(B'og&>?>>((D,=,=,@,@(A  $00CC))'8<))+**==?STr@   N)r   r   r   r   r?   r   r   r   r   r   r   r   r   r   r   r@   r>   r   r     s8    2
>7,1"-.)7
,(8Ur@   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	AdminDisplayMethodTestsz)Test admin display methods and edge casesc                     t               | _        t        t        | j                        | _        t        t        | j                        | _        t        j                  j                  dddd      | _        y)r   r!   r"   r   r$   N)r   r4   r   r   r5   r   r   r   r   r6   r7   ru   r<   s    r>   r?   zAdminDisplayMethodTests.setUp  sX    #+'@'@LL,,$	 - 
	r@   c                     t         j                  j                  dt        ddd      | j                  dddi      }| j
                  j                  |      }| j                  d|       | j                  | j                  j                  |       y	)
z-Test created_by display when user has no nameNo Name Testr%   r&   r(   r   datar+   r,   r.   r/   r0   No NameN)	r   r6   r:   r
   ru   r5   created_by_displayrD   r   r=   r;   rF   s      r>   test_created_by_display_no_namez7AdminDisplayMethodTests.test_created_by_display_no_name  sx    &&D!Q'yy'( ' 
 ""55f=i(diioov.r@   c                     t         j                  j                  dt        ddd      ddddi      }| j                  j                  |      }| j                  d	|       y)
z$Test created_by display when no userzOrphan Testr%   r&   Nr(   r   r   r   zUnknown User)r   r6   r:   r
   r5   r   rD   r   s      r>   test_created_by_display_no_userz7AdminDisplayMethodTests.test_created_by_display_no_user  s^    &&D!Q''( ' 
 ""55f=nf-r@   c                 :   t         j                  j                  d| j                  t	        j
                         dddddddddi      }| j                  j                  |      }| j                  d|       | j                  | j                  j                  |       y	)
z.Test LiuYao user display when user has no namer   r   r   r(   r   r#   r   r   N)
r   r6   r:   ru   r	   r   r   r   rD   r   )r=   entryrF   s      r>    test_liuyao_user_display_no_namez8AdminDisplayMethodTests.test_liuyao_user_display_no_name  s    %%#,,.sssss'#V, & 
 ""//6i(diioov.r@   c                     t         j                  j                  dt        ddd      | j                  dddi      }| j
                  j                  |      }| j                  |       y)	z,Test AI analysis display with malformed datazMalformed Testr%   r&   r(   invalid	structurer   N)r   r6   r:   r
   ru   r5   r   r}   r   s      r>   'test_ai_analysis_display_malformed_dataz?AdminDisplayMethodTests.test_ai_analysis_display_malformed_data  sb    &&!D!Q'yy'"K0 ' 
 ""66v>V$r@   c                 ^   t         j                  j                  dt        ddd      | j                  dd      }t        j                  |dt        d      	      5  | j                  j                  |      }| j                  |       | j                  d
|       ddd       y# 1 sw Y   yxY w)z+Test AI analysis display exception handlingzException Testr%   r&   r(   Nr   r0   z
Test error)r   z(No structured analysis content available)r   r6   r:   r
   ru   r   objectr   r5   r   r}   rD   r   s      r>   +test_ai_analysis_display_exception_handlingzCAdminDisplayMethodTests.test_ai_analysis_display_exception_handling  s     &&!D!Q'yy' ' 
 \\&-Y|=TU&&::6BF  (MMDfM	 VUUs   ?B##B,N)
r   r   r   r   r?   r   r   r   r   r   r   r@   r>   r   r     s$    3
/./%Nr@   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	AdminActionEdgeCaseTestsz4Test edge cases and error handling for admin actionsc                     t               | _        t               | _        t	        t
        | j                        | _        t        j                  j                  dddd      | _
        y)r   r   r   T)r   r   r   r    N)r   r3   r   r4   r   r   r5   r   r6   r7   r8   r<   s    r>   r?   zAdminActionEdgeCaseTests.setUp  sO    %'#+'@,,22%	 3 
r@   c                    | j                   j                  d      }| j                  |_        t	        |di        t	        |dt        |             t        j                  j                         }| j                  j                  ||       y)z*Test resolving reports with empty querysetrk   rl   rm   N)r3   rt   r8   ru   rv   r   r   r6   noner5   ry   r   s      r>   #test_resolve_reports_empty_querysetz<AdminActionEdgeCaseTests.test_resolve_reports_empty_queryset  sh    ,,##C(B'og&>?>>&&( 	..wAr@   c           	         t         j                  j                  dd      }t        j                  j	                  dt        ddd      |ddd	id
d      }t        j                  j	                  dt        ddd      |dddid
d      }t        j                  j	                  dt        ddd      |dddid      }| j                  j                  d      }| j                  |_	        t        |di        t        |dt        |             t        j                  j                  |j                  |j                  |j                  g      }t        d      5  | j                  j!                  ||       ddd       |j#                          |j#                          |j#                          | j%                  |j&                  d       | j%                  |j&                  d       | j)                  |j*                         y# 1 sw Y   xY w)z*Test resolving reports with mixed statusesr!   r"   )r   r   zPending Reportr%   r&   r(   r   data1TrI   r   zAlready Resolveddata2rQ   zNot Reporteddata3F)r+   r,   r.   r/   r0   rM   rk   rl   rm   r   rp   N)r   r6   r7   r   r:   r
   r3   rt   r8   ru   rv   r   rw   ro   r   r5   ry   rz   r{   rN   assertFalserM   )r=   ru   person1person2person3r   r   s          r>   #test_resolve_reports_mixed_statusesz<AdminActionEdgeCaseTests.test_resolve_reports_mixed_statuses'  s   ||''$ ( 
 ..''!D!Q'')#'( ( 
 ..''#D!Q'')#') ( 
 ..''D!Q'')#( ( 
 ,,##C(B'og&>?>>((WZZ0T(U@A227HE B 	!!!33Z@33Z@778 BAs   G>>Hc                     t        | j                  j                        }|d   d   }g d}|D ]  }| j                  ||        |d   d   }g d}|D ]  }| j                  ||        y)z6Test that admin fieldsets include all reporting fieldszBaZi Analysis Reportsfields)rM   rq   rr   bazi_report_timestamprN   bazi_report_admin_notesr~   zNumber Analysis Reports)ra   r   number_report_messagenumber_report_timestamprb   number_report_admin_notesnumber_report_resolved_atN)dictr5   	fieldsetsrD   )r=   person_fieldsetsbazi_fieldsexpected_bazi_fieldsfieldnumber_fieldsexpected_number_fieldss          r>   test_admin_fieldsets_coveragez6AdminActionEdgeCaseTests.test_admin_fieldsets_coverage_  s       1 1 ; ;<&'>?I 
 *EMM%- * ))BCHM"
 ,EMM%/ ,r@   c                 j    | j                   j                  }g d}|D ]  }| j                  ||        y)z5Test that admin list filters include reporting fields)rN   rb   rM   ra   N)r5   list_filterrD   )r=   person_filtersexpected_filtersfilter_fields       r>   )test_admin_list_filters_include_reportingzBAdminActionEdgeCaseTests.test_admin_list_filters_include_reportingx  s5    **66

 -LMM,7 -r@   c                 j    | j                   j                  }ddg}|D ]  }| j                  ||        y)z6Test that admin search fields include reporting fieldsrr   r	  N)r5   search_fieldsrD   )r=   person_search_fieldsexpected_search_fieldssearch_fields       r>   *test_admin_search_fields_include_reportingzCAdminActionEdgeCaseTests.test_admin_search_fields_include_reporting  s9    #00>>"79P!Q2LMM,(<= 3r@   N)
r   r   r   r   r?   r   r  r  r  r!  r   r@   r>   r   r   
  s%    >

B69p02
8>r@   r   N)!r   django.testr   r   django.contrib.admin.sitesr   django.contrib.authr   django.contrib.adminr   (django.contrib.messages.storage.fallbackr   django.utilsr	   datetimer
   r   unittest.mockr   r   bazi.modelsr   
bazi.adminr   liuyao.modelsr   liuyao.adminr   r   r   r   r   r   r   r@   r>   <module>r.     sy   	 1 0 . + D !  *  "   $qDx qDh\Ux \U~XNh XNvA>x A>r@   