Skip to content

Commit 5f537cd

Browse files
author
Jiri Suchan
committed
prevent duplicate reviewers; enforce reviewer uniqueness in model
1 parent 23b81d7 commit 5f537cd

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

tests/test_admin.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class TestAdminViews(TestCase):
1313
fixtures = ['test.json']
1414

1515
def setUp(self):
16-
User.objects.create_superuser(username='admin', email='[email protected]', password='password')
16+
self.user = User.objects.create_superuser(username='admin', email='[email protected]', password='password')
1717
self.assertTrue(
1818
self.client.login(username='admin', password='password')
1919
)
@@ -128,11 +128,12 @@ def test_post_edit_form(self):
128128
self.assertEqual(email_recipients, {'[email protected]', '[email protected]'})
129129

130130
def test_post_create_form(self):
131+
review_user = User.objects.get(username='spongebob')
131132
response = self.client.post('/admin/pages/add/tests/simplepage/2/', {
132133
'title': "Subpage submitted",
133134
'slug': 'subpage-submitted',
134135

135-
'create_review_reviewers-TOTAL_FORMS': 2,
136+
'create_review_reviewers-TOTAL_FORMS': 4,
136137
'create_review_reviewers-INITIAL_FORMS': 0,
137138
'create_review_reviewers-MIN_NUM_FORMS': 0,
138139
'create_review_reviewers-MAX_NUM_FORMS': 1000,
@@ -141,10 +142,18 @@ def test_post_create_form(self):
141142
'create_review_reviewers-0-email': '[email protected]',
142143
'create_review_reviewers-0-DELETE': '',
143144

144-
'create_review_reviewers-1-user': User.objects.get(username='spongebob').pk,
145+
'create_review_reviewers-1-user': review_user.pk,
145146
'create_review_reviewers-1-email': '',
146147
'create_review_reviewers-1-DELETE': '',
147148

149+
'create_review_reviewers-2-user': review_user.pk,
150+
'create_review_reviewers-2-email': '',
151+
'create_review_reviewers-2-DELETE': '',
152+
153+
'create_review_reviewers-3-user': self.user.pk,
154+
'create_review_reviewers-3-email': self.user.email,
155+
'create_review_reviewers-3-DELETE': '',
156+
148157
'action-submit-for-review': '1',
149158
})
150159

@@ -160,3 +169,6 @@ def test_post_create_form(self):
160169
self.assertEqual(len(mail.outbox), 2)
161170
email_recipients = set(email.to[0] for email in mail.outbox)
162171
self.assertEqual(email_recipients, {'[email protected]', '[email protected]'})
172+
173+
review_view = self.client.get('/admin/wagtail_review/reviews/%s/view/' % review.pk)
174+
self.assertEqual(review_view.status_code, 200)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2.4 on 2019-08-23 16:37
2+
3+
from django.conf import settings
4+
from django.db import migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
11+
('wagtail_review', '0003_response'),
12+
]
13+
14+
operations = [
15+
migrations.AlterUniqueTogether(
16+
name='reviewer',
17+
unique_together={('review', 'user')},
18+
),
19+
]

wagtail_review/wagtail_hooks.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,17 @@ def handle_submit_for_review(request, page):
9797
raise Exception("Reviewer formset failed validation")
9898

9999
form.save()
100-
reviewer_formset.save()
101-
102-
# create a reviewer record for the current user
103100
review.reviewers.create(user=review.submitter)
104101

102+
review_users = {review.submitter}
103+
instances = reviewer_formset.save(commit=False)
104+
for instance in instances:
105+
if instance.user in review_users:
106+
continue
107+
if instance.user:
108+
review_users.add(instance.user)
109+
instance.save()
110+
105111
review.send_request_emails()
106112

107113
# clear original confirmation message as set by the create/edit view,

0 commit comments

Comments
 (0)