Ë
    Qí8ii  ã                  ó”   — 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 dd
lmZ d„ Z G d„ de«      Zy)z$API tests for transaction endpoints.é    )Úannotations)Ú	timedelta)ÚDecimal)Úreverse)Útimezone)Ústatus)Ú	APIClientÚAPITestCase)ÚTransaction)ÚUserc                ó8   — t        | t        «      r	d| v r| d   S | S )z1Handle paginated and non-paginated DRF responses.Úresults)Ú
isinstanceÚdict)Úpayloads    úS/home/cursorai/projects/telegram-earn/backend/apps/transactions/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	)ÚTransactionApiTestsc                ó¼   — t         j                  j                  ddd¬«      | _        t	        «       | _        | j
                  j                  | j                  ¬«       y )Ni)#  ÚTxUserÚtxuser©Útelegram_user_idÚ
first_nameÚusername)Úuser)r   ÚobjectsÚcreate_userr   r	   ÚclientÚforce_authenticate)Úselfs    r   ÚsetUpzTransactionApiTests.setUp   sJ   € Ü—L‘L×,Ñ,Ø!ØØð -ó 
ˆŒ	ô
  “kˆŒØ�‰×&Ñ&¨D¯I©IÐ&Õ6r   c                ó    — t        «       }|j                  t        d«      «      }| j                  |j                  t
        j                  «       y)z&Unauthenticated requests are rejected.útransaction-listN)r	   Úgetr   ÚassertEqualÚstatus_coder   ÚHTTP_401_UNAUTHORIZED)r#   r!   Úresponses      r   Útest_requires_authenticationz0TransactionApiTests.test_requires_authentication"   s9   € ä“ˆØ—:‘:œgÐ&8Ó9Ó:ˆØ×Ñ˜×-Ñ-¬v×/KÑ/KÕLr   c           
     ó  — t         j                  j                  ddd¬«      }t        j                  j	                  | j
                  t        j                  t        d«      t        j                  t        d«      t        d«      ¬«      }t        j                  j	                  |t        j                  t        d«      t        j                  t        d	«      t        d
«      ¬«       | j                  j                  t        d«      «      }| j                  |j                  t        j                   «       t#        |j$                  «      }| j                  t'        |«      d«       | j                  |d   d   |j(                  «       y)z4Authenticated user only sees their own transactions.i*#  ÚOtherÚotherr   ú
5.00000000Ú0©r   Útransaction_typeÚamountr   Úbalance_beforeÚbalance_afterú
2.00000000z10.00000000z
8.00000000r&   é   r   ÚidN)r   r   r    r   Úcreater   ÚTYPE_REWARDr   ÚSTATUS_COMPLETEDÚTYPE_WITHDRAWALr!   r'   r   r(   r)   r   ÚHTTP_200_OKr   ÚdataÚlenr9   )r#   Ú
other_userÚtx_userr+   r   s        r   Ú)test_list_is_scoped_to_authenticated_userz=TransactionApiTests.test_list_is_scoped_to_authenticated_user(   s,  € ä—\‘\×-Ñ-Ø!¨gÀð .ó 
ˆ
ô ×%Ñ%×,Ñ,Ø—‘Ü(×4Ñ4Ü˜<Ó(Ü×/Ñ/Ü" 3›<Ü! ,Ó/ð -ó 
ˆô 	×Ñ×"Ñ"ØÜ(×8Ñ8Ü˜<Ó(Ü×/Ñ/Ü" =Ó1Ü! ,Ó/ð 	#ô 	
ð —;‘;—?‘?¤7Ð+=Ó#>Ó?ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñœ˜W› qÔ)Ø×Ñ˜ ™ DÑ)¨7¯:©:Õ6r   c           
     ó  — t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d«      ¬«       t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d«      ¬«      }t        d«      }| j                  j                  |dt         j                  i«      }| j                  |j                  t        j                  «       t        |j                   «      }| j                  t#        |«      d«       | j                  |d	   d
   |j$                  «       y)z9GET /transactions supports filtering by transaction type.ú
3.00000000r1   r2   ú
1.00000000z
4.00000000r&   Útyper8   r   r9   N)r   r   r:   r   ÚTYPE_COMMISSIONr   r<   r;   r   r!   r'   r(   r)   r   r>   r   r?   r@   r9   )r#   Ú	reward_txÚurlr+   r   s        r   Útest_filter_by_transaction_typez3TransactionApiTests.test_filter_by_transaction_typeE   s   € ä×Ñ×"Ñ"Ø—‘Ü(×8Ñ8Ü˜<Ó(Ü×/Ñ/Ü" 3›<Ü! ,Ó/ð 	#ô 	
ô  ×'Ñ'×.Ñ.Ø—‘Ü(×4Ñ4Ü˜<Ó(Ü×/Ñ/Ü" <Ó0Ü! ,Ó/ð /ó 
ˆ	ô Ð(Ó)ˆØ—;‘;—?‘? 3¨´×1HÑ1HÐ(IÓJˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñœ˜W› qÔ)Ø×Ñ˜ ™ DÑ)¨9¯<©<Õ8r   c           
     óÖ  — t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d«      ¬«       t        d«      }| j                  j                  |ddi«      }| j                  |j                  t        j                  «       t        |j                  «      }| j                  t!        |«      d«       y)	z;Unknown type filter should not error and returns empty set.rF   r1   r2   r&   rG   Únonexistentr   N)r   r   r:   r   r;   r   r<   r   r!   r'   r(   r)   r   r>   r   r?   r@   )r#   rJ   r+   r   s       r   Ú+test_filter_unknown_type_returns_empty_listz?TransactionApiTests.test_filter_unknown_type_returns_empty_list`   s¯   € ä×Ñ×"Ñ"Ø—‘Ü(×4Ñ4Ü˜<Ó(Ü×/Ñ/Ü" 3›<Ü! ,Ó/ð 	#ô 	
