Skip to content

Commit 362bcb9

Browse files
committed
Merge branch 'master' into add_request_files_to_post_comment
# Conflicts: # tests/testapp/tests/__init__.py
2 parents a376962 + 36bd490 commit 362bcb9

File tree

9 files changed

+45
-63
lines changed

9 files changed

+45
-63
lines changed

HISTORY.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ History
66
Unreleased
77
----------
88

9-
* Confirmed support for Django 4.1.
9+
* Confirmed support for Django 4.1 and 4.2.
10+
* Dropped support for Django < 3.2.
1011
* Confirmed support for Python 3.10.
11-
* Removed support for Python 3.6.
12+
* Dropped support for Python 3.6.
1213

1314
2.2.0 (2022-01-31)
1415
------------------

django_comments/compat.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

django_comments/views/utils.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
from django.http import HttpResponseRedirect
99
from django.shortcuts import render, resolve_url
1010
from django.core.exceptions import ObjectDoesNotExist
11-
12-
from ..compat import url_has_allowed_host_and_scheme
11+
from django.utils.http import url_has_allowed_host_and_scheme
1312

1413
import django_comments
1514

setup.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@
2323
'Development Status :: 5 - Production/Stable',
2424
'Environment :: Web Environment',
2525
'Framework :: Django',
26-
'Framework :: Django :: 2.2',
27-
'Framework :: Django :: 3.0',
28-
'Framework :: Django :: 3.1',
2926
'Framework :: Django :: 3.2',
3027
'Framework :: Django :: 4.0',
3128
'Framework :: Django :: 4.1',
29+
'Framework :: Django :: 4.2',
3230
'Intended Audience :: Developers',
3331
'Natural Language :: English',
3432
'License :: OSI Approved :: BSD License',
@@ -43,5 +41,5 @@
4341
packages=find_packages(exclude=['tests', 'tests.*']),
4442
include_package_data=True,
4543
test_suite='tests.runtests.main',
46-
install_requires=['Django>=2.2']
44+
install_requires=['Django>=3.2']
4745
)

tests/testapp/fixtures/comment_tests.json

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,5 @@
3737
"author" : 2,
3838
"headline" : "Dog Bites Man"
3939
}
40-
},
41-
42-
{
43-
"model" : "auth.user",
44-
"pk" : 100,
45-
"fields" : {
46-
"username" : "normaluser",
47-
"password" : "34ea4aaaf24efcbb4b30d27302f8657f",
48-
"first_name": "Joe",
49-
"last_name": "Normal",
50-
"email": "[email protected]"
51-
}
5240
}
5341
]

tests/testapp/tests/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818

1919
@override_settings(
20-
PASSWORD_HASHERS=('django.contrib.auth.hashers.UnsaltedMD5PasswordHasher',),
20+
PASSWORD_HASHERS=('django.contrib.auth.hashers.MD5PasswordHasher',),
2121
ROOT_URLCONF='testapp.urls_default',
2222
)
2323
class CommentTestCase(TestCase):
@@ -26,6 +26,16 @@ class CommentTestCase(TestCase):
2626
"""
2727
fixtures = ["comment_tests"]
2828

29+
@classmethod
30+
def setUpTestData(cls):
31+
super().setUpTestData()
32+
cls.user = User.objects.create(
33+
username="normaluser",
34+
first_name="Joe",
35+
last_name="Normal",
36+
37+
)
38+
2939
def tearDown(self):
3040
super().tearDown()
3141
shutil.rmtree(settings.MEDIA_ROOT, ignore_errors=True)

tests/testapp/tests/test_comment_views.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,16 +190,15 @@ def testPostAsAuthenticatedUser(self):
190190
a = Article.objects.get(pk=1)
191191
data = self.getValidData(a)
192192
data['name'] = data['email'] = ''
193-
self.client.login(username="normaluser", password="normaluser")
193+
self.client.force_login(self.user)
194194
response = self.client.post("/post/", data, REMOTE_ADDR="1.2.3.4")
195195
self.assertEqual(response.status_code, 302)
196196
self.assertEqual(Comment.objects.count(), 1)
197197
c = Comment.objects.first()
198198
self.assertEqual(c.ip_address, "1.2.3.4")
199-
u = User.objects.get(username='normaluser')
200-
self.assertEqual(c.user, u)
201-
self.assertEqual(c.user_name, u.get_full_name())
202-
self.assertEqual(c.user_email, u.email)
199+
self.assertEqual(c.user, self.user)
200+
self.assertEqual(c.user_name, self.user.get_full_name())
201+
self.assertEqual(c.user_email, self.user.email)
203202

204203
def testPostAsAuthenticatedUserWithoutFullname(self):
205204
"""

