Ë
     W=i¨'  ã                   ót   — d 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  G d„ de«      Z G d	„ d
e«      Zy)z 
Tests for wallet_utils models.
é    )ÚDecimal)ÚTestCase)ÚValidationError)ÚAbstractWalletTransactionÚWalletTransaction)ÚTestUserc                   ó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)ÚWalletTransactionModelTestsz"Tests for WalletTransaction model.c           
      ó�  — t         j                  j                  ddddt        d«      t        d«      dd¬«      }| j	                  |j
                  «       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  t        d«      «       | j                  |j                  t        d«      «       | j                  |j                  d«       | j                  |j                  d«       y	)
z#Test creating a transaction record.Úcredit_balanceéœÿÿÿé{   Úcú100.00éè  zTest transaction)ÚwtypeÚiidÚuidÚtypeÚamountÚbalanceÚ
trans_typeÚdescrN)r   ÚobjectsÚcreater   ÚassertIsNotNoneÚidÚassertEqualr   r   r   r   r   r   r   r   ©ÚselfÚtransactions     úR/home/cursorai/projects/telegram-earn/sandbox/test_app/tests/test_wallet_models.pyÚtest_create_transactionz3WalletTransactionModelTests.test_create_transaction   s  € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ØØ$ð 7ó 	
ˆð 	×Ñ˜[Ÿ^™^Ô,Ø×Ñ˜×*Ñ*Ð,<Ô=Ø×Ñ˜Ÿ™¨$Ô/Ø×Ñ˜Ÿ™¨#Ô.Ø×Ñ˜×)Ñ)¨3Ô/Ø×Ñ˜×+Ñ+¬W°XÓ->Ô?Ø×Ñ˜×,Ñ,¬g°hÓ.?Ô@Ø×Ñ˜×/Ñ/°Ô6Ø×Ñ˜×*Ñ*Ð,>Õ?ó    c           
      óP  — t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  d«       t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  d«       y	)
z$Test transaction type field choices.r   r   r   r   r   ©r   r   r   r   r   r   Údz50.00N)r   r   r   r   r   r   )r    Ú
credit_txnÚ	debit_txns      r"   Útest_transaction_type_choicesz9WalletTransactionModelTests.test_transaction_type_choices&   s    € ô '×.Ñ.×5Ñ5Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 6ó 
ˆ
ð 	×Ñ˜Ÿ™¨#Ô.ô &×-Ñ-×4Ñ4Ø"ØØØÜ˜7Ó#Ü˜GÓ$ð 5ó 
ˆ	ð 	×Ñ˜Ÿ™¨Õ-r$   c                 óö   — t         j                  j                  ddddt        d«      t        d«      dddœ¬	«      }| j	                  |j
                  d
   d«       | j	                  |j
                  d   d«       y)zTest extra_data JSONField.r   r   r   r   r   i90  Úbank)Ú
payment_idÚsource)r   r   r   r   r   r   Ú
extra_datar-   r.   N©r   r   r   r   r   r/   r   s     r"   Útest_transaction_extra_dataz7WalletTransactionModelTests.test_transaction_extra_data>   sy   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%Ø&+°vÑ>ð 7ó 
ˆð 	×Ñ˜×/Ñ/°Ñ=¸uÔEØ×Ñ˜×/Ñ/°Ñ9¸6ÕBr$   c           
      óª   — t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  i «       y)zTest extra_data default value.r   r   r   r   r   r&   Nr0   r   s     r"   Ú#test_transaction_extra_data_defaultz?WalletTransactionModelTests.test_transaction_extra_data_defaultM   sQ   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 7ó 
ˆð 	×Ñ˜×/Ñ/°Õ4r$   c           
      óª   — t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  d«       y)	zTest descr default value.r   r   r   r   r   r&   Ú N)r   r   r   r   r   r   r   s     r"   Útest_transaction_descr_defaultz:WalletTransactionModelTests.test_transaction_descr_defaultZ   sQ   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 7ó 
ˆð 	×Ñ˜×*Ñ*¨BÕ/r$   c           
      óª   — t         j                  j                  ddddt        d«      t        d«      d¬«      }| j	                  |j
                  «       y)zTest trans_type can be None.r   r   r   r   r   N)r   r   r   r   r   r   r   )r   r   r   r   ÚassertIsNoner   r   s     r"   Ú$test_transaction_trans_type_nullablez@WalletTransactionModelTests.test_transaction_trans_type_nullableg   sR   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%Øð 7ó 
ˆð 	×Ñ˜+×0Ñ0Õ1r$   c           
      óü  — ddl }t        j                  j                  ddddt	        d«      t	        d«      ¬«      }|j                  d	«       t        j                  j                  ddddt	        d
