a
    xd                     @   st  d dl Z d dl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mZ d dlmZmZ d	d
lmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ej$Z$e	 Z%eddddd Z&e&edd Z'e&edd Z(G dd deZ)G dd de jZ*G dd deZ+G dd deZ,G dd deZ-ei dG dd deZ.G dd deZ/dS )    N)datetime	timedelta)StringIO)apps)get_user_model)
management)TestCaseoverride_settings)
exceptionsregister   )ChoiceInheritTracking1InheritTracking2InheritTracking3InheritTracking4ModelWithCustomAttrForeignKeyModelWithHistoryInDifferentAppPoll
RestaurantTrackedAbstractBaseATrackedAbstractBaseBTrackedWithAbstractBaseTrackedWithConcreteBaseUserAccessorDefaultUserAccessorOverrideUUIDRegisterModelVoteri     
   )daysc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )RegisterTestc                 C   sN   |  ttj d tjjtd}tjj|dd}|  t|j d d S )Nr   Zpub_datepollZvotesr   )	assertEquallenr   historyallr   objectscreatetoday)selfr$   choice r.   [/var/www/html/Ranjet/env/lib/python3.9/site-packages/simple_history/registry_tests/tests.pytest_register_no_args)   s    z"RegisterTest.test_register_no_argsc                 C   sl   dd }|  t|t | ttj d tjjddd}| ttj d | t|j d d S )Nc                 S   s   | j S N)r'   )modelr.   r.   r/   get_history0   s    z<RegisterTest.test_register_separate_app.<locals>.get_historyr   Zbobpass)usernamepasswordr   )	assertRaisesAttributeErrorUserr%   r&   Z	historiesr(   r)   r*   )r,   r3   userr.   r.   r/   test_register_separate_app/   s    z'RegisterTest.test_register_separate_appc                 C   s<   |  tj ttdd W d    n1 s.0    Y  d S )NZagain)Zmanager_name)r7   r
   MultipleRegistrationsErrorr   r   r,   r.   r.   r/   test_reregister9   s    zRegisterTest.test_reregisterc                 C   s   |  ttj d tjjtd}t	jj|dd}t
jjdd}tjj||d}|  t|j d d}|  |t|j d d t|  d S )	Nr   r"   r#   voter)r5   )r-   r:   r   z#Voter object changed by None as of )r%   r&   r   r'   r(   r   r)   r*   r+   r   r9   str)r,   r$   r-   r:   r?   expectedr.   r.   r/   test_register_custome_records=   s    z*RegisterTest.test_register_custome_recordsc                 C   s\   |  ttj d tj }|  t|j d |j d }| t|j	t
j d S )Nr   r   )r%   r&   r   r'   r(   r)   r*   
assertTrue
isinstance
history_iduuidUUID)r,   entryr'   r.   r.   r/   test_register_history_id_fieldG   s
    
z+RegisterTest.test_register_history_id_fieldN)__name__
__module____qualname__r0   r;   r>   rB   rI   r.   r.   r.   r/   r!   (   s
   

r!   c                   @   s   e Zd Zdd Zdd ZdS )TestUserAccessorc                 C   s   t t ttdrJ d S )NZ!historicaluseraccessordefault_set)r   r   hasattrr9   r=   r.   r.   r/   test_accessor_defaultP   s    z&TestUserAccessor.test_accessor_defaultc                 C   s   t tdd ttdsJ d S )NZmy_history_model_accessor)Zuser_related_name)r   r   rN   r9   r=   r.   r.   r/   test_accessor_overrideT   s    z'TestUserAccessor.test_accessor_overrideN)rJ   rK   rL   rO   rP   r.   r.   r.   r/   rM   O   s   rM   c                   @   s   e Zd Zdd Zdd ZdS )TestInheritedModulec                 C   s2   zddl m} W n ty,   | d Y n0 d S )Nr   )HistoricalConcreteExternalz-HistoricalConcreteExternal is in wrong module)tests.modelsrR   ImportErrorfail)r,   rR   r.   r.   r/   test_using_app_labelZ   s    z(TestInheritedModule.test_using_app_labelc                 C   s2   zddl m} W n ty,   | d Y n0 d S )Nr   )HistoricalConcreteExternal2z.HistoricalConcreteExternal2 is in wrong module)rS   rW   rT   rU   )r,   rW   r.   r.   r/   test_default`   s    z TestInheritedModule.test_defaultN)rJ   rK   rL   rV   rX   r.   r.   r.   r/   rQ   Y   s   rQ   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestTrackingInheritancec                 C   s.   |  tdd tjjjjD tg d d S )Nc                 S   s   g | ]
}|j qS r.   Zattname.0fr.   r.   r/   
<listcomp>k       zFTestTrackingInheritance.test_tracked_abstract_base.<locals>.<listcomp>)idrE   history_change_reasonhistory_datehistory_user_idhistory_type)r%   sortedr   r'   r2   _metafieldsr=   r.   r.   r/   test_tracked_abstract_baseh   s    z2TestTrackingInheritance.test_tracked_abstract_basec                 C   s.   |  tdd tjjjjD tg d d S )Nc                 s   s   | ]}|j V  qd S r1   rZ   r[   r.   r.   r/   	<genexpr>{   s   zETestTrackingInheritance.test_tracked_concrete_base.<locals>.<genexpr>)r`   Ztrackedconcretebase_ptr_idrE   ra   rb   rc   rd   )r%   re   r   r'   r2   rf   rg   r=   r.   r.   r/   test_tracked_concrete_basey   s    
z2TestTrackingInheritance.test_tracked_concrete_basec                 C   sB   |  tj" G dd dtt}W d    n1 s40    Y  d S )Nc                   @   s   e Zd ZdS )z]TestTrackingInheritance.test_multiple_tracked_bases.<locals>.TrackedWithMultipleAbstractBasesN)rJ   rK   rL   r.   r.   r.   r/    TrackedWithMultipleAbstractBases   s   rk   )r7   r
   r<   r   r   )r,   rk   r.   r.   r/   test_multiple_tracked_bases   s    
