
ó
ÝÄãWc              s3  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z y d  d l	 m
 Z
 Wn! e k
 r‹ d  d l m
 Z
 n Xd  d l m Z d  d l m Z 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 e É Ê  Z d „  Z d e
 f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   unicode_literalsN(   t	   b64encode(   t   deepcopy(   t   TestCase(   t	   urlencode(   t   TokenExpiredErrort   OAuth2Error(   t   MismatchingStateError(   t   WebApplicationClientt   MobileApplicationClient(   t   LegacyApplicationClientt   BackendApplicationClient(   t   OAuth2Sessiont   TokenUpdatedc           s   ‡  f d †  } | S(   Nc           s"   t  É Ê  } t É ˆ  Ê | _ | S(   N(   t   mockt	   MagicMockt   jsont   dumpst   text(   t   rt   kwargst   resp(   t   token(    tX   /Users/cory/Documents/Python/requests_org/requests-oauthlib/tests/test_oauth2_session.pyt	   fake_send   s    (    (   R   R   (    (   R   R   t
   fake_token   s    t   OAuth2SessionTestc             sÝ   e  Z d  „  Z d „  Z d „  Z e É d d d „  Êd „  ƒ Z e É d d d „  Êd „  ƒ Z e É d d d	 „  Êd
 „  ƒ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z e É d d d „  Êd „  ƒ Z RS(   c           s°   t  ˆ  d ƒ s$ ‡  f d †  ˆ  _ n  i  d d 6d d 6d d 6d	 d
 6t d d 6ˆ  _ d ˆ  _ t ˆ  j d d ƒt ˆ  j ƒ t ˆ  j ƒ g ˆ  _ ˆ  j t	 ˆ  j ƒ g ˆ  _
 d  S(   Nu   assertInc           s   ˆ  É  |  | k Ê S(   N(   t
   assertTrue(   t   at   b(   t   self(    R   t   <lambda>%   s    u   Beareru
   token_typeu   asdfoiw37850234lkjsdfsdfu   access_tokenu   sldvafkjw34509s8dfsdfu   refresh_tokenu   3600u
   expires_ini  u
   expires_atu   foot   codeu
   asdf345xdf(   t   hasattrt   assertInt	   fake_timeR   t	   client_idR   R
   R   t   clientsR	   t   all_clients(   R   (    (   R   R   t   setUp"   s    	c           si   d ˆ  j  d ‰ ‡  ‡ f d †  } x? ˆ  j D]4 } t d | d ˆ  j  ƒ } | | _ | É d Ê q- Wd  S(   Nu   Bearer u   access_tokenc           so   |  j  É d d  Ê } d É d Ê |  j  k rF |  j  d É d Ê } n  ˆ  É | ˆ Ê t É Ê  } g  | _ | S(   Nu   Authorizationu   utf-8(   t   headerst   gett   encodet   assertEqualR   R   t   cookes(   R   R   t   auth_headerR   (   R   R   (    R   t   verifier9   s    	t   clientR   u   https://i.b(   R   R&   R   t   sendR)   (   R   R.   R/   t   auth(    (   R   R   R   t   test_add_token6   s    	
 	c         C  sÖ   d } t  |  j ƒ } t d | ƒ } | É | Ê \ } } |  É | | Ê |  É |  j | Ê |  É d | Ê t |  j ƒ } t d | ƒ } | É | Ê \ } } |  É | | Ê |  É |  j | Ê |  É d | Ê d  S(   Nu%   https://example.com/authorize?foo=barR/   u   response_type=codeu   response_type=token(   R   R$   R   t   authorization_urlR"   R	   (   R   t   urlt   webt   st   auth_urlt   statet   mobile(    (    R   t   test_authorization_urlG   s    u	   time.timet   newc           C  s   t  S(   N(   R#   (    (    (    R   R   X   s    c      
     s•  t  ˆ  j ƒ ˆ  _ d ˆ  j d <ˆ  j d =‡  f d †  } x? ˆ  j D]4 } t d | d ˆ  j ƒ } ˆ  É t | j d Ê qB WxN ˆ  j D]C } t d | d ˆ  j d d	 ƒ } | | _ ˆ  É t	 | j d Ê q„ W‡  f d
 †  } xK ˆ  j D]@ } t d | d ˆ  j d d	 d | ƒ } | | _ | É d Ê qä W‡  f d †  } xW ˆ  j D]L } t d | d ˆ  j d d	 d | ƒ } | | _ | É d d d d d ÊqAWd  S(   Nu   -1u
   expires_inu
   expires_atc           sJ   d |  j  k r% ˆ  É d |  j Ê n  t É Ê  } t É ˆ  j Ê | _ | S(   Nu   /refreshu   Authorization(	   R4   t   assertNotInR(   R   R   R   R   R   R   (   R   R   R   (   R   (    R   t   fake_refresh^   s
    R/   R   u   https://i.bt   auto_refresh_urlu   https://i.b/refreshc           s   ˆ  É  |  ˆ  j Ê d  S(   N(   R+   R   (   R   (   R   (    R   t   token_updaterr   s    R?   c           s€   d |  j  k r[ ˆ  É d |  j Ê t d ƒ } d | É d Ê } ˆ  É |  j d | Ê n  t É Ê  } t É	 ˆ  j
 Ê | _ | S(   Nu   /refreshu   Authorizations   foo:bars   Basic u   latin1(   R4   R"   R(   R   t   decodeR+   R   R   R   R   R   R   (   R   R   t   encodedt   contentR   (   R   (    R   t   fake_refresh_with_auth|   s    R$   u   foot   client_secretu   bar(
   t   dictR   t   expired_tokenR%   R   t   assertRaisesR   R)   R0   R   (   R   R=   R/   R1   R?   RC   (    (   R   R   t   test_refresh_token_requestX   s<    

 
 		
 		

 		c           C  s   t  S(   N(   R#   (    (    (    R   R      s    c         C  sW   t  |  j ƒ } d t |  j É Ê  ƒ } t d | ƒ } |  É | É | Ê |  j Ê d  S(   Nu   https://i.b/callback#R/   (   R	   R$   R   R   t   itemsR   R+   t   token_from_fragment(   R   R9   t   response_urlR1   (    (    R   t   test_token_from_fragment   s    c           C  s   t  S(   N(   R#   (    (    (    R   R   ”   s    c         C  sÂ   d } xW |  j  D]L } t d | d |  j ƒ } t |  j ƒ | _ |  É | É | Ê |  j Ê q Wi  d d 6} xN |  j  D]C } t d | d |  j ƒ } t | ƒ | _ |  É t | j | Ê qw Wd  S(   Nu   https://example.com/tokenR/   R   u   invalid_requestu   error(	   R%   R   R   R   R0   R+   t   fetch_tokenRG   R   (   R   R4   R/   R1   t   error(    (    R   t   test_fetch_token”   s    
  
 c           sÆ   t  |  j ƒ } t É Ê  d } t É Ê  ‰  | |  j d <ˆ  d | d <d } t É d ‡  f d †  Ê Y xQ |  j D]F } t d | d |  j ƒ } t | ƒ | _ |  É	 | É
 | Ê | Ê qr WWd	 QXd	 S(
   u   Makes sure the previous token is cleaned before fetching a new one.

        The reason behind it is that, if the previous token is expired, this
        method shouldn't fail with a TokenExpiredError, since it's attempting
        to get a new one (which shouldn't be expired).

        i   u
   expires_ati  u   https://example.com/tokenu	   time.timec             s   ˆ  S(   N(    (    (   t   now(    R   R   ²   s    R/   R   N(   R   R   t   timeR   t   patchR%   R   R   R0   R+   RM   (   R   t	   new_tokent   pastR4   R/   R1   (    (   RP   R   t2   test_cleans_previous_token_before_fetching_new_one£   s    
 c         C  s2   t  d d d ƒ} |  É t | j d d d Êd  S(   Nu   fooR8   u	   somestateu   https://i.b/tokent   authorization_responseu   https://i.b/no-state?code=abc(   R   RG   R   RM   (   R   R/   (    (    R   t   test_web_app_fetch_token¹   s    c         C  st   t  d ƒ } |  É | j d Ê d | _ |  É | j d Ê d | j _ |  É | j d Ê | ` |  É | j Ê d  S(   Nu   test-idu   different-idu   something-else(   R   R+   R$   t   _clientt   assertIsNone(   R   t   sess(    (    R   t   test_client_id_proxyÀ   s    	c         C  sq   t  d ƒ } |  É | j Ê d | _ |  É | j d Ê d | j _ |  É | j d Ê | ` |  É | j Ê d  S(   Nu   test-idu
   test-tokenu   different-token(   R   RY   t   access_tokenR+   RX   (   R   RZ   (    (    R   t   test_access_token_proxyÊ   s    	c         C  sÚ   i  d d 6} t  d d | ƒ} |  É | j d Ê |  É | j | Ê d | d <| | _ |  É | j d Ê |  É | j | Ê d | j _ d | d <|  É | j d Ê |  É | j | Ê |  É t Ê  | ` Wd  QXd  S(   Nu   test-accessu   access_tokenu   test-idR   u   something-elseu   different-token(   R   R+   R\   R   RX   RG   t   AttributeError(   R   R   RZ   (    (    R   t   test_token_proxyÔ   s    

	
c         C  s    t  d ƒ } |  É | j Ê d  S(   Nu   foo(   R   t   assertFalset
   authorized(   R   RZ   (    (    R   t   test_authorized_falseç   s    c           C  s   t  S(   N(   R#   (    (    (    R   R   ë   s    c         C  su   d „  } d } x_ |  j  D]T } t d | ƒ } | |  j ƒ | _ |  É | j Ê | É | Ê |  É | j Ê q Wd  S(   Nc           s   ‡  f d †  } | S(   Nc           s"   t  É Ê  } t É ˆ  Ê | _ | S(   N(   R   R   R   R   R   (   R   R   R   (   R   (    R   R   î   s    (    (   R   R   (    (   R   R   R   í   s    u   https://example.com/tokenR/   (   R%   R   R   R0   R`   Ra   RM   R   (   R   R   R4   R/   RZ   (    (    R   t   test_authorized_trueë   s    	
 (   t   __name__t
   __module__R'   R2   R:   R   RR   RH   RL   RO   RU   RW   R[   R]   R_   Rb   Rc   (    (    (    R   R       s   			!5!!			
	
		(   t
   __future__R    R   R   RQ   t   base64R   t   copyR   t	   unittest2R   t   ImportErrort   unittestt   oauthlib.commonR   t   oauthlib.oauth2R   R   R   R   R	   R
   R   t   requests_oauthlibR   R   R#   R   R   (    (    (    R   t   <module>   s$   	