«      t	        d
«      ¬«      }t        t        j                  j                  «       «      }| j                  |d   j                  |j                  «       | j                  |d   j                  |j                  «       y)z%Test default ordering (newest first).r   Nr   r   r   r   r   r&   g{®Gáz„?z200.00é   )
Útimer   r   r   r   ÚsleepÚlistÚallr   r   )r    r<   Útxn1Útxn2Útransactionss        r"   Útest_transaction_orderingz5WalletTransactionModelTests.test_transaction_orderingu   sÛ   € ó 	ä ×(Ñ(×/Ñ/Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 0ó 
ˆð 	�
‰
�4Ôä ×(Ñ(×/Ñ/Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 0ó 
ˆô Ô-×5Ñ5×9Ñ9Ó;Ó<ˆØ×Ñ˜ a™×+Ñ+¨T¯W©WÔ5Ø×Ñ˜ a™×+Ñ+¨T¯W©WÕ5r$   c           
      ó  — t         j                  j                  ddddt        d«      t        d«      ¬«      }t	        |«      }| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       y	)
zTest __str__ method.r   r   r   r   r   r&   ÚCÚ123N)r   r   r   r   ÚstrÚassertIn)r    r!   Ústr_reprs      r"   Ú&test_transaction_string_representationzBWalletTransactionModelTests.test_transaction_string_representation“   s~   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 7ó 
ˆô �{Ó#ˆØ�‰�c˜8Ô$Ø�‰�h Ô)Ø�‰Ð&¨Ô1Ø�‰�e˜XÕ&r$   c           
      ó  — t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  t        d«      «       | j	                  |j                  t        d«      «       y)z2Test decimal precision (default 2 decimal places).r   r   r   r   z100.99r&   N)r   r   r   r   r   r   r   r   s     r"   Ú"test_transaction_decimal_precisionz>WalletTransactionModelTests.test_transaction_decimal_precision¤   sq   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 7ó 
ˆð 	×Ñ˜×+Ñ+¬W°XÓ->Ô?Ø×Ñ˜×,Ñ,¬g°hÓ.?Õ@r$   c           
      óà   — t         j                  j                  ddddt        d«      t        d«      ¬«      }| j	                  |j
                  d«       | j                  |j                  «       y)z)Test using system user ID (-100) for uid.r   r   r   r   r&   N)r   r   r   r   r   r   r   r   r   s     r"   Útest_transaction_system_user_idz;WalletTransactionModelTests.test_transaction_system_user_id²   sa   € ä'×/Ñ/×6Ñ6Ø"ØØØÜ˜8Ó$Ü˜HÓ%ð 7ó 
ˆð 	×Ñ˜Ÿ™¨$Ô/à×Ñ˜[Ÿ^™^Õ,r$   c                 ó  — t        d«      D ]9  }t        j                  j                  dd|dt	        d«      t	        d«      ¬«       Œ; t        j                  j                  d¬«      }| j                  |j                  «       d	«       t        j                  j                  d¬
«      }| j                  |j                  «       d«       t        j                  j                  d¬«      }| j                  |j                  «       d«       y)zITest that indexes are created (indirectly by checking query performance).é
   r   r   r   r   r&   é   )r   r;   )r   r   )r   r   N)Úranger   r   r   r   Úfilterr   Úcount)r    ÚirB   s      r"   Útest_transaction_indexesz4WalletTransactionModelTests.test_transaction_indexesÁ   sä   € ô �r–ˆAÜ×%Ñ%×,Ñ,Ø&ØØØÜ˜xÓ(Ü Ó)ð -õ ð ô )×0Ñ0×7Ñ7¸AÐ7Ó>ˆØ×Ñ˜×+Ñ+Ó-¨qÔ1ô )×0Ñ0×7Ñ7Ð>NÐ7ÓOˆØ×Ñ˜×+Ñ+Ó-¨rÔ2ô )×0Ñ0×7Ñ7À4Ð7ÓHˆØ×Ñ˜×+Ñ+Ó-¨qÕ1r$   c                 ó  — dD ]@  }dD ]9  }t         j                  j                  |d|dt        d«      t        d«      ¬«       Œ; ŒB t         j                  j	                  dd¬	«      }| j                  |j                  «       d«       y
)zTest composite indexes.)r;   é   é   )r   Úreward_pointsr   r   r   r&   r;   r   )r   r   N)r   r   r   r   rS   r   rT   )r    r   r   rB   s       r"   Ú"test_transaction_composite_indexesz>WalletTransactionModelTests.test_transaction_composite_indexesÚ   s„   € ó ˆCÛ<�Ü!×)Ñ)×0Ñ0ØØØØÜ" 8Ó,Ü# HÓ-ð 1õ ñ =ð ô )×0Ñ0×7Ñ7¸AÐEUÐ7ÓVˆØ×Ñ˜×+Ñ+Ó-¨qÕ1r$   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r*   r1   r3   r6   r9   rC   rJ   rL   rN   rV   r[   © r$   r"   r
   r
      sD   „ Ù,ò@ò..ò0Cò5ò0ò2ò6ò<'ò"Aò-ò2ó22r$   r
   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚAbstractWalletTransactionTestsz*Tests for AbstractWalletTransaction model.c                 óV   — | j                  t        j                  j                  «       y)zKTest that AbstractWalletTransaction is abstract and doesn't create a table.N)Ú
