From 4be83efcbb4033dbad00281ee067bc30a90fce77 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Mon, 4 Mar 2019 17:55:23 +0000
Subject: [PATCH] Gh-1016: Make sure we dont duplicate assignment when adding
 in a role

---
 opentech/apply/funds/forms.py            | 7 ++-----
 opentech/apply/funds/tests/test_views.py | 8 ++++++++
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/opentech/apply/funds/forms.py b/opentech/apply/funds/forms.py
index a53561320..544007cef 100644
--- a/opentech/apply/funds/forms.py
+++ b/opentech/apply/funds/forms.py
@@ -181,11 +181,8 @@ class UpdateReviewersForm(forms.ModelForm):
         }
         for role, reviewer in assigned_roles.items():
             if reviewer:
-                AssignedReviewers.objects.update_or_create(
-                    submission=instance,
-                    role=role,
-                    defaults={'reviewer': reviewer},
-                )
+                AssignedReviewers.objects.filter(submission=instance, role=role).delete()
+                AssignedReviewers.objects.update_or_create(submission=instance, reviewer=reviewer, defaults={'role': role})
 
         # 2. Update non-role reviewers
         # 2a. Remove those not on form
diff --git a/opentech/apply/funds/tests/test_views.py b/opentech/apply/funds/tests/test_views.py
index 024aea532..29bb2dfc0 100644
--- a/opentech/apply/funds/tests/test_views.py
+++ b/opentech/apply/funds/tests/test_views.py
@@ -297,6 +297,14 @@ class TestReviewersUpdateView(BaseSubmissionViewTestCase):
         # Make sure that the ex-role-reviewer is still assigned record
         self.assertCountEqual(submission.reviewers.all(), self.staff[0:2])
 
+    def test_can_be_made_role_and_not_duplciated(self):
+        submission = ApplicationSubmissionFactory()
+
+        ReviewFactory(submission=submission, author=self.staff[0])
+
+        self.post_form(submission, reviewer_roles=[self.staff[0]])
+        self.assertCountEqual(submission.reviewers.all(), [self.staff[0]])
+
     def test_can_remove_external_reviewer_and_review_remains(self):
         submission = ApplicationSubmissionFactory(lead=self.user)
         reviewer = self.reviewers[0]
-- 
GitLab