Skip to content

Commit 955981d

Browse files
5343 upgrade django in mitxonline (#2387)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 87097a8 commit 955981d

File tree

66 files changed

+955
-1076
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+955
-1076
lines changed

.secrets.baseline

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
"filename": "docker-compose.yml",
149149
"hashed_secret": "965748b380ab0ab25d1846afc174a3d93a8ec06c",
150150
"is_verified": false,
151-
"line_number": 8
151+
"line_number": 6
152152
}
153153
],
154154
"frontend/public/src/constants.js": [
@@ -193,7 +193,7 @@
193193
"filename": "main/settings.py",
194194
"hashed_secret": "09edaaba587f94f60fbb5cee2234507bcb883cc2",
195195
"is_verified": false,
196-
"line_number": 958
196+
"line_number": 955
197197
}
198198
],
199199
"pants": [
@@ -240,5 +240,5 @@
240240
}
241241
]
242242
},
243-
"generated_at": "2024-07-02T16:40:29Z"
243+
"generated_at": "2024-09-16T18:23:36Z"
244244
}

authentication/middleware.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""Authentication middleware"""
22

3+
from urllib.parse import quote
4+
35
from django.shortcuts import redirect
4-
from django.utils.http import urlquote
56
from social_core.exceptions import SocialAuthBaseException
67
from social_django.middleware import SocialAuthExceptionMiddleware
78

@@ -31,5 +32,5 @@ def process_exception(self, request, exception):
3132
if url: # noqa: RET503
3233
url += (
3334
"?" in url and "&" or "?"
34-
) + f"message={urlquote(message)}&backend={backend_name}"
35+
) + f"message={quote(message)}&backend={backend_name}"
3536
return redirect(url)

authentication/middleware_test.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,59 @@
11
"""Tests for auth middleware"""
22

3+
from urllib.parse import quote
4+
35
from django.contrib.sessions.middleware import SessionMiddleware
46
from django.shortcuts import reverse
5-
from django.utils.http import urlquote
67
from rest_framework import status
78
from social_core.exceptions import AuthAlreadyAssociated
89
from social_django.utils import load_backend, load_strategy
910

1011
from authentication.middleware import SocialAuthExceptionRedirectMiddleware
1112

1213

13-
def test_process_exception_no_strategy(rf, settings):
14+
def test_process_exception_no_strategy(mocker, rf, settings):
1415
"""Tests that if the request has no strategy it does nothing"""
1516
settings.DEBUG = False
17+
get_response = mocker.MagicMock()
1618
request = rf.get(reverse("social:complete", args=("email",)))
17-
middleware = SocialAuthExceptionRedirectMiddleware()
19+
middleware = SocialAuthExceptionRedirectMiddleware(get_response)
1820
assert middleware.process_exception(request, None) is None
1921

2022

21-
def test_process_exception(rf, settings):
23+
def test_process_exception(mocker, rf, settings):
2224
"""Tests that a process_exception handles auth exceptions correctly"""
2325
settings.DEBUG = False
2426
request = rf.get(reverse("social:complete", args=("email",)))
2527
# social_django depends on request.sesssion, so use the middleware to set that
26-
SessionMiddleware().process_request(request)
28+
get_response = mocker.MagicMock()
29+
SessionMiddleware(get_response).process_request(request)
2730
strategy = load_strategy(request)
2831
backend = load_backend(strategy, "email", None)
2932
request.social_strategy = strategy
3033
request.backend = backend
3134

32-
middleware = SocialAuthExceptionRedirectMiddleware()
35+
middleware = SocialAuthExceptionRedirectMiddleware(get_response)
3336
error = AuthAlreadyAssociated(backend)
3437
result = middleware.process_exception(request, error)
3538
assert result.status_code == status.HTTP_302_FOUND
3639
assert result.url == "{}?message={}&backend={}".format(
37-
reverse("login"), urlquote(error.__str__()), backend.name
40+
reverse("login"), quote(error.__str__()), backend.name
3841
)
3942

4043

41-
def test_process_exception_non_auth_error(rf, settings):
44+
def test_process_exception_non_auth_error(mocker, rf, settings):
4245
"""Tests that a process_exception handles non-auth exceptions correctly"""
4346
settings.DEBUG = False
4447
request = rf.get(reverse("social:complete", args=("email",)))
4548
# social_django depends on request.sesssion, so use the middleware to set that
46-
SessionMiddleware().process_request(request)
49+
get_response = mocker.MagicMock()
50+
SessionMiddleware(get_response).process_request(request)
4751
strategy = load_strategy(request)
4852
backend = load_backend(strategy, "email", None)
4953
request.social_strategy = strategy
5054
request.backend = backend
5155

52-
middleware = SocialAuthExceptionRedirectMiddleware()
56+
middleware = SocialAuthExceptionRedirectMiddleware(get_response)
5357
assert (
5458
middleware.process_exception(request, Exception("something bad happened"))
5559
is None

authentication/pipeline/user_test.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,11 @@ def validate_email_auth_request_not_email_backend(mocker):
8282
[(True, {"flow": SocialAuthState.FLOW_LOGIN}), (False, {})],
8383
)
8484
@pytest.mark.django_db
85-
def test_validate_email_auth_request(rf, has_user, expected):
85+
def test_validate_email_auth_request(mocker, rf, has_user, expected):
8686
"""Test that validate_email_auth_request returns correctly given the input"""
8787
request = rf.post("/complete/email")
88-
middleware = SessionMiddleware()
88+
get_response = mocker.MagicMock()
89+
middleware = SessionMiddleware(get_response)
8990
middleware.process_request(request)
9091
request.session.save()
9192
strategy = load_strategy(request)
@@ -141,15 +142,16 @@ def test_user_password_not_email_backend(mocker):
141142

142143

143144
@pytest.mark.parametrize("user_password", ["abc123", "def456"])
144-
def test_user_password_login(rf, user, user_password):
145+
def test_user_password_login(mocker, rf, user, user_password):
145146
"""Tests that user_password works for login case"""
146147
request_password = "abc123" # noqa: S105
147148
user.set_password(user_password)
148149
user.save()
149150
request = rf.post(
150151
"/complete/email", {"password": request_password, "email": user.email}
151152
)
152-
middleware = SessionMiddleware()
153+
get_response = mocker.MagicMock()
154+
middleware = SessionMiddleware(get_response)
153155
middleware.process_request(request)
154156
request.session.save()
155157
strategy = load_strategy(request)
@@ -177,15 +179,16 @@ def test_user_password_login(rf, user, user_password):
177179
)
178180

179181

180-
def test_user_password_not_login(rf, user):
182+
def test_user_password_not_login(mocker, rf, user):
181183
"""
182184
Tests that user_password performs denies authentication
183185
for an existing user if password not provided regardless of auth_type
184186
"""
185187
user.set_password("abc123")
186188
user.save()
187189
request = rf.post("/complete/email", {"email": user.email})
188-
middleware = SessionMiddleware()
190+
get_response = mocker.MagicMock()
191+
middleware = SessionMiddleware(get_response)
189192
middleware.process_request(request)
190193
request.session.save()
191194
strategy = load_strategy(request)
@@ -201,12 +204,13 @@ def test_user_password_not_login(rf, user):
201204
)
202205

203206

204-
def test_user_password_not_exists(rf):
207+
def test_user_password_not_exists(mocker, rf):
205208
"""Tests that user_password raises auth error for nonexistent user"""
206209
request = rf.post(
207210
"/complete/email", {"password": "abc123", "email": "doesntexist@localhost"}
208211
)
209-
middleware = SessionMiddleware()
212+
get_response = mocker.MagicMock()
213+
middleware = SessionMiddleware(get_response)
210214
middleware.process_request(request)
211215
request.session.save()
212216
strategy = load_strategy(request)
@@ -222,13 +226,14 @@ def test_user_password_not_exists(rf):
222226
)
223227

224228

225-
def test_user_not_active(rf, user):
229+
def test_user_not_active(mocker, rf, user):
226230
"""Tests that an inactive user raises auth error, InvalidPasswordException"""
227231
user.set_password("abc123")
228232
user.is_active = False
229233
user.save()
230234
request = rf.post("/complete/email", {"password": "abc123", "email": user.email})
231-
middleware = SessionMiddleware()
235+
get_response = mocker.MagicMock()
236+
middleware = SessionMiddleware(get_response)
232237
middleware.process_request(request)
233238
request.session.save()
234239
strategy = load_strategy(request)

cms/models_test.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ def test_course_page_context_edx_access( # noqa: PLR0913
234234
patched_get_relevant_run_qset.assert_called_once_with(course=course_page.course)
235235

236236

237-
def generate_flexible_pricing_response(request_user, flexible_pricing_form):
237+
def generate_flexible_pricing_response(mocker, request_user, flexible_pricing_form):
238238
"""
239239
Generates a fully realized request for the Flexible Pricing tests.
240240
@@ -248,8 +248,8 @@ def generate_flexible_pricing_response(request_user, flexible_pricing_form):
248248
rf = RequestFactory()
249249
request = rf.get("/")
250250
request.user = request_user
251-
252-
middleware = SessionMiddleware()
251+
get_response = mocker.MagicMock()
252+
middleware = SessionMiddleware(get_response)
253253
middleware.process_request(request)
254254
request.session.save()
255255

