Skip to content

Commit 59a99f9

Browse files
committed
add intermed
1 parent b53d24d commit 59a99f9

5 files changed

Lines changed: 41 additions & 4 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by hand on 2025-12-19
2+
from django.db import migrations
3+
4+
5+
def create_intermediate(apps, schema_editor):
6+
PoTW = apps.get_model('index', 'ProblemOfTheWeek')
7+
PoTW.objects.get_or_create(level='intermediate', defaults={'title': '', 'link': None})
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
('index', '0012_add_problemoftheweek'),
14+
]
15+
16+
operations = [
17+
migrations.RunPython(create_intermediate, reverse_code=migrations.RunPython.noop),
18+
]

autograder/apps/index/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,13 @@ def __str__(self):
7474

7575
class ProblemOfTheWeek(models.Model):
7676
BEGINNER = "beginner"
77+
INTERMEDIATE = "intermediate"
7778
ADVANCED = "advanced"
78-
LEVEL_CHOICES = ((BEGINNER, "Beginner"), (ADVANCED, "Advanced"))
79+
LEVEL_CHOICES = (
80+
(BEGINNER, "Beginner"),
81+
(INTERMEDIATE, "Intermediate"),
82+
(ADVANCED, "Advanced"),
83+
)
7984

8085
level = models.CharField(max_length=20, choices=LEVEL_CHOICES, unique=True)
8186
title = models.CharField(max_length=100, default="")

autograder/apps/index/tests.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
class POTWViewTests(TestCase):
77
def setUp(self):
88
ProblemOfTheWeek.objects.create(level=ProblemOfTheWeek.BEGINNER, title="Beginner Test", link="https://example.com/beg")
9+
ProblemOfTheWeek.objects.create(level=ProblemOfTheWeek.INTERMEDIATE, title="Intermediate Test", link="https://example.com/int")
910
ProblemOfTheWeek.objects.create(level=ProblemOfTheWeek.ADVANCED, title="Advanced Test", link="https://example.com/adv")
1011

1112
def test_potw_renders(self):
1213
resp = self.client.get(reverse('index:potw'))
1314
self.assertEqual(resp.status_code, 200)
1415
self.assertContains(resp, 'Problem of the Week: Beginner')
16+
self.assertContains(resp, 'Problem of the Week: Intermediate')
1517
self.assertContains(resp, 'Problem of the Week: Advanced')
1618
self.assertContains(resp, 'Click to see')

autograder/apps/index/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99

1010
@login_required
1111
def potw_view(request):
12-
"""Render the Problem of the Week page with beginner and advanced entries."""
12+
"""Render the Problem of the Week page with beginner, intermediate and advanced entries."""
1313
beginner = ProblemOfTheWeek.objects.filter(level=ProblemOfTheWeek.BEGINNER).first()
14+
intermediate = ProblemOfTheWeek.objects.filter(level=ProblemOfTheWeek.INTERMEDIATE).first()
1415
advanced = ProblemOfTheWeek.objects.filter(level=ProblemOfTheWeek.ADVANCED).first()
1516

1617
context = {
1718
"active": "potw",
1819
"beginner": beginner,
20+
"intermediate": intermediate,
1921
"advanced": advanced,
2022
}
2123
return render(request, "index/potw.html", context)

autograder/templates/index/potw.html

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<div class="main-block">
1919
<div class="info">
2020
<div style="display:flex; gap:20px; flex-wrap:wrap;">
21-
<div style="flex:1; min-width:260px; border:1px solid #ddd; padding:16px; border-radius:6px;">
21+
<div style="flex:1; min-width:240px; border:1px solid #ddd; padding:16px; border-radius:6px;">
2222
<h3>Problem of the Week: Beginner</h3>
2323
<p>{{ beginner.title|default:'Problem of the Week: Beginner' }}</p>
2424
{% if beginner and beginner.link %}
@@ -28,7 +28,17 @@ <h3>Problem of the Week: Beginner</h3>
2828
{% endif %}
2929
</div>
3030

31-
<div style="flex:1; min-width:260px; border:1px solid #ddd; padding:16px; border-radius:6px;">
31+
<div style="flex:1; min-width:240px; border:1px solid #ddd; padding:16px; border-radius:6px;">
32+
<h3>Problem of the Week: Intermediate</h3>
33+
<p>{{ intermediate.title|default:'Problem of the Week: Intermediate' }}</p>
34+
{% if intermediate and intermediate.link %}
35+
<a class="btn" target="_blank" href="{{ intermediate.link }}">Click to see</a>
36+
{% else %}
37+
<button class="btn" disabled>Link not set</button>
38+
{% endif %}
39+
</div>
40+
41+
<div style="flex:1; min-width:240px; border:1px solid #ddd; padding:16px; border-radius:6px;">
3242
<h3>Problem of the Week: Advanced</h3>
3343
<p>{{ advanced.title|default:'Problem of the Week: Advanced' }}</p>
3444
{% if advanced and advanced.link %}

0 commit comments

Comments
 (0)