Ë
    Ôò8i  ã                  ó¤   — 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mZ dd	lmZmZ dd
lmZ ddlmZ d„ Z G d„ de«      Zy)z,API tests for referral commission endpoints.é    )Úannotations)Ú	timedelta)ÚDecimal)Úreverse)Útimezone)Ústatus)Ú	APIClientÚAPITestCase)Ú
InvestmentÚReward)Ú
Commission)ÚUserc                ó8   — t        | t        «      r	d| v r| d   S | S )z1Handle paginated and non-paginated DRF responses.Úresults)Ú
isinstanceÚdict)Úpayloads    úP/home/cursorai/projects/telegram-earn/backend/apps/referrals/tests/test_views.pyÚget_resultsr      s#   € ä�'œ4Ô  Y°'Ñ%9Ø�yÑ!Ð!Ø€Nó    c                  ó>   — e Zd Zd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)ÚCommissionApiTestsc                ó6  — t         j                  j                  ddd¬«      | _        t         j                  j                  ddd| j                  ¬«      | _        t         j                  j                  d	d
d¬«      | _        t        j                  t        d«      «      }t        j                  «       }t        j                  j                  | j                  t        d«      |d   |d   |d   t        j                  ||t        |d   ¬«      z   ¬«      }t        j                  j                  |t        d«      |j                  «       ¬«      }t         j                  j                  | j                  | j                  |dt        d«      t        d«      t         j"                  ¬«      | _        t         j                  j                  | j                  | j                  |dt        d«      t        d«      t         j&                  ¬«      | _        t         j                  j                  | j
                  | j                  |dt        d«      t        d«      t         j"                  ¬«       t+        «       | _        | j,                  j/                  | j                  ¬«       y )NiA  ÚUplineÚupline)Útelegram_user_idÚ
first_nameÚusernameiB  ÚDownlineÚdownline)r   r   r   Úreferred_byiC  ÚOtherÚotherÚ100ÚtierÚrateÚduration©Údays)ÚuserÚamountr%   Údaily_reward_rateÚduration_daysr   Ú
start_dateÚend_datez
2.00000000)Ú
investmentr+   Úreward_dateé   z50.00z
1.00000000©Úupline_userÚdownline_userÚrewardÚlevelÚcommission_rater+   r   é   z30.00z
0.60000000é   ú20.00z
0.40000000©r*   )r   ÚobjectsÚcreate_userr   r    Úother_upliner   Úget_tier_infor   r   ÚnowÚcreateÚSTATUS_ACTIVEr   r   Údater   ÚSTATUS_PENDINGÚpending_commissionÚSTATUS_DISTRIBUTEDÚdistributed_commissionr	   ÚclientÚforce_authenticate)ÚselfÚ	tier_inforA   r0   r6   s        r   ÚsetUpzCommissionApiTests.setUp   s2  € Ü—l‘l×.Ñ.Ø!ØØð /ó 
ˆŒô
 Ÿ™×0Ñ0Ø!Ø!ØØŸ™ð	 1ó 