@@ -288,7 +288,7 @@ def test_flex_pricing_form_display(mocker, is_authed, has_submission):
288288
courseware_object=flex_form.selected_course,
289289
)
290290

291-
response = generate_flexible_pricing_response(request_user, flex_form)
291+
response = generate_flexible_pricing_response(mocker, request_user, flex_form)
292292

293293
# simple string checking for the rendered content
294294
# should match what's in the factory
@@ -330,7 +330,7 @@ def test_flex_pricing_form_state_display(mocker, submission_status):
330330
courseware_object=course_page.course,
331331
)
332332

333-
response = generate_flexible_pricing_response(request_user, flex_form)
333+
response = generate_flexible_pricing_response(mocker, request_user, flex_form)
334334

335335
if submission_status == FlexiblePriceStatus.CREATED:
336336
assert "Application Processing" in response.rendered_content
@@ -481,13 +481,13 @@ def test_flex_pricing_single_submission(
481481

482482
# test to make sure we get back a status message from the first form
483483

484-
response = generate_flexible_pricing_response(request_user, first_sub_form)
484+
response = generate_flexible_pricing_response(mocker, request_user, first_sub_form)
485485

486486
assert "Application Processing" in response.rendered_content
487487

488488
# then test to make sure we get a status message back from the second form too
489489

490-
response = generate_flexible_pricing_response(request_user, second_sub_form)
490+
response = generate_flexible_pricing_response(mocker, request_user, second_sub_form)
491491

492492
# should not get a form here - should get Application Processing
493493

@@ -534,15 +534,15 @@ def test_flex_pricing_form_state_display_no_discount_tier(
534534
tier=tier,
535535
)
536536

537-
response = generate_flexible_pricing_response(request_user, flex_form)
537+
response = generate_flexible_pricing_response(mocker, request_user, flex_form)
538538

539539
assert "No Discount Text" in response.rendered_content
540540

541541
flexprice.tier = other_tier
542542
flexprice.save()
543543
flexprice.refresh_from_db()
544544

545-
response = generate_flexible_pricing_response(request_user, flex_form)
545+
response = generate_flexible_pricing_response(mocker, request_user, flex_form)
546546

547547
assert "Approved" in response.rendered_content
548548

cms/urls.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
The pattern(s) defined here serve the same Wagtail view that the library-defined pattern serves.
1313
""" # noqa: RUF002
1414

15-
from django.conf.urls import url
15+
from django.urls import re_path
1616
from wagtail import views
1717
from wagtail.coreutils import WAGTAIL_APPEND_SLASH
1818

@@ -36,6 +36,6 @@
3636

3737

3838
urlpatterns = [
39-
url(custom_serve_pattern, views.serve, name="wagtail_serve_custom"),
40-
url(program_custom_serve_pattern, views.serve, name="wagtail_serve_custom"),
39+
re_path(custom_serve_pattern, views.serve, name="wagtail_serve_custom"),
40+
re_path(program_custom_serve_pattern, views.serve, name="wagtail_serve_custom"),
4141
]

courses/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
# pylint: disable=missing-docstring,invalid-name
2-
default_app_config = "courses.apps.CoursesConfig"

0 commit comments

Comments
 (0)