U
    kO                     @   s   d dl Z d dlZd dlmZ de jkr<ejd de jd< 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 dlmZ dd Zdd Zdd Zdd Zdd ZdS )    N)partialZDJANGO_SETTINGS_MODULE.settings)r   )Client)setup_test_environmentteardown_test_environment)call_command)mail)Userc                    s(   t j dd } fdd}| ||dS )a  py.test funcargs are awesome. This ugly function basically creates a
    test environment with an empty database every time you write a test
    function that accepts an argument named 'django_client.' Most of the time
    you won't use this, you'll use the 'client' funcarg below instead. This
    funcarg is only reset once per test session. The 'client' funcarg empties
    the database after each test to ensure a clean slate.c                  S   sR   t   ttdsdt_dtjkr2ddlm}  |   ddlm} |j	
dd t S )	NDEBUGFZsouthr   )patch_for_test_db_setup
connection   T)r   hasattrr   r   ZINSTALLED_APPSZsouth.management.commandsr   	django.dbr   creationZcreate_test_dbr   )r   r    r   V/var/www/html/UseVoiceDocker/env/lib/python3.8/site-packages/django_pytest/conftest.pysetup   s    

z,pytest_funcarg__django_client.<locals>.setupc                    s$   t   ddlm} |j d d S )Nr   r   r   )r   r   r   r   Zdestroy_test_db)clientr   Zold_namer   r   teardown!   s    z/pytest_funcarg__django_client.<locals>.teardownsession)r   ZDATABASE_NAMEcached_setuprequestr   r   r   r   r   pytest_funcarg__django_client   s    
r   c                    s"    fdd}dd }  ||dS )zCreates a test environment using the 'django_client' funcarg above, but
    also ensures the database is flushed after running each test.c                      s
     dS )NZdjango_client)Zgetfuncargvaluer   r   r   r   r   *   s    z%pytest_funcarg__client.<locals>.setupc                 S   s   t dddd g t_d S )Nflushr   F)	verbosityinteractive)r   r	   Zoutbox)r   r   r   r   r   ,   s    z(pytest_funcarg__client.<locals>.teardownfunction)r   r   r   r   r   pytest_funcarg__client'   s    r#   c                 K   s<   t jj| | |d}| D ]\}}t||| |  q|S )zCreates a user.)usernamepasswordemail)r
   objectsZcreate_user	iteritemssetattrsave)namer&   extrauserattrvaluer   r   r   user_creator1   s    
r0   c                 C   s   |  ttdddd dS )z*Create a user with no special permissions.r-   zuser@example.comc                 S   s   |   S Ndeleter-   r   r   r   <lambda>A       z&pytest_funcarg__user.<locals>.<lambda>r   r   r   r0   r   r   r   r   pytest_funcarg__user<   s    r8   c              	   C   s    |  ttddddddd dS )z*Create an admin user with all permissions.Zadminzadmin@example.comT)Zis_superuserZis_staffc                 S   s   |   S r1   r2   r4   r   r   r   r5   K   r6   z'pytest_funcarg__admin.<locals>.<lambda>r   r7   r   r   r   r   pytest_funcarg__adminD   s    r9   )ossys	functoolsr   environpathappendZdjango.confr   Zdjango.test.clientr   Zdjango.test.utilsr   r   Zdjango.core.managementr   Zdjango.corer	   Zdjango.contrib.auth.modelsr
   r   r#   r0   r8   r9   r   r   r   r   <module>   s   


