Skip to content

Commit 5bc6afe

Browse files
committed
Sync submission status / pending status
1 parent 50a2301 commit 5bc6afe

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

backend/submissions/models.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ class Submission(TimeStampedModel):
109109

110110
objects = SubmissionQuerySet().as_manager()
111111

112+
def __init__(self, *args, **kwargs):
113+
super().__init__(*args, **kwargs)
114+
self._original_status = self.status
115+
112116
@property
113117
def hashid(self):
114118
return encode_hashid(self.pk)
@@ -185,9 +189,20 @@ def get_admin_url(self):
185189
)
186190

187191
def save(self, *args, **kwargs):
192+
update_fields = kwargs.get("update_fields", None)
193+
188194
if not self.slug:
189195
self.slug = slugify(self.title.localize("en"))
190196

197+
if update_fields:
198+
update_fields.append("slug")
199+
200+
if self.pending_status == self._original_status:
201+
self.pending_status = self.status
202+
203+
if update_fields:
204+
update_fields.append("pending_status")
205+
191206
return super().save(*args, **kwargs)
192207

193208
def __str__(self):

backend/submissions/tests/test_models.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
from submissions.models import Submission
12
from submissions.tests.factories import SubmissionFactory
23
from pytest import mark
34

45
from i18n.strings import LazyI18nString
56

7+
pytestmark = mark.django_db
8+
69

7-
@mark.django_db
810
def test_slug_is_not_regenerated_when_changing_title():
911
submission = SubmissionFactory(title=LazyI18nString({"en": "hello", "it": "hell"}))
1012
assert submission.slug == "hello"
@@ -15,3 +17,33 @@ def test_slug_is_not_regenerated_when_changing_title():
1517
submission.refresh_from_db()
1618

1719
assert submission.slug == "hello"
20+
21+
22+
def test_syncs_pending_status_when_changing_status():
23+
submission = SubmissionFactory(
24+
status=Submission.STATUS.accepted,
25+
pending_status=Submission.STATUS.accepted,
26+
)
27+
28+
submission.status = Submission.STATUS.rejected
29+
submission.save()
30+
31+
submission.refresh_from_db()
32+
33+
assert submission.status == Submission.STATUS.rejected
34+
assert submission.pending_status == Submission.STATUS.rejected
35+
36+
37+
def test_leaves_pending_status_unchanged_if_different():
38+
submission = SubmissionFactory(
39+
status=Submission.STATUS.proposed,
40+
pending_status=Submission.STATUS.rejected,
41+
)
42+
43+
submission.status = Submission.STATUS.waiting_list
44+
submission.save()
45+
46+
submission.refresh_from_db()
47+
48+
assert submission.status == Submission.STATUS.waiting_list
49+
assert submission.pending_status == Submission.STATUS.rejected

0 commit comments

Comments
 (0)