Skip to content

Commit 32757b1

Browse files
Fix peer review badge color to show green when completed
Co-authored-by: alexeygrigorev <875246+alexeygrigorev@users.noreply.github.com>
1 parent 11cfe4f commit 32757b1

2 files changed

Lines changed: 120 additions & 2 deletions

File tree

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
from django.test import TestCase, Client
2+
from django.urls import reverse
3+
from django.utils import timezone
4+
5+
from courses.models import (
6+
User,
7+
Course,
8+
Enrollment,
9+
Project,
10+
ProjectState,
11+
ProjectSubmission,
12+
)
13+
14+
15+
class PeerReviewBadgeTests(TestCase):
16+
"""Test cases for peer review badge color changes based on completion status"""
17+
18+
def setUp(self):
19+
self.client = Client()
20+
self.user = User.objects.create_user(
21+
username="test@test.com",
22+
email="test@test.com",
23+
password="12345"
24+
)
25+
self.course = Course.objects.create(
26+
title="Test Course",
27+
slug="test-course"
28+
)
29+
self.enrollment = Enrollment.objects.create(
30+
student=self.user,
31+
course=self.course
32+
)
33+
34+
# Create a project in peer review state
35+
self.pr_project = Project.objects.create(
36+
course=self.course,
37+
title="Peer Review Project",
38+
slug="pr-project",
39+
state=ProjectState.PEER_REVIEWING.value,
40+
submission_due_date=timezone.now() - timezone.timedelta(days=1),
41+
peer_review_due_date=timezone.now() + timezone.timedelta(days=7),
42+
)
43+
44+
def test_peer_review_badge_red_when_not_completed(self):
45+
"""Test that the badge is red when peer reviews are not completed"""
46+
# Create a submission with reviewed_enough_peers = False
47+
ProjectSubmission.objects.create(
48+
project=self.pr_project,
49+
student=self.user,
50+
enrollment=self.enrollment,
51+
github_link="https://github.com/test/repo",
52+
reviewed_enough_peers=False
53+
)
54+
55+
self.client.login(username="test@test.com", password="12345")
56+
response = self.client.get(
57+
reverse("course", kwargs={"course_slug": self.course.slug})
58+
)
59+
60+
self.assertEqual(response.status_code, 200)
61+
62+
# Get the project from the context
63+
projects = response.context["projects"]
64+
self.assertEqual(len(projects), 1)
65+
project = projects[0]
66+
67+
# Badge should be red (bg-danger) and state should be "Review"
68+
self.assertEqual(project.badge_css_class, "bg-danger")
69+
self.assertEqual(project.badge_state_name, "Review")
70+
71+
def test_peer_review_badge_green_when_completed(self):
72+
"""Test that the badge is green when peer reviews are completed"""
73+
# Create a submission with reviewed_enough_peers = True
74+
ProjectSubmission.objects.create(
75+
project=self.pr_project,
76+
student=self.user,
77+
enrollment=self.enrollment,
78+
github_link="https://github.com/test/repo",
79+
reviewed_enough_peers=True
80+
)
81+
82+
self.client.login(username="test@test.com", password="12345")
83+
response = self.client.get(
84+
reverse("course", kwargs={"course_slug": self.course.slug})
85+
)
86+
87+
self.assertEqual(response.status_code, 200)
88+
89+
# Get the project from the context
90+
projects = response.context["projects"]
91+
self.assertEqual(len(projects), 1)
92+
project = projects[0]
93+
94+
# Badge should be green (bg-success) and state should be "Review completed"
95+
self.assertEqual(project.badge_css_class, "bg-success")
96+
self.assertEqual(project.badge_state_name, "Review completed")
97+
98+
def test_peer_review_badge_secondary_when_not_submitted(self):
99+
"""Test that the badge is secondary (gray) when project is not submitted"""
100+
self.client.login(username="test@test.com", password="12345")
101+
response = self.client.get(
102+
reverse("course", kwargs={"course_slug": self.course.slug})
103+
)
104+
105+
self.assertEqual(response.status_code, 200)
106+
107+
# Get the project from the context
108+
projects = response.context["projects"]
109+
self.assertEqual(len(projects), 1)
110+
project = projects[0]
111+
112+
# Badge should be secondary (bg-secondary) when not submitted
113+
self.assertEqual(project.badge_css_class, "bg-secondary")
114+
self.assertEqual(project.badge_state_name, "Not submitted")

courses/views/course.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,12 @@ def update_project_with_additional_info(project: Project) -> None:
131131
project.badge_css_class = "bg-info"
132132

133133
elif project.state == ProjectState.PEER_REVIEWING.value:
134-
project.badge_state_name = "Review"
135-
project.badge_css_class = "bg-danger"
134+
if submission.reviewed_enough_peers:
135+
project.badge_state_name = "Review completed"
136+
project.badge_css_class = "bg-success"
137+
else:
138+
project.badge_state_name = "Review"
139+
project.badge_css_class = "bg-danger"
136140

137141
elif project.state == ProjectState.COMPLETED.value:
138142
project.score = submission.total_score

0 commit comments

Comments
 (0)