ˆŒô !ŸL™L×4Ñ4Ø!ØØð 5ó 
ˆÔô ×,Ñ,¬W°U«^Ó<ˆ	Ü�l‰l‹nˆÜ×'Ñ'×.Ñ.Ø—‘Ü˜5“>Ø˜6Ñ"Ø'¨Ñ/Ø# JÑ/Ü×+Ñ+ØØœ9¨)°JÑ*?Ô@Ñ@ð /ó 	
ˆ
ô —‘×&Ñ&Ø!Ü˜<Ó(ØŸ™›
ð 'ó 
ˆô #-×"4Ñ"4×";Ñ";ØŸ™ØŸ-™-ØØÜ# GÓ,Ü˜<Ó(Ü×,Ñ,ð #<ó #
ˆÔô '1×&8Ñ&8×&?Ñ&?ØŸ™ØŸ-™-ØØÜ# GÓ,Ü˜<Ó(Ü×0Ñ0ð '@ó '
ˆÔ#ô 	×Ñ×!Ñ!Ø×)Ñ)ØŸ-™-ØØÜ# GÓ,Ü˜<Ó(Ü×,Ñ,ð 	"ô 	
ô  “kˆŒØ�‰×&Ñ&¨D¯K©KÐ&Õ8r   c                ó    — t        «       }|j                  t        d«      «      }| j                  |j                  t
        j                  «       y)z&Unauthenticated requests are rejected.úcommission-listN)r	   Úgetr   ÚassertEqualÚstatus_coder   ÚHTTP_401_UNAUTHORIZED)rK   rI   Úresponses      r   Útest_requires_authenticationz/CommissionApiTests.test_requires_authentication]   s9   € ä“ˆØ—:‘:œgÐ&7Ó8Ó9ˆØ×Ñ˜×-Ñ-¬v×/KÑ/KÕLr   c                ó¦  — | j                   j                  t        d«      «      }| j                  |j                  t
        j                  «       t        |j                  «      }| j                  t        |«      d«       |D �ch c]  }|d   ’Œ	 }}| j                  || j                  j                  | j                  j                  h«       yc c}w )z5Authenticated user only sees commissions they earned.rO   r9   ÚidN)rI   rP   r   rQ   rR   r   ÚHTTP_200_OKr   ÚdataÚlenÚassertSetEqualrF   rW   rH   ©rK   rT   r   ÚitemÚreturned_idss        r   Ú*test_commissions_are_scoped_to_upline_userz=CommissionApiTests.test_commissions_are_scoped_to_upline_userc   s¦   € à—;‘;—?‘?¤7Ð+<Ó#=Ó>ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñœ˜W› qÔ)Ù/6Ó7©w t˜˜T›
¨wˆÐ7Ø×ÑØØ×$Ñ$×'Ñ'¨×)DÑ)D×)GÑ)GÐHõ	
ùò 8s   ÂCc                ó~  — t        d«      }| j                  j                  |dt        j                  i«      }| j                  |j                  t        j                  «       t        |j                  «      }| j                  t        |«      d«       | j                  |d   d   | j                  j                  «       y)z.GET /commissions supports filtering by status.rO   r   r2   r   rW   N)r   rI   rP   r   rG   rQ   rR   r   rX   r   rY   rZ   rH   rW   )rK   ÚurlrT   r   s       r   Útest_filter_by_statusz(CommissionApiTests.test_filter_by_statusp   s�   € äÐ'Ó(ˆØ—;‘;—?‘? 3¨´:×3PÑ3PÐ(QÓRˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñœ˜W› qÔ)Ø×Ñ˜ ™ DÑ)¨4×+FÑ+F×+IÑ+IÕJr   c                ó  — | j                   j                  t        d«      ddi«      }| j                  |j                  t
        j                  «       | j                  t        t        |j                  «      «      d«       y)z<Unknown status filter yields an empty list instead of error.rO   r   zdoes-not-existr   N)
rI   rP   r   rQ   rR   r   rX   rZ   r   rY   ©rK   rT   s     r   Ú-test_filter_unknown_status_returns_empty_listz@CommissionApiTests.test_filter_unknown_status_returns_empty_listz   sa   € à—;‘;—?‘?ÜÐ%Ó&¨Ð3CÐ(Dó
ˆð 	×Ñ˜×-Ñ-¬v×/AÑ/AÔBØ×Ñœœ[¨¯©Ó7Ó8¸!Õ<r   c           
     ó  — t         j                  j                  | j                  | j                  | j
                  j                  dt        d«      t        d«      t         j                  ¬«      }t         j                  j                  |j                  ¬«      j                  t        j                  «       t        d¬«      z
  ¬«       | j                  j!                  t#        d	«      «      }| j%                  |j&                  t(        j*                  «       t-        |j.                  «      }|D �cg c]  }|d
   ‘Œ	 }}| j%                  |dd | j0                  j                  | j
                  j                  g«       yc c}w )z/Default ordering is newest first by created_at.r:   r;   z
