U
    `                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 zd dlmZ W n  ek
rp   d dlmZ Y nX G dd de	jZG d	d
 d
eZG dd dZdS )    N)settings)MULTIPART_CONTENTClient)	force_str)permissionsstatus)reversec                   @   s   e Zd ZdZdd ZdS )CustomPermissionClasszYou shall not pass!c                 C   s   dS )NF )selfrequestviewr
   r
   A/Users/michael/Projects/dj-rest-auth/dj_rest_auth/tests/mixins.pyhas_permission   s    z$CustomPermissionClass.has_permissionN)__name__
__module____qualname__messager   r
   r
   r
   r   r	      s   r	   c                   @   s,   e Zd ZdedfddZdedfddZdS )	APIClient Fc                 K   s   | j d|||f|S )NPATCHgenericr   pathdatacontent_typefollowextrar
   r
   r   patch   s    zAPIClient.patchc                 K   s   | j d|||f|S )NOPTIONSr   r   r
   r
   r   options   s    zAPIClient.optionsN)r   r   r   r   r   r!   r
   r
   r
   r   r      s   r   c                   @   sH   e Zd 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 )
TestsMixinz
    base for API tests:
        * easy request calls, f.e.: self.post(url, data), self.get(url)
        * easy status check, f.e.: self.post(url, data, status_code=200)
    c                 O   s
  t | j|}d }d|kr(|dkr(d|d< d|kr^|dkr^|d dkr^|dd}t||d< d|krp|d}t| drt tdd	rd
| j |d< nd| j |d< |||| _	d| j	dk}i | j	_|r| j	j
rtt| j	j
| j	_|r| | j	j| | j	S )Nr   getzapplication/jsonr   r   status_codetokenREST_USE_JWTFzJWT HTTP_AUTHORIZATIONzToken zcontent-type)getattrclientr#   jsondumpspophasattrr   r%   responsecontentloadsr   assertEqualr$   )r   request_methodargskwargsZrequest_funcr$   r   Zis_jsonr
   r
   r   send_request%   s*    

zTestsMixin.send_requestc                 O   s   | j d||S )Npost)r6   r5   r   r3   r4   r
   r
   r   r6   C   s    zTestsMixin.postc                 O   s   | j d||S )Nr#   )r#   r7   r8   r
   r
   r   r#   F   s    zTestsMixin.getc                 O   s   | j d||S )Nr   )r   r7   r8   r
   r
   r   r   I   s    zTestsMixin.patchc                 C   s   dt _t | _td| _td| _td| _td| _td| _	td| _
td| _td	| _td
| _td| _td| _td| _td| _td| _d S )NTZ
rest_loginZrest_logoutZrest_password_changeZrest_registerZrest_password_resetZrest_user_detailsZrest_verify_emailZfb_loginZtw_loginZtw_login_no_viewZtw_login_no_adapterZ
fb_connectZ
tw_connectZsocial_account_list)r   DEBUGr   r)   r   	login_url
logout_urlpassword_change_urlregister_urlpassword_reset_urluser_urlverify_email_urlZfb_login_urlZtw_login_urlZtw_login_no_view_urlZtw_login_no_adapter_urlZfb_connect_urlZtw_connect_urlZsocial_account_list_urlr   r
   r
   r   initL   s     












zTestsMixin.initc                 C   s&   | j | jd}| j| j|tjd d S )N)usernamepassword)r   r$   )USERNAMEPASSr6   r:   r   HTTP_200_OK)r   payloadr
   r
   r   _login_   s    zTestsMixin._loginc                 C   s   | j | jtjd d S )N)r   )r6   r;   r   rG   rA   r
   r
   r   _logoutf   s    zTestsMixin._logoutN)r   r   r   __doc__r5   r6   r#   r   rB   rI   rJ   r
   r
   r
   r   r"      s   r"   )r*   django.confr   django.test.clientr   r   django.utils.encodingr   rest_frameworkr   r   django.urlsr   ImportErrordjango.core.urlresolversBasePermissionr	   r   r"   r
   r
   r
   r   <module>   s   	