Skip to content

Commit 7426fb0

Browse files
committed
Fix tests
1 parent 8576f5f commit 7426fb0

5 files changed

Lines changed: 61 additions & 13 deletions

File tree

.python-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.12.3

requirements_test.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pytest-django==4.5.2
2-
httpretty==1.1.4
32
unittest2==1.1.0
43
django-sslserver>=0.22
5-
flake8==4.0.0
4+
flake8==7.2.0
5+
responses==0.25.7
6+
typing_extensions==4.13.2

tests/base.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22

3-
from httpretty import HTTPretty
3+
import responses
44
from social_core.backends.utils import load_backends
55
from social_core.tests.backends.test_facebook import FacebookOAuth2Test
66
from social_core.tests.backends.test_twitter import TwitterOAuth1Test
@@ -19,14 +19,20 @@
1919

2020
# don't run third party tests
2121
for attr in (attr for attr in dir(FacebookOAuth2Test) if attr.startswith('test_')):
22-
delattr(FacebookOAuth2Test, attr)
22+
try:
23+
delattr(FacebookOAuth2Test, attr)
24+
except AttributeError:
25+
pass
2326
for attr in (attr for attr in dir(TwitterOAuth1Test) if attr.startswith('test_')):
24-
delattr(TwitterOAuth1Test, attr)
27+
try:
28+
delattr(TwitterOAuth1Test, attr)
29+
except AttributeError:
30+
pass
2531

2632

2733
class RestSocialMixin:
2834
def setUp(self):
29-
HTTPretty.enable(allow_net_connect=False)
35+
responses.start()
3036
Backend = module_member(self.backend_path)
3137
self.strategy = views.load_strategy()
3238
self.backend = Backend(self.strategy, redirect_uri=self.complete_url)
@@ -50,9 +56,8 @@ def setUp(self):
5056
self.do_rest_login()
5157

5258
def tearDown(self):
53-
54-
HTTPretty.disable()
55-
HTTPretty.reset()
59+
responses.stop()
60+
responses.reset()
5661
self.backend = None
5762
self.strategy = None
5863
self.name = None
@@ -71,6 +76,22 @@ def do_rest_login(self):
7176
self.auth_handlers(start_url)
7277
self.pre_complete_callback(start_url)
7378

79+
def setup_api_mocks(self):
80+
# Add missing mocks for access token and user data endpoints
81+
responses.reset()
82+
responses.add(
83+
responses.GET,
84+
self.backend.access_token_url(),
85+
body=self.access_token_body,
86+
status=self.access_token_status
87+
)
88+
responses.add(
89+
responses.GET,
90+
self.user_data_url,
91+
body=self.user_data_body,
92+
status=200
93+
)
94+
7495

7596
class BaseTwitterApiTestCase(RestSocialMixin, TwitterOAuth1Test):
7697

tests/test_session.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from django.test.utils import override_settings
88
from rest_framework.test import APITestCase
99
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
10-
from httpretty import HTTPretty
10+
import responses
1111
from social_core.utils import parse_qs
1212

1313
from .base import BaseFacebookAPITestCase, BaseTwitterApiTestCase
@@ -43,6 +43,7 @@ class TestSocialAuth2(APITestCase, BaseFacebookAPITestCase):
4343

4444
@modify_settings(**session_modify_settings)
4545
def _check_login_social_session(self, url, data):
46+
self.setup_api_mocks()
4647
resp = self.client.post(url, data)
4748
self.assertEqual(resp.status_code, 200)
4849
self.assertEqual(resp.data['email'], self.email)
@@ -75,31 +76,34 @@ def test_unknown_provider_session(self):
7576
self.assertEqual(resp.status_code, 404)
7677

7778
def test_login_social_http_origin(self):
79+
self.setup_api_mocks()
7880
resp = self.client.post(
7981
reverse('login_social_session'),
8082
data={'provider': 'facebook', 'code': '3D52VoM1uiw94a1ETnGvYlCw'},
8183
HTTP_ORIGIN="http://frontend.com")
8284
self.assertEqual(resp.status_code, 200)
83-
url_params = dict(parse_qsl(urlparse(HTTPretty.latest_requests[0].path).query))
85+
url_params = dict(parse_qsl(urlparse(responses.calls[0].request.path_url).query))
8486
self.assertEqual(url_params['redirect_uri'], "http://frontend.com/")
8587