assertTruer   Ú_metaÚabstract)r    s    r"   Ú%test_abstract_model_not_creates_tablezDAbstractWalletTransactionTests.test_abstract_model_not_creates_tableð   s   € à�‰Ô1×7Ñ7×@Ñ@ÕAr$   c                 ó¼  — ddl m}  G d„ dt        «      }| j                  |j                  j
                  «       | j                  t        |d«      «       | j                  t        |d«      «       | j                  t        |d«      «       | j                  t        |d«      «       | j                  t        |d	«      «       | j                  t        |d
«      «       y)zATest creating a custom model extending AbstractWalletTransaction.r   ©Úmodelsc                   ó:   — e Zd ZdZ G d„ dej
                  «      Zy)ú\AbstractWalletTransactionTests.test_custom_model_extends_abstract.<locals>.CustomTransactionzCustom transaction model.c                   ó   — e Zd ZdZy)úaAbstractWalletTransactionTests.test_custom_model_extends_abstract.<locals>.CustomTransaction.MetaÚcustom_transactionsN©r\   r]   r^   Údb_tabler`   r$   r"   ÚMetarn   ú   s   „ Ø0‘r$   rr   N)r\   r]   r^   r_   r   rr   r`   r$   r"   ÚCustomTransactionrl   ø   s   „ Ù+ô1Ð0×5Ñ5õ 1r$   rs   r   r   r   r   r   r   N)Ú	django.dbrj   r   ÚassertFalsere   rf   rd   Úhasattr)r    rj   rs   s      r"   Ú"test_custom_model_extends_abstractzAAbstractWalletTransactionTests.test_custom_model_extends_abstractô   s©   € å$ô	1Ô 9ô 	1ð 	×ÑÐ*×0Ñ0×9Ñ9Ô:ð 	�‰œÐ 1°7Ó;Ô<Ø�‰œÐ 1°5Ó9Ô:Ø�‰œÐ 1°5Ó9Ô:Ø�‰œÐ 1°6Ó:Ô;Ø�‰œÐ 1°8Ó<Ô=Ø�‰œÐ 1°9Ó=Õ>r$   c                 ó  ‡— ddl mŠ  G ˆfd„dt        «      }|j                  j	                  d«      }| j                  |j                  d«       |j                  j	                  d«      }| j                  |j                  d«       y)	z0Test custom model with different decimal places.r   ri   c                   óŒ   •— e Zd ZdZW ° j	                  dd¬«      ZW ° j	                  dd¬«      Z G d„ dej                  «      Zy)úaAbstractWalletTransactionTests.test_custom_model_custom_decimal_places.<locals>.CustomTransactionz/Custom transaction model with 8 decimal places.é   é   )Ú
max_digitsÚdecimal_placesc                   ó   — e Zd ZdZy)úfAbstractWalletTransactionTests.test_custom_model_custom_decimal_places.<locals>.CustomTransaction.MetaÚcustom_transactions_8dpNrp   r`   r$   r"   rr   r€     s   „ Ø4‘r$   rr   N)	r\   r]   r^   r_   ÚDecimalFieldr   r   r   rr   ri   s   €r"   rs   rz     sC   ø„ ÙAÙ×(Ñ(°BÀqÐ(ÓIˆFÙ×)Ñ)°RÈÐ)ÓJˆGô5Ð0×5Ñ5õ 5r$   rs   r   r|   r   N)rt   rj   r   re   Ú	get_fieldr   r~   )r    rs   Úamount_fieldÚbalance_fieldrj   s       @r"   Ú'test_custom_model_custom_decimal_placeszFAbstractWalletTransactionTests.test_custom_model_custom_decimal_places  sm   ø€ å$ö	5Ô 9ô 	5ð )×.Ñ.×8Ñ8¸ÓBˆØ×Ñ˜×4Ñ4°aÔ8à)×/Ñ/×9Ñ9¸)ÓDˆØ×Ñ˜×5Ñ5°qÕ9r$   N)r\   r]   r^   r_   rg   rw   r†   r`   r$   r"   rb   rb   í   s   „ Ù4òBò?ó(:r$   rb   N)r_   Údecimalr   Údjango.testr   Údjango.core.exceptionsr   Úwallet_utils.modelsr   r   Útest_app.modelsr   r
   rb   r`   r$   r"   Ú<module>rŒ      s6   ðñõ Ý  Ý 2ç LÝ $ô^2 (ô ^2ôB,: Xõ ,:r$   