def test_no_examiners_configured_for_assignment_groups_warning(self): assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_end') mommy.make('core.RelatedExaminer', period=assignment.period) mommy.make('core.Candidate', assignment_group__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists('#id_devilry_admin_assignment_examiner_no_examiners_on_assignment')) # Check warning texts self.assertIn( 'warning: No examiners configured', mockresponse.selector.one('#id_devilry_admin_assignment_examiner_no_examiners_on_assignment') .alltext_normalized) self.assertIn( 'Only configured examiners can see and correct deliveries from students.', mockresponse.selector.one('#id_devilry_admin_assignment_examiner_no_examiners_on_assignment') .alltext_normalized) # Check warning links url = reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='examineroverview', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_no_examiners_on_assignment > strong > a').get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_group_student', appname='feedbackfeed', roleid=self.group.id, viewname=crapp.INDEXVIEW_NAME, )
def get_success_url(self): return reverse_cradmin_url( instanceid='devilry_admin_periodadmin', appname='manage_tags', roleid=self.request.cradmin_role.id, viewname=crapp.INDEXVIEW_NAME )
def get_url(self): return reverse_cradmin_url( instanceid='devilry_examiner_assignment', appname='grouplist', roleid=self.assignment.id, viewname=crapp.INDEXVIEW_NAME, )
def test_students_on_the_semester_that_are_not_on_the_assignment_warning(self): assignment = mommy.make('core.Assignment') mommy.make('core.RelatedStudent', period=assignment.parentnode) related_student = mommy.make('core.RelatedStudent', period=assignment.parentnode) mommy.make('core.Candidate', relatedstudent=related_student, assignment_group__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=assignment) # Check warning exists self.assertTrue(mockresponse.selector.exists('#id_devilry_admin_assignment_student_on_semester_not_on_assignment')) # Check warning text self.assertIn( 'note: There are students who are on the semester, but not on the assignment', mockresponse.selector.one('#id_devilry_admin_assignment_student_on_semester_not_on_assignment') .alltext_normalized) # Check warning link url = reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='create_groups', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_student_on_semester_not_on_assignment > a').get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='passed_previous_period', roleid=self.roleid, viewname='select_period' )
def test_no_candidates_warning(self): assignment = mommy.make('core.Assignment') mommy.make('core.RelatedStudent', period=assignment.parentnode) mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=assignment) # Check warning exists self.assertTrue(mockresponse.selector.exists('#id_devilry_admin_assignment_student_no_students_on_assignment')) # Check warning texts self.assertIn( 'warning: No students added to the assignment', mockresponse.selector.one('#id_devilry_admin_assignment_student_no_students_on_assignment') .alltext_normalized) self.assertIn( 'Only students added to an assignment can see the assignment and add deliveries', mockresponse.selector.one('#id_devilry_admin_assignment_student_no_students_on_assignment') .alltext_normalized) # Check warning link url = reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='create_groups', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_students_on_assignment > strong > a').get('href'))
def test_fewer_examiners_than_relatedexaminers_on_semester_note(self): assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_end') mommy.make('core.RelatedExaminer', period=assignment.period) related_examiner = mommy.make('core.RelatedExaminer', period=assignment.period) mommy.make('core.Examiner', relatedexaminer=related_examiner, assignmentgroup__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists('#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment')) # Check warning text self.assertIn( 'note: There are examiners on the semester that are not assigned to any students', mockresponse.selector.one('#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment') .alltext_normalized) # Check warning link url = reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='examineroverview', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment > a').get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_group_examiner', appname='feedbackfeed', roleid=self.group.id, viewname=crapp.INDEXVIEW_NAME, )
def test_students_without_examiners_exists_warning(self): assignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_end') mommy.make('core.RelatedExaminer', period=assignment.period) mommy.make('core.Candidate', assignment_group__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_examiner_students_without_examiner_warning' )) # Check warning text self.assertIn( 'warning: There are students with no examiners assigned to them', mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_students_without_examiner_warning' ).alltext_normalized) # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_assignmentadmin', appname='examineroverview', roleid=assignment.id, viewname='INDEX') self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_students_without_examiner_warning > strong > a' ).get('href'))
def test_post_success_redirect(self): created_subject, mockresponse = self.__valid_post_request() self.assertEqual(mockresponse.response['location'], crinstance.reverse_cradmin_url( instanceid='devilry_admin_subjectadmin', appname='overview', roleid=created_subject.id))
def test_students_on_the_semester_that_are_not_on_the_assignment_warning( self): assignment = mommy.make('core.Assignment') mommy.make('core.RelatedStudent', period=assignment.parentnode) related_student = mommy.make('core.RelatedStudent', period=assignment.parentnode) mommy.make('core.Candidate', relatedstudent=related_student, assignment_group__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_student_on_semester_not_on_assignment' )) # Check warning text self.assertIn( 'note: There are students who are on the semester, but not on the assignment', mockresponse.selector.one( '#id_devilry_admin_assignment_student_on_semester_not_on_assignment' ).alltext_normalized) # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_assignmentadmin', appname='create_groups', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_student_on_semester_not_on_assignment > a' ).get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_periodadmin', appname='overview', roleid=self.period.id, viewname=crapp.INDEXVIEW_NAME )
def test_status_corrected_passed(self): deliverybuilder = self.groupbuilder.add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1) deliverybuilder.add_feedback(saved_by=UserBuilder('testexaminer').user, grade='10/20', is_passing_grade=True, points=20) self.groupbuilder.add_students(self.testuser) self.assertEquals(self.groupbuilder.group.get_status(), 'corrected') response = self._get_as('testuser') response.render() selector = htmls.S(response.content) self.assertTrue(selector.exists('.devilry-student-groupoverview-corrected')) self.assertTrue(selector.exists('.devilry-student-groupoverview-corrected-passed')) self.assertTrue(selector.exists ('.django-cradmin-container-fluid-focus.django-cradmin-container-fluid-focus-success')) self.assertEquals( selector.one('.devilry-student-groupoverview-corrected').alltext_normalized, 'This assignment is corrected, and the final grade is: 10/20 (passed)') self.assertEquals( selector.one('.devilry-student-groupoverview-corrected a')['href'], reverse_cradmin_url( instanceid='devilry_student_group', appname='deliveries', roleid=self.groupbuilder.group.id, viewname='deliverydetails', kwargs={'pk': deliverybuilder.delivery.id}))
def test_render(self): deadlinebuilder = NodeBuilder.quickadd_ducku()\ .add_subject(short_name='atestcourse', long_name='A Test Course')\ .add_6month_active_period(short_name='testperiod', long_name='Test Period')\ .add_assignment('testassignment', long_name='Test Assignment One')\ .add_group(students=[self.testuser])\ .add_deadline_in_x_weeks(weeks=1) deliverybuilder = deadlinebuilder.add_delivery_x_hours_before_deadline(hours=1) response = self._get_as('testuser') self.assertEquals(response.status_code, 200) selector = htmls.S(response.content) self.assertEquals(selector.count('#objecttableview-table tbody tr'), 1) self.assertEquals( selector.one('#objecttableview-table tbody tr td:nth-child(1) a').alltext_normalized, 'Test Assignment One - Delivery#1') self.assertEquals( selector.one('#objecttableview-table tbody tr td:nth-child(1) a')['href'], crinstance.reverse_cradmin_url( instanceid='devilry_student_group', appname='deliveries', roleid=deliverybuilder.delivery.deadline.assignment_group_id, viewname='deliverydetails', kwargs={'pk': deliverybuilder.delivery.pk})) self.assertEquals( selector.one('#objecttableview-table tbody tr td:nth-child(2)').alltext_normalized, 'A Test Course - Test Period') self.assertEquals( selector.one('#objecttableview-table tbody tr td:nth-child(3)').alltext_normalized, 'atestcourse - testperiod') self.assertEquals( selector.one('#objecttableview-table tbody tr td:nth-child(4)').alltext_normalized, htmls.normalize_whitespace(naturaltime(deliverybuilder.delivery.time_of_delivery)))
def get_backlink_url(self): return reverse_cradmin_url( instanceid='devilry_group_examiner', appname='feedbackfeed', roleid=self.kwargs.get('group_id'), viewname=crapp.INDEXVIEW_NAME )
def test_students_without_examiners_exists_warning(self): assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_end') mommy.make('core.RelatedExaminer', period=assignment.period) mommy.make('core.Candidate', assignment_group__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls(cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists('#id_devilry_admin_assignment_examiner_students_without_examiner_warning')) # Check warning text self.assertIn( 'warning: There are students with no examiners assigned to them', mockresponse.selector.one('#id_devilry_admin_assignment_examiner_students_without_examiner_warning') .alltext_normalized) # Check warning link url = reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='examineroverview', roleid=assignment.id, viewname='INDEX' ) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_students_without_examiner_warning > strong > a').get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_student_period', appname='overview', roleid=self.period.id, viewname=crapp.INDEXVIEW_NAME, )
def add_role_menuitem_object(self, active=False): self.add_headeritem_object( devilry_crmenu.BreadcrumbMenuItem(label=ugettext_lazy('Account'), url=reverse_cradmin_url( instanceid='devilry_account', appname='account'), active=active))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_subject_for_periodadmin', appname='subject_redirect', roleid=self.subject.id, viewname=crapp.INDEXVIEW_NAME )
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='delete_groups', roleid=self.current_assignment.id, viewname='confirm_delete', kwargs={'from_assignment_id': self.assignment.id})
def test_no_related_students_on_semester(self): assignment = mommy.make('core.Assignment') mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_student_no_active_students_on_semester' )) # Check warning text self.assertIn( 'warning: Go to the semester page and add/activate students', mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_active_students_on_semester' ).alltext_normalized) # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_periodadmin', appname='overview', viewname='INDEX', roleid=assignment.parentnode.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_active_students_on_semester > strong > a' ).get('href'))
def test_no_candidates_warning(self): assignment = mommy.make('core.Assignment') mommy.make('core.RelatedStudent', period=assignment.parentnode) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_student_no_students_on_assignment' )) # Check warning texts self.assertIn( 'warning: No students added to the assignment', mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_students_on_assignment' ).alltext_normalized) self.assertIn( 'Only students added to an assignment can see the assignment and add deliveries', mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_students_on_assignment' ).alltext_normalized) # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_assignmentadmin', appname='create_groups', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_student_no_students_on_assignment > strong > a' ).get('href'))
def test_fewer_examiners_than_relatedexaminers_on_semester_note(self): assignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_end') mommy.make('core.RelatedExaminer', period=assignment.period) related_examiner = mommy.make('core.RelatedExaminer', period=assignment.period) mommy.make('core.Examiner', relatedexaminer=related_examiner, assignmentgroup__parentnode=assignment) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment' )) # Check warning text self.assertIn( 'note: There are examiners on the semester that are not assigned to any students', mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment' ).alltext_normalized) # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_assignmentadmin', appname='examineroverview', viewname='INDEX', roleid=assignment.id) self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_on_semester_not_on_assignment > a' ).get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_subjectadmin', appname='overview', roleid=self.subject.id, viewname=crapp.INDEXVIEW_NAME )
def test_no_examiners_on_semester_warning(self): assignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_end') mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=assignment) # Check warning exists self.assertTrue( mockresponse.selector.exists( '#id_devilry_admin_assignment_examiner_empty_semester_warning') ) # Check warning text self.assertTrue( mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_empty_semester_warning' ).alltext_normalized, 'warning: Go to the semester page and add/activate examiners') # Check warning link url = reverse_cradmin_url(instanceid='devilry_admin_periodadmin', appname='overview', roleid=assignment.parentnode.id, viewname='INDEX') self.assertEqual( url, mockresponse.selector.one( '#id_devilry_admin_assignment_examiner_empty_semester_warning > strong > a' ).get('href'))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='delete_groups', roleid=self.assignment.id, viewname='manual_select' )
def get_success_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='studentoverview', roleid=self.request.cradmin_instance.assignment.id, viewname=crapp.INDEXVIEW_NAME )
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='delete_groups', roleid=self.current_assignment.id, viewname='confirm_delete', kwargs={'from_assignment_id': self.assignment.id} )
def test_post_success_redirect(self): self.assertEqual(Assignment.objects.count(), 0) created_assignment, mockresponse = self.__valid_post_request(first_deadline=ACTIVE_PERIOD_END) self.assertEqual(mockresponse.response['location'], crinstance.reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='overview', roleid=created_assignment.id))
def test_post_success_redirect(self): self.assertEqual(Period.objects.count(), 0) created_period, mockresponse = self.__valid_post_request() self.assertEqual(mockresponse.response['location'], crinstance.reverse_cradmin_url( instanceid='devilry_admin_periodadmin', appname='overview', roleid=created_period.id))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='examinerdetails', roleid=self.kwargs['assignment'].id, viewname=crapp.INDEXVIEW_NAME, kwargs={'relatedexaminer_id': self.relatedexaminer.id} )
def test_post_success_redirect(self): created_subject, mockresponse = self.__valid_post_request() self.assertEqual( mockresponse.response['location'], crinstance.reverse_cradmin_url( instanceid='devilry_admin_subjectadmin', appname='overview', roleid=created_subject.id))
def get_actionurl(self, delivery): return crinstance.reverse_cradmin_url( instanceid='devilry_student_group', appname='deliveries', roleid=delivery.deadline.assignment_group_id, viewname='deliverydetails', kwargs={'pk': delivery.pk} )
def _get_as(self, username, deliveryid): self.client.login(username=username, password='******') return self.client.get(reverse_cradmin_url( instanceid='devilry_student_group', appname='deliveries', roleid=self.groupbuilder.group.id, viewname='deliverydetails', kwargs={'pk': deliveryid}))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='groupdetails', roleid=self.kwargs['assignment'].id, viewname='groupdetails', kwargs={'pk': self.group.id} )
def _postas(self, group_id, user, *args, **kwargs): self.client.login(username=user.shortname, password='******') url = reverse_cradmin_url( instanceid='devilry_student_group', appname='projectgroup', roleid=group_id ) return self.client.post(url, *args, **kwargs)
def build_menu(self): self.add_headeritem_object( BreadcrumbMenuItem( label='Devilry', url=reverse_cradmin_url(instanceid='devilry_frontpage', appname='frontpage', roleid=None, viewname=crapp.INDEXVIEW_NAME), active=self.get_frontpage_breadcrumb_is_active()))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin', appname='studentfeedbackfeedwizard', viewname='student_groups', kwargs={ 'user_id': self.user.id } )
def test_post_success_redirect(self): self.assertEqual(Assignment.objects.count(), 0) created_assignment, mockresponse = self.__valid_post_request(first_deadline=ACTIVE_PERIOD_END) self.assertEqual( mockresponse.response["location"], crinstance.reverse_cradmin_url( instanceid="devilry_admin_assignmentadmin", appname="overview", roleid=created_assignment.id ), )
def add_role_menuitem_object(self, active=False): self.add_headeritem_object(devilry_crmenu.BreadcrumbMenuItem( label=ugettext_lazy('Account'), url=reverse_cradmin_url( instanceid='devilry_account', appname='account' ), active=active ))
def add_role_menuitem_object(self, active=False): return self.add_headeritem_object( devilry_crmenu.BreadcrumbMenuItem( label=pgettext_lazy('breadcrumb', 'Administrator'), url=reverse_cradmin_url(instanceid='devilry_admin', appname='overview', roleid=None, viewname=crapp.INDEXVIEW_NAME), active=active))
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_periodadmin', roleid=self.status.period.id, appname='qualifiesforexam', viewname='show-status', kwargs={ 'statusid': self.status.id } )
def _getas(self, group_id, invite_id, user, *args, **kwargs): self.client.login(username=user.shortname, password='******') url = reverse_cradmin_url( instanceid='devilry_student_group', appname='projectgroup', roleid=group_id, viewname='delete', kwargs={'invite_id': invite_id} ) return self.client.get(url, *args, **kwargs)
def get_url(self): return reverse_cradmin_url( instanceid='devilry_admin_periodadmin', appname='qualifiesforexam', roleid=self.roleid, viewname='configure-plugin', kwargs={ 'plugintypeid': self.plugin.get_plugintypeid(), } )
def dispatch(self, request, *args, **kwargs): if Subject.objects.filter_user_is_admin(self.request.user): return HttpResponseRedirect(reverse_cradmin_url( instanceid='devilry_admin_subjectadmin', appname='overview', roleid=request.cradmin_role.id )) elif Subject.objects.filter_user_is_admin_for_any_periods_within_subject(self.request.user): return HttpResponseRedirect(self.request.cradmin_instance.rolefrontpage_url(roleid=request.cradmin_role.id)) raise Http404()
def test_send_examiner_comment_body(self): testassignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start', long_name='Assignment 1') testgroup = mommy.make('core.AssignmentGroup', parentnode=testassignment) test_feedbackset = group_mommy.feedbackset_first_attempt_unpublished( group=testgroup) # Another user on the group self._make_examineruser_with_email(group=testgroup, email='*****@*****.**') # The user that posted the comment comment_user = mommy.make(settings.AUTH_USER_MODEL, shortname='*****@*****.**') mommy.make('core.Candidate', assignment_group=test_feedbackset.group, relatedstudent__user=comment_user) test_groupcomment = mommy.make('devilry_group.GroupComment', feedback_set=test_feedbackset, text='This is a test', user_role=Comment.USER_ROLE_STUDENT, user=comment_user) mommy.make('devilry_account.UserEmail', user=comment_user, email='*****@*****.**') send_examiner_comment_email( comment_id=test_groupcomment.id, domain_url_start='http://www.example.com/', ) self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].recipients(), ['*****@*****.**']) for outbox in mail.outbox: self.assertEqual( htmls.S(outbox.message().as_string()).one( '.devilry_email_comment_assignment').alltext_normalized, 'Assignment: {}'.format(testassignment.long_name)) self.assertEqual( htmls.S(outbox.message().as_string()).one( '.devilry_email_comment_text').alltext_normalized, 'This is a test') self.assertEqual( htmls.S(outbox.message().as_string()).one( '.devilry_email_comment_detail_text').alltext_normalized, 'See the delivery feed for more details:') url = reverse_cradmin_url(instanceid='devilry_group_examiner', appname='feedbackfeed', roleid=testgroup.id) link_url = 'http://www.example.com' + url self.assertEqual( link_url, htmls.S(outbox.message().as_string()).one( '.devilry_email_comment_detail_url').alltext_normalized)
def add_subject_breadcrumb_item(self, subject, active=False): return self.add_headeritem_object(devilry_crmenu.BreadcrumbMenuItem( label=subject.short_name, url=reverse_cradmin_url( instanceid='devilry_admin_subject_for_periodadmin', appname='overview', roleid=subject.id, viewname=crapp.INDEXVIEW_NAME ), active=active ))
def add_group_breadcrumb_item(self, group, active=False): self.add_headeritem_object(devilry_crmenu.BreadcrumbMenuItem( label=defaultfilters.truncatechars(self.get_group_label(group), 25), url=reverse_cradmin_url( instanceid='devilry_group_student', appname='feedbackfeed', roleid=group.id, viewname=crapp.INDEXVIEW_NAME, ), active=active ))
def add_assignment_breadcrumb_item(self, assignment, active=False): return self.add_headeritem_object(devilry_crmenu.BreadcrumbMenuItem( label=assignment.short_name, url=reverse_cradmin_url( instanceid='devilry_admin_assignmentadmin', appname='overview', roleid=assignment.id, viewname=crapp.INDEXVIEW_NAME, ), active=active ))