Ë
    %xEi)0  ã                   ó~   — d 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  G d
„ de«      Zy)z4Tests for referral investment summary API endpoints.é    )ÚDecimal)ÚTestCase)Útimezone)Ú	APIClient)Ústatus)ÚUser)Ú
Investment)Ú
Commissionc                   ó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)Ú!ReferralInvestmentSummaryTestCasez;Test referral network with investment summary calculations.c                 ó„  — t        «       | _        t        j                  j	                  ddd¬«      | _        t        j                  j	                  ddd| j
                  ¬«      | _        t        j                  j	                  d	d
d| j
                  ¬«      | _        | j                  j                  | j
                  ¬«       y)zSet up test data.i² ÚUplineÚupline_user)Útelegram_user_idÚ
first_nameÚusernameid Ú	Downline1Ú	downline1©r   r   r   Úreferred_byi Ú	Downline2Ú	downline2©ÚuserN)	r   Úclientr   ÚobjectsÚcreate_userÚupliner   r   Úforce_authenticate)Úselfs    ú]/home/cursorai/projects/telegram-earn/backend/apps/referrals/tests/test_investment_summary.pyÚsetUpz'ReferralInvestmentSummaryTestCase.setUp   s¦   € ä“kˆŒô —l‘l×.Ñ.Ø#ØØ"ð /ó 
ˆŒô
 Ÿ™×1Ñ1Ø#Ø"Ø ØŸ™ð	 2ó 
ˆŒô Ÿ™×1Ñ1Ø#Ø"Ø ØŸ™ð	 2ó 
ˆŒð 	�‰×&Ñ&¨D¯K©KÐ&Õ8ó    c           	      óÆ  — | j                   j                  d«      }| j                  |j                  t        j
                  «       | j                  t        |j                  d   «      d«       |j                  d   D ]b  }| j                  t        t        |d   «      «      t        d«      «       | j                  t        t        |d   «      «      t        d«      «       Œd y)zOTest referral network returns zero investment totals when no investments exist.ú/api/referrals/Úresultsé   Úactive_investment_totalÚ0Útotal_investmentN)
r   ÚgetÚassertEqualÚstatus_coder   ÚHTTP_200_OKÚlenÚdatar   Ústr)r    ÚresponseÚreferrals      r!   Ú$test_referral_network_no_investmentszFReferralInvestmentSummaryTestCase.test_referral_network_no_investments+   s®   € à—;‘;—?‘?Ð#4Ó5ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBØ×Ñœ˜XŸ]™]¨9Ñ5Ó6¸Ô:à Ÿ™ iÔ0ˆHØ×ÑœW¤S¨Ð2KÑ)LÓ%MÓNÔPWÐX[ÓP\Ô]Ø×ÑœW¤S¨Ð2DÑ)EÓ%FÓGÌÐQTËÕVñ 1r#   c                 óª  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       ‰ j                  j                  d«      }‰ j                  |j                  t        j                  «       t        ˆ fd„|j                   d	   D «       «      }‰ j                  t	        t#        |d
   «      «      t	        d«      «       ‰ j                  t	        t#        |d   «      «      t	        d«      «       y)z?Test pending investments are included in both active and total.ú100.00000000é   ú1.00éx   ©Údays©r   ÚamountÚtierÚdaily_reward_rateÚduration_daysr   Ú