0.20000000r3   ©rW   r2   r(   ©Ú
created_atrO   rW   Nr9   )r   r=   rB   r   r    rF   r6   r   rE   ÚfilterrW   Úupdater   rA   r   rI   rP   r   rQ   rR   r   rX   r   rY   rH   )rK   Úolder_commissionrT   r   r]   r^   s         r   Ú0test_orders_commissions_descending_by_created_atzCCommissionApiTests.test_orders_commissions_descending_by_created_atƒ   s4  € ä%×-Ñ-×4Ñ4ØŸ™ØŸ-™-Ø×*Ñ*×1Ñ1ØÜ# GÓ,Ü˜<Ó(Ü×,Ñ,ð 5ó 
Ðô 	×Ñ×!Ñ!Ð%5×%8Ñ%8Ð!Ó9×@Ñ@Ü—|‘|“~¬	°qÔ(9Ñ9ð 	Aô 	
ð —;‘;—?‘?¤7Ð+<Ó#=Ó>ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆÙ/6Ó7©w t˜˜T›
¨wˆÐ7Ø×ÑØ˜˜!ÐØ×(Ñ(×+Ñ+¨T×-DÑ-D×-GÑ-GÐHõ	
ùò 8s   Ä/E=c                óB  — t         j                  j                  | j                  j                  ¬«      j                  t        j                  «       t        d¬«      z
  ¬«       | j                  j                  t        d«      ddi«      }| j                  |j                  t        j                  «       t!        |j"                  «      }|D �cg c]  }|d   ‘Œ	 }}| j                  |d	d
 | j                  j                  | j$                  j                  g«       y	c c}w )z=Ordering filter supports ascending created_at when requested.rg   r2   r(   rh   rO   Úorderingri   rW   Nr9   )r   r=   rj   rF   rW   rk   r   rA   r   rI   rP   r   rQ   rR   r   rX   r   rY   rH   r\   s        r   Ú0test_orders_commissions_ascending_when_requestedzCCommissionApiTests.test_orders_commissions_ascending_when_requestedœ   sî   € ä×Ñ×!Ñ! T×%<Ñ%<×%?Ñ%?Ð!Ó@×GÑGÜ—|‘|“~¬	°qÔ(9Ñ9ð 	Hô 	
ð —;‘;—?‘?ÜÐ%Ó&¨°\Ð(Bó
ˆð 	×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆÙ/6Ó7©w t˜˜T›
¨wˆÐ7Ø×ÑØ˜˜!ÐØ×$Ñ$×'Ñ'¨×)DÑ)D×)GÑ)GÐHõ	
ùò 8s   ÃDc                ó  — | j                   j                  | j                  ¬«       | j                   j                  t	        d| j
                  j                  g¬«      «      }| j                  |j                  t        j                  «       y)z.Detail view is scoped to authenticated upline.r<   zcommission-detail)ÚargsN)rI   rJ   r?   rP   r   rF   rW   rQ   rR   r   ÚHTTP_404_NOT_FOUNDrd   s     r   Ú2test_retrieve_other_uplines_commission_returns_404zECommissionApiTests.test_retrieve_other_uplines_commission_returns_404®   sg   € à�‰×&Ñ&¨D×,=Ñ,=Ð&Ô>Ø—;‘;—?‘?ÜÐ'¨t×/FÑ/F×/IÑ/IÐ.JÔKó
ˆð 	×Ñ˜×-Ñ-¬v×/HÑ/HÕIr   N)ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__rM   rU   r_   rb   re   rm   rp   rt   © r   r   r   r      s/   „ óA9òFMò
òKò=ò
ò2
ó$Jr   r   N)Ú__doc__Ú
__future__r   Údatetimer   Údecimalr   Údjango.urlsr   Údjango.utilsr   Úrest_frameworkr   Úrest_framework.testr	   r
   Úapps.investments.modelsr   r   Úapps.referrals.modelsr   Úapps.users.modelsr   r   r   rz   r   r   Ú<module>r†      s;   ðÙ 2å "å Ý å Ý !Ý !ß 6ç 6Ý ,Ý "òô\J˜õ \Jr   