tests/testapp/tests/test_moderation_views.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ def testFlagGet(self):
1515
"""GET the flag view: render a confirmation page."""
1616
comments = self.createSomeComments()
1717
pk = comments[0].pk
18-
self.client.login(username="normaluser", password="normaluser")
18+
self.client.force_login(self.user)
1919
response = self.client.get("/flag/%d/" % pk)
2020
self.assertTemplateUsed(response, "comments/flag.html")
2121

2222
def testFlagPost(self):
2323
"""POST the flag view: actually flag the view (nice for XHR)"""
2424
comments = self.createSomeComments()
2525
pk = comments[0].pk
26-
self.client.login(username="normaluser", password="normaluser")
26+
self.client.force_login(self.user)
2727
response = self.client.post("/flag/%d/" % pk)
2828
self.assertRedirects(response, "/flagged/?c=%d" % pk)
2929
c = Comment.objects.get(pk=pk)
@@ -36,7 +36,7 @@ def testFlagPostNext(self):
3636
"""
3737
comments = self.createSomeComments()
3838
pk = comments[0].pk
39-
self.client.login(username="normaluser", password="normaluser")
39+
self.client.force_login(self.user)
4040
response = self.client.post("/flag/%d/" % pk, {'next': "/go/here/"})
4141
self.assertRedirects(response, "/go/here/?c=%d" % pk, fetch_redirect_response=False)
4242

@@ -47,7 +47,7 @@ def testFlagPostUnsafeNext(self):
4747
"""
4848
comments = self.createSomeComments()
4949
pk = comments[0].pk
50-
self.client.login(username="normaluser", password="normaluser")
50+
self.client.force_login(self.user)
5151
response = self.client.post("/flag/%d/" % pk,
5252
{'next': "http://elsewhere/bad"})
5353
self.assertRedirects(response, "/flagged/?c=%d" % pk)
@@ -119,7 +119,7 @@ def testDeletePermissions(self):
119119
fetch_redirect_response=False)
120120

121121
# Test that we return forbidden if you're logged in but don't have access.
122-
self.client.login(username="normaluser", password="normaluser")
122+
self.client.force_login(self.user)
123123
response = self.client.get("/delete/%d/" % pk)
124124
self.assertEqual(response.status_code, 403)
125125

@@ -132,7 +132,7 @@ def testDeletePost(self):
132132
comments = self.createSomeComments()
133133
pk = comments[0].pk
134134
makeModerator("normaluser")
135-
self.client.login(username="normaluser", password="normaluser")
135+
self.client.force_login(self.user)
136136
response = self.client.post("/delete/%d/" % pk)
137137
self.assertRedirects(response, "/deleted/?c=%d" % pk)
138138
c = Comment.objects.get(pk=pk)
@@ -147,7 +147,7 @@ def testDeletePostNext(self):
147147
comments = self.createSomeComments()
148148
pk = comments[0].pk
149149
makeModerator("normaluser")
150-
self.client.login(username="normaluser", password="normaluser")
150+
self.client.force_login(self.user)
151151
response = self.client.post("/delete/%d/" % pk, {'next': "/go/here/"})
152152
self.assertRedirects(response, "/go/here/?c=%d" % pk, fetch_redirect_response=False)
153153

@@ -159,7 +159,7 @@ def testDeletePostUnsafeNext(self):
159159
comments = self.createSomeComments()
160160
pk = comments[0].pk
161161
makeModerator("normaluser")
162-
self.client.login(username="normaluser", password="normaluser")
162+
self.client.force_login(self.user)
163163
response = self.client.post("/delete/%d/" % pk,
164164
{'next': "http://elsewhere/bad"})
165165
self.assertRedirects(response, "/deleted/?c=%d" % pk)
@@ -201,7 +201,7 @@ def testApprovePermissions(self):
201201
)
202202

203203
# Test that we return forbidden if you're logged in but don't have access.
204-
self.client.login(username="normaluser", password="normaluser")
204+
self.client.force_login(self.user)
205205
response = self.client.get("/approve/%d/" % pk)
206206
self.assertEqual(response.status_code, 403)
207207

@@ -217,7 +217,7 @@ def testApprovePost(self):
217217
c1.save()
218218