start_dateÚend_dater%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­w©ÚidN©r   rE   ©Ú.0Úrr    s     €r!   Ú	<genexpr>zcReferralInvestmentSummaryTestCase.test_referral_network_with_pending_investments.<locals>.<genexpr>G   ó,   øè ø€ ÐbÑ)A AÀQÀtÁWÐPT×P^ÑP^×PaÑPaÓEaœaÑ)Aùó   ƒ!,¥,r&   r(   r*   N)r	   r   Úcreater   r   ÚSTATUS_PENDINGr   ÚnowÚ	timedeltar   r+   r,   r-   r   r.   Únextr0   r1   ©r    r2   Údownline1_datas   `  r!   Ú.test_referral_network_with_pending_investmentszPReferralInvestmentSummaryTestCase.test_referral_network_with_pending_investments6   sü   ø€ ô 	×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×,Ñ,Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜÓb¨¯©°yÒ)AÓbÓbˆà×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZhÓRiÔjØ×Ñœ¤ ^Ð4FÑ%GÓ!HÓIÌ7ÐSaÓKbÕcr#   c                 óV  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d	   D «       «      }‰ j                  t	        t        |d
   «      «      t	        d«      «       ‰ j                  t	        t        |d   «      «      t	        d«      «       y)z>Test active investments are included in both active and total.z500.50000000r'   ú1.50é‚   r:   r<   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zbReferralInvestmentSummaryTestCase.test_referral_network_with_active_investments.<locals>.<genexpr>[   rK   rL   r&   r(   r*   N©r	   r   rM   r   r   ÚSTATUS_ACTIVEr   rO   rP   r   r+   rQ   r0   r,   r1   rR   s   `  r!   Ú-test_referral_network_with_active_investmentszOReferralInvestmentSummaryTestCase.test_referral_network_with_active_investmentsL   sÞ   ø€ ä×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆà×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZhÓRiÔjØ×Ñœ¤ ^Ð4FÑ%GÓ!HÓIÌ7ÐSaÓKbÕcr#   c                 ó„  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  d¬«      z
  t        j                  «       t        j                  d¬«      z
  ¬«       ‰ j                  j                  d	«      }t        ˆ fd
„|j                  d   D «       «      }‰ j                  t	        t        |d   «      «      t	        d«      «       ‰ j                  t	        t        |d   «      «      t	        d«      «       y)z>Test completed investments are NOT in active but ARE in total.ú1000.00000000é   ú2.00éŒ   é–   r:   é
   r<   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zeReferralInvestmentSummaryTestCase.test_referral_network_with_completed_investments.<locals>.<genexpr>o   rK   rL   r&   r(   r)   r*   N)r	   r   rM   r   r   ÚSTATUS_COMPLETEDr   rO   rP   r   r+   rQ   r0   r,   r1   rR   s   `  r!   Ú0test_referral_network_with_completed_investmentszRReferralInvestmentSummaryTestCase.test_referral_network_with_completed_investments`   sî   ø€ ä×Ñ×!Ñ!Ø—‘Ü˜?Ó+ØÜ% f›oØÜ×.Ñ.Ü—|‘|“~¬×(:Ñ(:ÀÔ(DÑDÜ—\‘\“^¤h×&8Ñ&8¸bÔ&AÑAð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆà×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZ]ÓR^Ô_Ø×Ñœ¤ ^Ð4FÑ%GÓ!HÓIÌ7ÐSbÓKcÕdr#   c                 ó´  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       t         j                  j                  ‰ j                  t	        d«      dt	        d	«      d
t         j                  t        j                  «       t        j                  «       t        j                  d
¬«      z   ¬«       t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j                  t        j                  «       t        j                  d¬«      z
  t        j                  «       t        j                  d¬«      z
  ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d   D «       «      }‰ j                  t	        t!        |d   «      «      t	        d«      «       ‰ j                  t	        t!        |d   «      «      t	        d«      «       y)z3Test correct totals with mixed investment statuses.r6   r7   r8   r9   r:   r<   z500.00000000r'   rV   rW   r]   r^   r_   r`   ra   rb   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zdReferralInvestmentSummaryTestCase.test_referral_network_mixed_investment_statuses.<locals>.<genexpr>š   rK   rL   r&   r(   z600.00000000r*   z1600.00000000N)r	   r   rM   r   r   rN   r   rO   rP   rZ   rd   r   r+   rQ   r0   r,   r1   rR   s   `  r!   Ú/test_referral_network_mixed_investment_statuseszQReferralInvestmentSummaryTestCase.test_referral_network_mixed_investment_statusest   s¶  ø€ ô 	×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×,Ñ,Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ô 	×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ô 	×Ñ×!Ñ!Ø—‘Ü˜?Ó+ØÜ% f›oØÜ×.Ñ.Ü—|‘|“~¬×(:Ñ(:ÀÔ(DÑDÜ—\‘\“^¤h×&8Ñ&8¸bÔ&AÑAð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆð 	×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZhÓRiÔjà×Ñœ¤ ^Ð4FÑ%GÓ!HÓIÌ7ÐSbÓKcÕdr#   c                 ó°  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       t         j                  j                  ‰ j                  t	        d«      dt	        d	«      d
