ó
EÂ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 j ƒ  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  j ƒ  } t j ˆ  ƒ | _ | S(   N(   t   mockt	   MagicMockt   jsont   dumpst   text(   t   rt   kwargst   resp(   t   token(    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt	   fake_send   s    (    (   R   R   (    (   R   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt
   fake_token   s    t   OAuth2SessionTestc           B  sÝ   e  Z d  „  Z d „  Z d „  Z e j d d d „  ƒd „  ƒ Z e j d d d „  ƒd „  ƒ Z e j d d d	 „  ƒd
 „  ƒ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z e j 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   ˆ  j  |  | k ƒ S(   N(   t
   assertTrue(   t   at   b(   t   self(    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   <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   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   setUp"   s    	c           si   d ˆ  j  d ‰ ‡  ‡ f d †  } x? ˆ  j D]4 } t d | d ˆ  j  ƒ } | | _ | j d ƒ q- Wd  S(   Nu   Bearer u   access_tokenc           so   |  j  j d d  ƒ } d j d ƒ |  j  k rF |  j  d j d ƒ } n  ˆ  j | ˆ ƒ t j ƒ  } g  | _ | S(   Nu   Authorizationu   utf-8(   t   headerst   gett   Nonet   encodet   assertEqualR   R   t   cookes(   R   R   t   auth_headerR   (   R   R   (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   verifier9   s    	t   clientR   u   https://i.b(   R   R%   R   t   sendR(   (   R   R.   R/   t   auth(    (   R   R   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_add_token6   s    		c         C  sÖ   d } t  |  j ƒ } t d | ƒ } | j | ƒ \ } } |  j | | ƒ |  j |  j | ƒ |  j d | ƒ t |  j ƒ } t d | ƒ } | j | ƒ \ } } |  j | | ƒ |  j |  j | ƒ |  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(    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_authorization_urlG   s    u	   time.timet   newc           C  s   t  S(   N(   R"   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   X   s    c      
     s•  t  ˆ  j ƒ ˆ  _ d ˆ  j d <ˆ  j d =‡  f d †  } x? ˆ  j D]4 } t d | d ˆ  j ƒ } ˆ  j t | j d ƒ qB WxN ˆ  j D]C } t d | d ˆ  j d d	 ƒ } | | _ ˆ  j t	 | j d ƒ q„ W‡  f d
 †  } xK ˆ  j D]@ } t d | d ˆ  j d d	 d | ƒ } | | _ | j d ƒ qä W‡  f d †  } xW ˆ  j D]L } t d | d ˆ  j d d	 d | ƒ } | | _ | j d d d d d ƒqAWd  S(   Nu   -1u
   expires_inu
   expires_atc           sJ   d |  j  k r% ˆ  j d |  j ƒ n  t j ƒ  } t j ˆ  j ƒ | _ | S(   Nu   /refreshu   Authorization(	   R4   t   assertNotInR'   R   R   R   R   R   R   (   R   R   R   (   R   (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   fake_refresh^   s
    R/   R   u   https://i.bt   auto_refresh_urlu   https://i.b/refreshc           s   ˆ  j  |  ˆ  j ƒ d  S(   N(   R+   R   (   R   (   R   (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   token_updaterr   s    R?   c           sq   d |  j  k rL ˆ  j d |  j ƒ t d ƒ } ˆ  j |  j d d | ƒ n  t j ƒ  } t j ˆ  j	 ƒ | _
 | S(   Nu   /refreshu   Authorizations   foo:bars   Basic (   R4   R!   R'   R   R+   R   R   R   R   R   R   (   R   R   t   encodedR   (   R   (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   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?   RA   (    (   R   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_refresh_token_requestX   s4    
							c           C  s   t  S(   N(   R"   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   Œ   s    c         C  sW   t  |  j ƒ } d t |  j j ƒ  ƒ } t d | ƒ } |  j | j | ƒ |  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   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_token_from_fragmentŒ   s    c           C  s   t  S(   N(   R"   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   “   s    c         C  sÂ   d } xW |  j  D]L } t d | d |  j ƒ } t |  j ƒ | _ |  j | j | ƒ |  j ƒ q Wi d d 6} xN |  j  D]C } t d | d |  j ƒ } t | ƒ | _ |  j t | j | ƒ qw Wd  S(   Nu   https://example.com/tokenR/   R   u   invalid_requestu   error(	   R$   R   R   R   R0   R+   t   fetch_tokenRE   R   (   R   R4   R/   R1   t   error(    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_fetch_token“   s     c      
     sÆ   t  |  j ƒ } t j ƒ  d } t j ƒ  ‰  | |  j d <ˆ  d | d <d } t j d ‡  f d †  ƒ Y xQ |  j D]F } t d | d |  j ƒ } t | ƒ | _ |  j	 | j
 | ƒ | ƒ 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(    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   ±   s    R/   R   N(   R   R   t   timeR   t   patchR$   R   R   R0   R+   RK   (   R   t	   new_tokent   pastR4   R/   R1   (    (   RN   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt2   test_cleans_previous_token_before_fetching_new_one¢   s    c         C  s2   t  d d d ƒ} |  j 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   RE   R   RK   (   R   R/   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_web_app_fetch_token¸   s    c         C  st   t  d ƒ } |  j | j d ƒ d | _ |  j | j d ƒ d | j _ |  j | j d ƒ | ` |  j | j ƒ d  S(   Nu   test-idu   different-idu   something-else(   R   R+   R#   t   _clientt   assertIsNone(   R   t   sess(    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_client_id_proxy¿   s    	c         C  sq   t  d ƒ } |  j | j ƒ d | _ |  j | j d ƒ d | j _ |  j | j d ƒ | ` |  j | j ƒ d  S(   Nu   test-idu
   test-tokenu   different-token(   R   RW   t   access_tokenR+   RV   (   R   RX   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_access_token_proxyÉ   s    	c         C  sÚ   i d d 6} t  d d | ƒ} |  j | j d ƒ |  j | j | ƒ d | d <| | _ |  j | j d ƒ |  j | j | ƒ d | j _ d | d <|  j | j d ƒ |  j | j | ƒ |  j t ƒ  | ` Wd  QXd  S(   Nu   test-accessu   access_tokenu   test-idR   u   something-elseu   different-token(   R   R+   RZ   R   RV   RE   t   AttributeError(   R   R   RX   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_token_proxyÓ   s    

	
c         C  s    t  d ƒ } |  j | j ƒ d  S(   Nu   foo(   R   t   assertFalset
   authorized(   R   RX   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_authorized_falseæ   s    c           C  s   t  S(   N(   R"   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   ê   s    c         C  su   d „  } d } x_ |  j  D]T } t d | ƒ } | |  j ƒ | _ |  j | j ƒ | j | ƒ |  j | j ƒ q Wd  S(   Nc           s   ‡  f d †  } | S(   Nc           s"   t  j ƒ  } t j ˆ  ƒ | _ | S(   N(   R   R   R   R   R   (   R   R   R   (   R   (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   í   s    (    (   R   R   (    (   R   sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR   ì   s    u   https://example.com/tokenR/   (   R$   R   R   R0   R^   R_   RK   R   (   R   R   R4   R/   RX   (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   test_authorized_trueê   s    	(   t   __name__t
   __module__R&   R2   R:   R   RP   RF   RJ   RM   RS   RU   RY   R[   R]   R`   Ra   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyR       s   			!4!!			
	
		(   t
   __future__R    R   R   RO   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   (    (    (    sK   /Users/singingwolfboy/clones/requests-oauthlib/tests/test_oauth2_session.pyt   <module>   s$   	