o
    ˷e                     @   s~   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	 d dl
mZmZmZ ddlmZ dd	lmZ G d
d de	eZdS )    )RequestFactory)reverse)SocialToken)OAuth2Error)OAuth2TestsMixin)MockedResponseTestCasemocked_response   )TwitchProvider)TwitchOAuth2Adapterc                   @   sB   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd ZdS )TwitchTestsc                 C   s
   t ddS )N   a  
        {
          "data": [{
            "id": "44322889",
            "login": "dallas",
            "display_name": "dallas",
            "type": "staff",
            "broadcaster_type": "",
            "description": "Just a gamer playing games and chatting. :)",
            "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/dallas-profile_image-1a2c906ee2c35f12-300x300.png",
            "offline_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/dallas-channel_offline_image-1a2c906ee2c35f12-1920x1080.png",
            "view_count": 191836881,
            "email": "login@provider.com"
          }]
        }
        )r   )self r   c/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/twitch/tests.pyget_mocked_response   s   zTwitchTests.get_mocked_responsec                 C      t dd}d}| || d S )Ni  z{"error": "Invalid token"}z"Twitch API Error: Invalid token ()r   check_for_errorr   	resp_mockexpected_errorr   r   r   )test_response_over_400_raises_OAuth2Error%      
z5TwitchTests.test_response_over_400_raises_OAuth2Errorc                 C   s8   t dd}d}| || t dd}d}| || d S )Nr   z{"data": []}z*Invalid data from Twitch API: {'data': []}z{"missing_data": "key"}z5Invalid data from Twitch API: {'missing_data': 'key'}r   r   r   r   r   1test_empty_or_missing_data_key_raises_OAuth2Error+   s   

z=TwitchTests.test_empty_or_missing_data_key_raises_OAuth2Errorc                 C   r   )Nr   z${"data": [{"login": "fake_twitch"}]}z6Invalid data from Twitch API: {'login': 'fake_twitch'}r   r   r   r   r   )test_missing_twitch_id_raises_OAuth2Error6   r   z5TwitchTests.test_missing_twitch_id_raises_OAuth2Errorc                 C   sR   |  t}| | W d    n1 sw   Y  | t|jdd| d S )Nu )assertRaisesr   _run_just_complete_loginassertEqualstr	exceptionreplace)r   r   r   	error_ctxr   r   r   r   <   s   zTwitchTests.check_for_errorc                 C   s   t  t| jjd ddi}t|}| |}tdd}t	| t|}|
||| W d   dS 1 s:w   Y  dS )z
        Helper function for checking that Error cases are
        handled correctly. Running only `complete_login` means
        we can check that the specific erros are raised before
        they are caught and rendered to generic error HTML
        _loginprocessloginzthis-is-my-fake-token)tokenN)r   getr   provideridr   get_providerget_appr   r	   complete_login)r   r   requestadapterappr)   r   r   r   r    B   s   

"z$TwitchTests._run_just_complete_loginN)__name__
__module____qualname__r   r,   provider_idr   r   r   r   r   r    r   r   r   r   r      s    r   N)django.test.clientr   django.urlsr   allauth.socialaccount.modelsr   -allauth.socialaccount.providers.oauth2.clientr   allauth.socialaccount.testsr   allauth.testsr   r   r	   r+   r   viewsr   r   r   r   r   r   <module>   s    