z3TestTrackingInheritance.test_multiple_tracked_basesc                 C   s.   |  tdd tjjjjD tg d d S )Nc                 s   s   | ]}|j V  qd S r1   rZ   r[   r.   r.   r/   ri      r_   z\TestTrackingInheritance.test_tracked_abstract_and_untracked_concrete_base.<locals>.<genexpr>)r`   Zuntrackedconcretebase_ptr_idrE   ra   rb   rc   rd   )r%   re   r   r'   r2   rf   rg   r=   r.   r.   r/   1test_tracked_abstract_and_untracked_concrete_base   s    zITestTrackingInheritance.test_tracked_abstract_and_untracked_concrete_basec                 C   s.   |  tdd tjjjjD tg d d S )Nc                 s   s   | ]}|j V  qd S r1   rZ   r[   r.   r.   r/   ri      r_   zNTestTrackingInheritance.test_indirect_tracked_abstract_base.<locals>.<genexpr>)r`   Zbaseinherittracking2_ptr_idrE   ra   rb   rc   rd   )r%   re   r   r'   r2   rf   rg   r=   r.   r.   r/   #test_indirect_tracked_abstract_base   s    z;TestTrackingInheritance.test_indirect_tracked_abstract_basec                 C   s.   |  tdd tjjjjD tg d d S )Nc                 s   s   | ]}|j V  qd S r1   rZ   r[   r.   r.   r/   ri      r_   zNTestTrackingInheritance.test_indirect_tracked_concrete_base.<locals>.<genexpr>)r`   Zbaseinherittracking3_ptr_idrE   ra   rb   rc   rd   )r%   re   r   r'   r2   rf   rg   r=   r.   r.   r/   #test_indirect_tracked_concrete_base   s    z;TestTrackingInheritance.test_indirect_tracked_concrete_basec                 C   s8   |  tj tt W d    n1 s*0    Y  d S r1   )r7   r
   r<   r   r   r=   r.   r.   r/   +test_registering_with_tracked_abstract_base   s    zCTestTrackingInheritance.test_registering_with_tracked_abstract_baseN)
rJ   rK   rL   rh   rj   rl   rm   rn   ro   rp   r.   r.   r.   r/   rY   g   s   rY   c                   @   s   e Zd ZdZdd ZdS )TestCustomAttrForeignKeyz> https://github.com/jazzband/django-simple-history/issues/431 c                 C   s"   t jjjd}| |jd d S )Nr$   Zcustom_poll)r   r'   r2   rf   	get_fieldr%   	attr_name)r,   fieldr.   r.   r/   test_custom_attr   s    z)TestCustomAttrForeignKey.test_custom_attrN)rJ   rK   rL   __doc__ru   r.   r.   r.   r/   rq      s   rq   )ZMIGRATION_MODULESc                   @   s   e Zd Zdd Zdd ZdS )TestMigratec                 C   s   t jddt d d S )NZmakemigrationsmigration_test_app)stdoutr   Zcall_commandr   r=   r.   r.   r/   test_makemigration_command   s    z&TestMigrate.test_makemigration_commandc                 C   s   t jdddt d d S )NZmigraterx   T)Zfakery   rz   r=   r.   r.   r/   test_migrate_command   s    
z TestMigrate.test_migrate_commandN)rJ   rK   rL   r{   r|   r.   r.   r.   r/   rw      s   rw   c                   @   s   e Zd ZdZdd ZdS )"TestModelWithHistoryInDifferentAppz> https://github.com/jazzband/django-simple-history/issues/485 c                 C   s   t jjjj}| |d d S )NZexternal)r   r'   r2   rf   Z	app_labelr%   )r,   ZappLabelr.   r.   r/   test__different_app   s    z6TestModelWithHistoryInDifferentApp.test__different_appN)rJ   rK   rL   rv   r~   r.   r.   r.   r/   r}      s   r}   )0ZunittestrF   r   r   ior   Zdjango.appsr   Zdjango.contrib.authr   Zdjango.corer   Zdjango.testr   r	   Zsimple_historyr
   r   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	get_modelr9   r+   ZtomorrowZ	yesterdayr!   rM   rQ   rY   rq   rw   r}   r.   r.   r.   r/   <module>   s,   L'
a