Skip to content

Commit 9ce9505

Browse files
Show submission deadline for users who haven't submitted during peer review phase (#125)
* Initial plan * Fix deadline confusion for projects in peer review state Co-authored-by: alexeygrigorev <875246+alexeygrigorev@users.noreply.github.com> * Address code review feedback - clean up test comments Co-authored-by: alexeygrigorev <875246+alexeygrigorev@users.noreply.github.com> * Remove trailing whitespace in test Co-authored-by: alexeygrigorev <875246+alexeygrigorev@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: alexeygrigorev <875246+alexeygrigorev@users.noreply.github.com>
1 parent 88221a8 commit 9ce9505

2 files changed

Lines changed: 71 additions & 3 deletions

File tree

courses/templates/courses/course.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,15 @@ <h2>Projects</h2>
9999
<span class="local-date">{{ project.submission_due_date | date:"c" }}</span>
100100
</div>
101101
{% elif project.state == 'PR' %}
102-
<div class="col-4 text-md-right" data-toggle="tooltip" data-placement="right" title="{{ project.days_until_pr_due }} days left to review your peers">
103-
<span class="local-date">{{ project.peer_review_due_date | date:"c" }}</span>
104-
</div>
102+
{% if project.submitted %}
103+
<div class="col-4 text-md-right" data-toggle="tooltip" data-placement="right" title="{{ project.days_until_pr_due }} days left to review your peers">
104+
<span class="local-date">{{ project.peer_review_due_date | date:"c" }}</span>
105+
</div>
106+
{% else %}
107+
<div class="col-4 text-md-right" data-toggle="tooltip" data-placement="right" title="{{ project.days_until_submission_due }} days left to submit your project">
108+
<span class="local-date">{{ project.submission_due_date | date:"c" }}</span>
109+
</div>
110+
{% endif %}
105111
{% elif project.state == 'CO' %}
106112
<div class="col-4 text-md-right" data-toggle="tooltip" data-placement="right" title="Project is completed">
107113
<span class="local-date">{{ project.peer_review_due_date | date:"c" }}</span>

courses/tests/test_course.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,3 +770,65 @@ def test_duplicate_course_preserves_visibility(self):
770770
# Test that visibility was preserved
771771
self.assertFalse(new_course.visible)
772772

773+
def test_project_deadline_display_for_peer_review_state(self):
774+
"""Test that the correct deadline is shown based on submission status when project is in PR state"""
775+
# Create a project in peer review state
776+
pr_project = Project.objects.create(
777+
course=self.course,
778+
title="Peer Review Project",
779+
slug="pr-project",
780+
state=ProjectState.PEER_REVIEWING.value,
781+
submission_due_date=timezone.now() - timezone.timedelta(days=1),
782+
peer_review_due_date=timezone.now() + timezone.timedelta(days=7),
783+
)
784+
785+
# Create another user who submitted the project
786+
user_with_submission = User.objects.create_user(
787+
username="submitted@test.com",
788+
email="submitted@test.com",
789+
password="12345"
790+
)
791+
enrollment_with_submission = Enrollment.objects.create(
792+
student=user_with_submission,
793+
course=self.course
794+
)
795+
ProjectSubmission.objects.create(
796+
project=pr_project,
797+
student=user_with_submission,
798+
enrollment=enrollment_with_submission,
799+
github_link="https://github.com/test/pr-repo",
800+
)
801+
802+
# Test 1: Unauthenticated user should see submission deadline
803+
response = self.client.get(
804+
reverse("course", kwargs={"course_slug": self.course.slug})
805+
)
806+
self.assertEqual(response.status_code, 200)
807+
content = response.content.decode('utf-8')
808+
# Should show submission deadline date
809+
submission_deadline_str = pr_project.submission_due_date.strftime('%Y-%m-%d')
810+
self.assertIn(submission_deadline_str, content)
811+
812+
# Test 2: Authenticated user WITHOUT submission should see submission deadline
813+
self.client.login(username="test@test.com", password="12345")
814+
response = self.client.get(
815+
reverse("course", kwargs={"course_slug": self.course.slug})
816+
)
817+
self.assertEqual(response.status_code, 200)
818+
content = response.content.decode('utf-8')
819+
# Should show submission deadline for the PR project
820+
submission_deadline_str = pr_project.submission_due_date.strftime('%Y-%m-%d')
821+
self.assertIn(submission_deadline_str, content)
822+
823+
# Test 3: Authenticated user WITH submission should see peer review deadline
824+
self.client.logout()
825+
self.client.login(username="submitted@test.com", password="12345")
826+
response = self.client.get(
827+
reverse("course", kwargs={"course_slug": self.course.slug})
828+
)
829+
self.assertEqual(response.status_code, 200)
830+
content = response.content.decode('utf-8')
831+
# Should show peer review deadline
832+
peer_review_deadline_str = pr_project.peer_review_due_date.strftime('%Y-%m-%d')
833+
self.assertIn(peer_review_deadline_str, content)
834+

0 commit comments

Comments
 (0)