t         j
                  t        j                  «       t        j                  «       t        j                  d
¬«      z   ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d   D «       «      }t        ˆ fd„|j                  d   D «       «      }‰ j                  t	        t        |d   «      «      t	        d«      «       ‰ j                  t	        t        |d   «      «      t	        d«      «       y)z?Test investment totals calculated separately for each downline.z300.00000000r7   r8   r9   r:   r<   z700.00000000r'   rV   rW   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   z]ReferralInvestmentSummaryTestCase.test_referral_network_multiple_downlines.<locals>.<genexpr>½   rK   rL   r&   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   )r   rE   rG   s     €r!   rJ   z]ReferralInvestmentSummaryTestCase.test_referral_network_multiple_downlines.<locals>.<genexpr>¾   rK   rL   r(   N)r	   r   rM   r   r   rZ   r   rO   rP   r   r   r+   rQ   r0   r,   r1   )r    r2   rS   Údownline2_datas   `   r!   Ú(test_referral_network_multiple_downlineszJReferralInvestmentSummaryTestCase.test_referral_network_multiple_downlines¡   s\  ø€ ô 	×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ô 	×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆÜÓb¨¯©°yÒ)AÓbÓbˆà×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZhÓRiÔjØ×Ñœ¤ ^Ð4MÑ%NÓ!OÓPÔRYÐZhÓRiÕjr#   c                 óú  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d	   D «       «      }t	        t        |d
   «      «      }‰ j                  |t	        d«      «       y)z4Test investment totals maintain 8-decimal precision.z123.45678901r7   r8   r9   r:   r<   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zaReferralInvestmentSummaryTestCase.test_referral_network_high_precision_amounts.<locals>.<genexpr>Ò   rK   rL   r&   r(   N)r	   r   rM   r   r   rZ   r   rO   rP   r   r+   rQ   r0   r1   r,   )r    r2   rS   r=   s   `   r!   Ú,test_referral_network_high_precision_amountszNReferralInvestmentSummaryTestCase.test_referral_network_high_precision_amountsÃ   s½   ø€ ä×Ñ×!Ñ!Ø—‘Ü˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆô œ˜^Ð,EÑFÓGÓHˆØ×Ñ˜¤¨Ó!8Õ9r#   c                 óÆ   — | j                   j                  d¬«       | j                   j                  d«      }| j                  |j                  t
        j                  «       y)z)Test unauthenticated request is rejected.Nr   r%   )r   r   r+   r,   r-   r   ÚHTTP_401_UNAUTHORIZED)r    r2   s     r!   Ú%test_referral_network_unauthenticatedzGReferralInvestmentSummaryTestCase.test_referral_network_unauthenticatedØ   sF   € à�‰×&Ñ&¨DÐ&Ô1Ø—;‘;—?‘?Ð#4Ó5ˆà×Ñ˜×-Ñ-¬v×/KÑ/KÕLr#   c                 ó   — t         j                  j                  ddd| j                  ¬«      }t        j                  j                  |t        d«      dt        d«      dt        j                  t        j                  «       t        j                  «       t        j                  d¬	«      z   ¬
«       | j                  j                  d«      }| j                  t        |j                  d   «      d«       |j                  d   D �cg c]  }|d   ‘Œ	 }}| j!                  | j                  j"                  |«       | j!                  | j$                  j"                  |«       | j'                  |j"                  |«       yc c}w )z?Test only direct referrals (Level 1) are included, not Level 2.iÈ ÚLevel2Úlevel2r   z999.00000000r^   r_   r`   r:   r<   r%   r&   r'   rE   N)r   r   r   r   r	   rM   r   rZ   r   rO   rP   r   r+   r,   r/   r0   ÚassertInrE   r   ÚassertNotIn)r    Úlevel2_userr2   rI   Úuser_idss        r!   Ú+test_referral_network_only_direct_referralszMReferralInvestmentSummaryTestCase.test_referral_network_only_direct_referralsß   s,  € ô —l‘l×.Ñ.Ø#ØØØŸ™ð	 /ó 
ˆô 	×Ñ×!Ñ!ØÜ˜>Ó*ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆð 	×Ñœ˜XŸ]™]¨9Ñ5Ó6¸Ô:Ø%-§]¡]°9Ò%=Ó>Ñ%= �A�d“GÐ%=ˆÐ>Ø�‰�d—n‘n×'Ñ'¨Ô2Ø�‰�d—n‘n×'Ñ'¨Ô2Ø×Ñ˜Ÿ™¨Õ2ùò ?s   ÄE;c                 óö  ‡ — t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d	   D «       «      }‰ j                  t	        t        |d
   «      «      t	        d«      «       y)z/Test handling of very large investment amounts.z999999999.99999999é   z3.50é´   r:   r<   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zcReferralInvestmentSummaryTestCase.test_referral_network_large_investment_amounts.<locals>.<genexpr>  rK   rL   r&   r(   z1000000000.00000000NrY   rR   s   `  r!   Ú.test_referral_network_large_investment_amountszPReferralInvestmentSummaryTestCase.test_referral_network_large_investment_amountsý   s¼   ø€ ä×Ñ×!Ñ!Ø—‘ÜÐ/Ó0ØÜ% f›oØÜ×+Ñ+Ü—|‘|“~Ü—\‘\“^¤h×&8Ñ&8¸cÔ&BÑBð 	"ô 		
ð —;‘;—?‘?Ð#4Ó5ˆäÓb¨¯©°yÒ)AÓbÓbˆà×ÑÜ”C˜Ð'@ÑAÓBÓCÜÐ)Ó*õ	
r#   c                 ó  ‡ — 	 t         j                  j                  ‰ j                  t	        d«      dt	        d«      dt         j
                  t        j                  «       t        j                  «       t        j                  d¬«      z   ¬«       ‰ j                  j                  d«      }t        ˆ fd„|j                  d	   D «       «      }‰ j                  t	        t        |d
   «      «      t	        d«      «       y# t        $ r Y yw xY w)zGTest edge case: investment with zero amount (if allowed by validation).z
0.00000000r7   r8   r9   r:   r<   r%   c              3   ó\   •K  — | ]#  }|d    ‰j                   j                  k(  sŒ |–— Œ% y­wrD   rF   rG   s     €r!   rJ   zaReferralInvestmentSummaryTestCase.test_referral_network_zero_amount_investment.<locals>.<genexpr>#  s,   øè ø€ Ð!fÑ-E¨ÈÈ4ÉÐTX×TbÑTb×TeÑTeÓIe¤!Ñ-EùrL   r&   r(   r)   N)r	   r   rM   r   r   rZ   r   rO   rP   r   r+   rQ   r0   r,   r1   Ú	ExceptionrR   s   `  r!   Ú,test_referral_network_zero_amount_investmentzNReferralInvestmentSummaryTestCase.test_referral_network_zero_amount_investment  sÏ   ø€ ð	Ü×Ñ×%Ñ%Ø—^‘^Ü˜|Ó,ØÜ")¨&£/Ø!Ü!×/Ñ/Ü#Ÿ<™<›>Ü!Ÿ™›¬(×*<Ñ*<À#Ô*FÑFð &ô 	ð —{‘{—‘Ð'8Ó9ˆHÜ!Ó!f¨X¯]©]¸9Ò-EÓ!fÓfˆNà×ÑœW¤S¨Ð8QÑ)RÓ%SÓTÔV]Ð^aÓVbÕcøÜò 	áð	ús   ƒC8C< Ã<	DÄDN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r4   rT   r[   re   rh   rm   rp   rs   r{   r€   r„   © r#   r!   r   r      sJ   „ ÙEò9ò4	Wòdò,dò(eò(+eòZ kòD:ò*Mò3ò<
ó,r#   r   N)rˆ   Údecimalr   Údjango.testr   Údjango.utilsr   Úrest_framework.testr   Úrest_frameworkr   Úapps.users.modelsr   Úapps.investments.modelsr	   Úapps.referrals.modelsr
   r   r‰   r#   r!   Ú<module>r’      s.   ðÙ :å Ý  Ý !Ý )Ý !å "Ý .Ý ,ôZ¨õ Zr#   