diff --git a/econplayground/assignment/tests/test_views.py b/econplayground/assignment/tests/test_views.py index d6c2a2aad..c1e786c09 100644 --- a/econplayground/assignment/tests/test_views.py +++ b/econplayground/assignment/tests/test_views.py @@ -534,3 +534,15 @@ def test_assignment_step_value_submission(self): score_path.refresh_from_db() self.assertEqual(score_path.score, 0.5) + + +class AssignmentDetailStudentViewTest( + LoggedInTestStudentMixin, AssignmentMixin, TestCase): + def test_assignment_step_view(self): + assignment = self.setup_sample_assignment() + r = self.client.get(reverse('assignment_detail_student', kwargs={ + 'pk': assignment.pk + })) + + self.assertEqual(r.status_code, 200) + self.assertContains(r, assignment.title) diff --git a/econplayground/assignment/views.py b/econplayground/assignment/views.py index 9897c3b92..a5101fe81 100644 --- a/econplayground/assignment/views.py +++ b/econplayground/assignment/views.py @@ -114,6 +114,14 @@ def get_context_data(self, **kwargs): return ctx +class AssignmentDetailStudentView(LoginRequiredMixin, DetailView): + """ + Read-only view for working through an assignment. + """ + model = Assignment + template_name = 'assignment/assignment_detail_student.html' + + class AssignmentTreeUpdateView(LoginRequiredMixin, UserPassesTestMixin, View): """ Add and remove nodes from the assignment tree. diff --git a/econplayground/main/tests/test_views.py b/econplayground/main/tests/test_views.py index 3cda28274..b4ddbbe45 100644 --- a/econplayground/main/tests/test_views.py +++ b/econplayground/main/tests/test_views.py @@ -748,8 +748,12 @@ def test_get(self): self.assertContains(r, 'Topic B') self.assertEqual(r.context['all_count'], 3) self.assertEqual(r.context['featured_count'], 2) - self.assertEqual(r.context['topic_list'][0].published_graph_count(), 2) - self.assertEqual(r.context['topic_list'][1].published_graph_count(), 1) + + self.t1.refresh_from_db() + self.t2.refresh_from_db() + self.assertEqual(len(r.context['topic_list']), 2) + self.assertEqual(self.t1.published_graph_count(), 2) + self.assertEqual(self.t2.published_graph_count(), 1) r = self.client.get( '{}?all=true'.format( @@ -769,8 +773,12 @@ def test_get(self): self.assertContains(r, 'Topic B') self.assertEqual(r.context['all_count'], 3) self.assertEqual(r.context['featured_count'], 2) - self.assertEqual(r.context['topic_list'][0].published_graph_count(), 2) - self.assertEqual(r.context['topic_list'][1].published_graph_count(), 1) + + self.t1.refresh_from_db() + self.t2.refresh_from_db() + self.assertEqual(len(r.context['topic_list']), 2) + self.assertEqual(self.t1.published_graph_count(), 2) + self.assertEqual(self.t2.published_graph_count(), 1) r = self.client.get( '{}?topic={}'.format( @@ -815,8 +823,12 @@ def test_get(self): self.assertContains(r, 'Topic B') self.assertEqual(r.context['all_count'], 3) self.assertEqual(r.context['featured_count'], 2) - self.assertEqual(r.context['topic_list'][0].published_graph_count(), 2) - self.assertEqual(r.context['topic_list'][1].published_graph_count(), 1) + + self.t1.refresh_from_db() + self.t2.refresh_from_db() + self.assertEqual(len(r.context['topic_list']), 2) + self.assertEqual(self.t1.published_graph_count(), 2) + self.assertEqual(self.t2.published_graph_count(), 1) class MockLTI(object): diff --git a/econplayground/templates/assignment/assignment_detail_student.html b/econplayground/templates/assignment/assignment_detail_student.html new file mode 100644 index 000000000..956598447 --- /dev/null +++ b/econplayground/templates/assignment/assignment_detail_student.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}{{ object.title }}{% endblock %} + +{% block breadcrumb %} + +{% endblock %} + +{% block pagetitle %} +

{{ object.title }}

+{% endblock %} + +{% block content %} +
+ Welcome to assignment {{object.pk}}! +
+ + {% if object.first_step %} + + First question + + {% endif %} +{% endblock %} diff --git a/econplayground/templates/assignment/assignment_list_student.html b/econplayground/templates/assignment/assignment_list_student.html index feb5b22f1..56a32ace9 100644 --- a/econplayground/templates/assignment/assignment_list_student.html +++ b/econplayground/templates/assignment/assignment_list_student.html @@ -17,14 +17,10 @@ {% for assignment in assignment_list %} - {% if assignment.first_step %} - - {{assignment.title}} - - {% else %} + {{assignment.title}} - {% endif %} + {% for cohort in assignment.cohorts.all %} diff --git a/econplayground/templates/assignment/step_detail.html b/econplayground/templates/assignment/step_detail.html index 6241beb51..7587ebd71 100644 --- a/econplayground/templates/assignment/step_detail.html +++ b/econplayground/templates/assignment/step_detail.html @@ -8,18 +8,26 @@ {% endblock %} {% block breadcrumb %} - + {% user_is_instructor request.user as i_am_instructor %} + + {% endblock %} {% block pagetitle %} diff --git a/econplayground/urls.py b/econplayground/urls.py index 184162ba8..891db96e3 100644 --- a/econplayground/urls.py +++ b/econplayground/urls.py @@ -103,6 +103,9 @@ def trigger_error(request): path('assignment//', assignment_views.AssignmentDetailView.as_view(), name='assignment_detail'), + path('assignment//view/', + assignment_views.AssignmentDetailStudentView.as_view(), + name='assignment_detail_student'), path('assignment_assignment//edit/', assignment_views.AssignmentUpdateView.as_view(), name='assignment_assignment_edit'),