8688
@override_settings(REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI='http://myproject.com/')
8789
def test_login_absolute_redirect(self):
90+
self.setup_api_mocks()
8891
resp = self.client.post(
8992
reverse('login_social_session'),
9093
data={'provider': 'facebook', 'code': '3D52VoM1uiw94a1ETnGvYlCw'})
9194
self.assertEqual(resp.status_code, 200)
92-
url_params = dict(parse_qsl(urlparse(HTTPretty.latest_requests[0].path).query))
95+
url_params = dict(parse_qsl(urlparse(responses.calls[0].request.path_url).query))
9396
self.assertEqual('http://myproject.com/', url_params['redirect_uri'])
9497

9598
@override_settings(REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI='http://myproject.com/')
9699
def test_login_manual_redirect(self):
100+
self.setup_api_mocks()
97101
resp = self.client.post(
98102
reverse('login_social_session'),
99103
data={'provider': 'facebook', 'code': '3D52VoM1uiw94a1ETnGvYlCw',
100104
'redirect_uri': 'http://manualdomain.com/'})
101105
self.assertEqual(resp.status_code, 200)
102-
url_params = dict(parse_qsl(urlparse(HTTPretty.latest_requests[0].path).query))
106+
url_params = dict(parse_qsl(urlparse(responses.calls[0].request.path_url).query))
103107
self.assertEqual('http://manualdomain.com/', url_params['redirect_uri'])
104108

105109
@mock.patch('rest_framework.views.APIView.permission_classes')

tests/test_token.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@
1919
'users',
2020
],
2121
MIDDLEWARE=[],
22+
SOCIAL_AUTH_PIPELINE=(
23+
'users.social_pipeline.auto_logout', # custom action
24+
'social_core.pipeline.social_auth.social_details',
25+
'social_core.pipeline.social_auth.social_uid',
26+
'social_core.pipeline.social_auth.auth_allowed',
27+
'users.social_pipeline.check_for_email', # custom action
28+
'social_core.pipeline.social_auth.social_user',
29+
'social_core.pipeline.user.get_username',
30+
'social_core.pipeline.user.create_user',
31+
'social_core.pipeline.social_auth.associate_user',
32+
'social_core.pipeline.social_auth.load_extra_data',
33+
'social_core.pipeline.user.user_details',
34+
'users.social_pipeline.save_avatar', # custom action
35+
),
2236
)
2337

2438

@@ -42,6 +56,7 @@ def test_login_social_oauth1_token(self):
4256
class TestSocialAuth2Token(APITestCase, BaseFacebookAPITestCase):
4357

4458
def _check_login_social_token_user(self, url, data):
59+
self.setup_api_mocks()
4560
resp = self.client.post(url, data)
4661
self.assertEqual(resp.status_code, 200)
4762
self.assertEqual(resp.data['email'], self.email)
@@ -51,6 +66,7 @@ def _check_login_social_token_user(self, url, data):
5166
self.assertEqual(token.user.email, self.email)
5267

5368
def _check_login_social_token_only(self, url, data):
69+
self.setup_api_mocks()
5470
resp = self.client.post(url, data)
5571
self.assertEqual(resp.status_code, 200)
5672
# check token exists
@@ -79,10 +95,15 @@ def test_login_social_token_only_provider_in_url(self):
7995
data={'code': '3D52VoM1uiw94a1ETnGvYlCw'})
8096

8197
def test_user_login_with_no_email(self):
98+
# Modify user data to have no email BEFORE setting up the test
8299
user_data_body = json.loads(self.user_data_body)
83100
user_data_body['email'] = ''
84101
self.user_data_body = json.dumps(user_data_body)
102+
103+
# Set up mocks and do the rest login
85104
self.do_rest_login()
105+
self.setup_api_mocks()
106+
86107
resp = self.client.post(
87108
reverse('login_social_token'),
88109
data={'provider': 'facebook', 'code': '3D52VoM1uiw94a1ETnGvYlCw'},

0 commit comments

Comments
 (0)