219219
makeModerator("normaluser")
220-
self.client.login(username="normaluser", password="normaluser")
220+
self.client.force_login(self.user)
221221
response = self.client.post("/approve/%d/" % c1.pk)
222222
self.assertRedirects(response, "/approved/?c=%d" % c1.pk)
223223
c = Comment.objects.get(pk=c1.pk)
@@ -234,7 +234,7 @@ def testApprovePostNext(self):
234234
c1.save()
235235

236236
makeModerator("normaluser")
237-
self.client.login(username="normaluser", password="normaluser")
237+
self.client.force_login(self.user)
238238
response = self.client.post("/approve/%d/" % c1.pk,
239239
{'next': "/go/here/"})
240240
self.assertRedirects(response, "/go/here/?c=%d" % c1.pk, fetch_redirect_response=False)
@@ -249,7 +249,7 @@ def testApprovePostUnsafeNext(self):
249249
c1.save()
250250

251251
makeModerator("normaluser")
252-
self.client.login(username="normaluser", password="normaluser")
252+
self.client.force_login(self.user)
253253
response = self.client.post("/approve/%d/" % c1.pk,
254254
{'next': "http://elsewhere/bad"})
255255
self.assertRedirects(response, "/approved/?c=%d" % c1.pk)
@@ -278,37 +278,36 @@ def testApprovedView(self):
278278
@override_settings(ROOT_URLCONF='testapp.urls_admin')
279279
class AdminActionsTests(CommentTestCase):
280280

281-
def setUp(self):
282-
super().setUp()
283-
281+
@classmethod
282+
def setUpTestData(cls):
283+
super().setUpTestData()
284284
# Make "normaluser" a moderator
285-
u = User.objects.get(username="normaluser")
286-
u.is_staff = True
285+
cls.user.is_staff = True
287286
perms = Permission.objects.filter(
288287
content_type__app_label='django_comments',
289288
codename__endswith='comment'
290289
)
291290
for perm in perms:
292-
u.user_permissions.add(perm)
293-
u.save()
291+
cls.user.user_permissions.add(perm)
292+
cls.user.save()
294293

295294
def testActionsNonModerator(self):
296295
self.createSomeComments()
297-
self.client.login(username="normaluser", password="normaluser")
296+
self.client.force_login(self.user)
298297
response = self.client.get("/admin/django_comments/comment/")
299298
self.assertNotContains(response, "approve_comments")
300299

301300
def testActionsModerator(self):
302301
self.createSomeComments()
303302
makeModerator("normaluser")
304-
self.client.login(username="normaluser", password="normaluser")
303+
self.client.force_login(self.user)
305304
response = self.client.get("/admin/django_comments/comment/")
306305
self.assertContains(response, "approve_comments")
307306

308307
def testActionsDisabledDelete(self):
309308
"Tests a CommentAdmin where 'delete_selected' has been disabled."
310309
self.createSomeComments()
311-
self.client.login(username="normaluser", password="normaluser")
310+
self.client.force_login(self.user)
312311
response = self.client.get('/admin2/django_comments/comment/')
313312
self.assertEqual(response.status_code, 200)
314313
self.assertNotContains(response, '<option value="delete_selected">')
@@ -329,7 +328,7 @@ def testActionsMessageTranslations(self):
329328
one_comment = c1.pk
330329
many_comments = [c2.pk, c3.pk, c4.pk]
331330
makeModerator("normaluser")
332-
self.client.login(username="normaluser", password="normaluser")
331+
self.client.force_login(self.user)
333332
with translation.override('en'):
334333
# Test approving
335334
self.performActionAndCheckMessage('approve_comments', one_comment,

tox.ini

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
[tox]
22
envlist =
3-
py3{7,8,9}-django22
4-
py3{7,8,9}-django30
5-
py3{7,8,9}-django31
63
py3{7,8,9,10}-django32
74
py3{8,9,10}-django40
85
py3{8,9,10}-django41
6+
py3{8,9,10}-django42
97
py3{8,9,10}-main
108

119
[testenv]
@@ -18,10 +16,8 @@ commands = {envpython} setup.py test
1816
setenv=
1917
PYTHONWARNINGS=default
2018
deps=
21-
django-22: Django>=2.2a1,<3.0
22-
django-30: Django>=3.0a1,<3.1
23-
django-31: Django>=3.1a1,<3.2
2419
django-32: Django>=3.2a1,<4.0
2520
django-40: Django>=4.0a1,<4.1
2621
django-41: Django>=4.1a1,<4.2
22+
django-42: Django>=4.2a1,<5.0
2723
django-main: https://github.com/django/django/archive/main.tar.gz

0 commit comments

Comments
 (0)