ô Ð(Ó)ˆØ—;‘;—?‘? 3¨°Ð(?Ó@ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñœ˜W› qÕ)r   c           
     ó�  — t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d«      ¬«      }t         j                  j                  |j                  ¬«      j                  t        j                  «       t        d¬«      z
  ¬«       t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d	«      ¬«      }| j                  j                  t!        d
«      «      }| j#                  |j$                  t&        j(                  «       t+        |j,                  «      }| j#                  |D �cg c]  }|d   ‘Œ	 c}|j                  |j                  g«       yc c}w )z-Most recent transactions should appear first.rF   r1   r2   )r9   r8   )Údays)Ú
created_atr7   z-1.00000000r&   r9   N)r   r   r:   r   r;   r   r<   Úfilterr9   Úupdater   Únowr   r=   r!   r'   r   r(   r)   r   r>   r   r?   )r#   ÚolderÚnewerr+   r   Útxs         r   Ú)test_list_orders_descending_by_created_atz=TransactionApiTests.test_list_orders_descending_by_created_atr   sR  € ä×#Ñ#×*Ñ*Ø—‘Ü(×4Ñ4Ü˜<Ó(Ü×/Ñ/Ü" 3›<Ü! ,Ó/ð +ó 
ˆô 	×Ñ×"Ñ" e§h¡hÐ"Ó/×6Ñ6Ü—|‘|“~¬	°qÔ(9Ñ9ð 	7ô 	
ô ×#Ñ#×*Ñ*Ø—‘Ü(×8Ñ8Ü˜<Ó(Ü×/Ñ/Ü" <Ó0Ü! -Ó0ð +ó 
ˆð —;‘;—?‘?¤7Ð+=Ó#>Ó?ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜hŸm™mÓ,ˆØ×Ñ©WÓ5©W r˜"˜T›(¨WÑ5¸¿¹À%Ç(Á(Ð7KÕLùÒ5s   ÆGc           
     óº  — t         j                  j                  ddd¬«      }t        j                  j	                  |t        j
                  t        d«      t        j                  t        d«      t        d«      ¬«      }t        d|j                  g¬	«      }| j                  j                  |«      }| j                  |j                  t        j                  «       y
)z5User cannot access another user's transaction detail.i'  r.   Ú	otheruserr   r0   r1   r2   ztransaction-detail)ÚargsN)r   r   r    r   r:   ÚTYPE_DEPOSITr   r<   r   r9   r!   r'   r(   r)   r   ÚHTTP_404_NOT_FOUND)r#   rA   Úother_txrJ   r+   s        r   Ú1test_retrieve_other_users_transaction_returns_404zETransactionApiTests.test_retrieve_other_users_transaction_returns_404Ž   s®   € ä—\‘\×-Ñ-Ø!¨gÀð .ó 
ˆ
ô ×&Ñ&×-Ñ-ØÜ(×5Ñ5Ü˜<Ó(Ü×/Ñ/Ü" 3›<Ü! ,Ó/ð .ó 
ˆô Ð*°(·+±+°Ô?ˆØ—;‘;—?‘? 3Ó'ˆà×Ñ˜×-Ñ-¬v×/HÑ/HÕIr   c                ój  — t         j                  j                  | j                  t         j                  t        d«      t         j                  t        d«      t        d«      dddddœ¬«	      }| j                  j                  t        d	«      «      }| j                  |j                  t        j                  «       t        |j                  «      d
   }| j                  |d   |j                   «       | j                  |d   d«       | j                  |d   d«       | j                  |d   d   d«       y)z6Serializer should include blockchain/hash/data fields.rE   r1   ÚtronÚ0xabczhttps://explorer/0xabcÚtest)Úexplorer_linkÚnote)	r   r3   r4   r   r5   r6   Ú
blockchainÚtransaction_hashr?   r&   r   r9   rf   rg   r?   re   N)r   r   r:   r   r\   r   ÚSTATUS_PENDINGr!   r'   r   r(   r)   r   r>   r   r?   r9   )r#   rW   r+   Úresults       r   Útest_returns_metadata_fieldsz0TransactionApiTests.test_returns_metadata_fields¡   s   € ä× Ñ ×'Ñ'Ø—‘Ü(×5Ñ5Ü˜<Ó(Ü×-Ñ-Ü" 3›<Ü! ,Ó/ØØ$Ø#;ÀVÑLð (ó 

ˆð —;‘;—?‘?¤7Ð+=Ó#>Ó?ˆà×Ñ˜×-Ñ-¬v×/AÑ/AÔBÜ˜XŸ]™]Ó+¨AÑ.ˆØ×Ñ˜ ™ r§u¡uÔ-Ø×Ñ˜ Ñ-¨vÔ6Ø×Ñ˜Ð 2Ñ3°WÔ=Ø×Ñ˜ ™¨Ñ/°Õ8r   N)ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__r$   r,   rC   rK   rN   rX   r_   rj   © r   r   r   r      s-   „ ó7òMò7ò:9ò6*ò$Mò8Jó&9r   r   N)Ú__doc__Ú
__future__r   Údatetimer   Údecimalr   Údjango.urlsr   Údjango.utilsr   Úrest_frameworkr   Úrest_framework.testr	   r
   Úapps.transactions.modelsr   Úapps.users.modelsr   r   r   rp   r   r   Ú<module>r{      s6   ðÙ *å "å Ý å Ý !Ý !ß 6å 0Ý "òô^9˜+õ ^9r   