def test_new_attempt_button_not_rendered_if_no_groups_have_been_corrected( self): testassignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start') testuser = mommy.make(settings.AUTH_USER_MODEL) testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup1) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup2) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) mockresponse = self.mock_http200_getrequest_htmls( cradmin_instance=self.__get_mock_instance(testassignment), cradmin_role=testassignment, cradmin_app=self.__get_mock_app(user=testuser), requestuser=testuser) self.assertFalse( mockresponse.selector.exists( '#devilry_manage_deadline_{}_new_attempt_all_link'.format( datetimeutils.datetime_to_url_string( testassignment.first_deadline)))) self.assertFalse( mockresponse.selector.exists( '#devilry_manage_deadline_{}_new_attempt_select_link'.format( datetimeutils.datetime_to_url_string( testassignment.first_deadline))))
def test_all_groups_added_to_form_hidden(self): testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup2) testgroup3 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup3) testgroup4 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup4) testuser = self._get_admin_user(testassignment.parentnode) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline } ) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_0').__str__().decode('utf-8')) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_1').__str__().decode('utf-8')) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_2').__str__().decode('utf-8')) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_3').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup1.id), mockresponse.selector.one('#id_selected_items_0').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup2.id), mockresponse.selector.one('#id_selected_items_1').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup3.id), mockresponse.selector.one('#id_selected_items_2').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup4.id), mockresponse.selector.one('#id_selected_items_3').__str__().decode('utf-8'))
def get_filterlist_url(self, filters_string): return self.request.cradmin_app.reverse_appurl( 'select-groups-manually-filter', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type, 'filters_string': filters_string })
def test_post_from_previous_view_selected_groups_are_hidden(self): # By adding the post_type_received_data to the key, we are simulating that the # post comes from a different view. testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) mockresponse = self.mock_http200_postrequest_htmls( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline }, requestkwargs={ 'data': { 'post_type_received_data': '', 'selected_items': [testgroup1.id, testgroup2.id] } } ) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_0').__str__()) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_1').__str__()) self.assertIn('value="{}"'.format(testgroup1.id), mockresponse.selector.one('#id_selected_items_0').__str__()) self.assertIn('value="{}"'.format(testgroup2.id), mockresponse.selector.one('#id_selected_items_1').__str__())
def test_post_groups_published_raises_error(self): testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) new_deadline = timezone.now() + timezone.timedelta(days=3) new_deadline = new_deadline.replace(microsecond=0) with self.assertRaises(http.Http404): self.mock_http302_postrequest( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline }, requestkwargs={ 'data': { 'new_deadline': isoformat_withseconds(timezone.localtime(new_deadline)), 'comment_text': 'You have been given a new attempt.', 'selected_items': [testgroup1.id, testgroup2.id] } } ) self.assertEqual(2, group_models.FeedbackSet.objects.count())
def test_post_groups_published_raises_error(self): testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) new_deadline = timezone.now() + timezone.timedelta(days=3) new_deadline = new_deadline.replace(microsecond=0) with self.assertRaises(http.Http404): self.mock_http302_postrequest( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline }, requestkwargs={ 'data': { 'new_deadline': isoformat_withseconds(timezone.localtime(new_deadline)), 'comment_text': 'You have been given a new attempt.', 'selected_items': [testgroup1.id, testgroup2.id] } } ) self.assertEquals(2, group_models.FeedbackSet.objects.count())
def test_post_from_previous_view_selected_groups_are_hidden(self): # By adding the post_type_received_data to the key, we are simulating that the # post comes from a different view. testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_unpublished(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) mockresponse = self.mock_http200_postrequest_htmls( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline }, requestkwargs={ 'data': { 'post_type_received_data': '', 'selected_items': [testgroup1.id, testgroup2.id] } } ) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_0').__str__().decode('utf-8')) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_1').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup1.id), mockresponse.selector.one('#id_selected_items_0').__str__().decode('utf-8')) self.assertIn('value="{}"'.format(testgroup2.id), mockresponse.selector.one('#id_selected_items_1').__str__().decode('utf-8'))
def test_all_groups_added_to_form_hidden(self): testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup2) testgroup3 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup3) testgroup4 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup4) testuser = self._get_admin_user(testassignment.parentnode) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': self.handle_deadline } ) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_0').__str__()) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_1').__str__()) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_2').__str__()) self.assertIn('type="hidden"', mockresponse.selector.one('#id_selected_items_3').__str__()) self.assertIn('value="{}"'.format(testgroup1.id), mockresponse.selector.one('#id_selected_items_0').__str__()) self.assertIn('value="{}"'.format(testgroup2.id), mockresponse.selector.one('#id_selected_items_1').__str__()) self.assertIn('value="{}"'.format(testgroup3.id), mockresponse.selector.one('#id_selected_items_2').__str__()) self.assertIn('value="{}"'.format(testgroup4.id), mockresponse.selector.one('#id_selected_items_3').__str__())
def test_url_convert_to_string_and_back(self): datetime_original = timezone.now().replace(microsecond=0) print repr(timezone.now()) datetime_as_string = datetimeutils.datetime_to_url_string( datetime_original) datetime_converted_back = datetimeutils.datetime_url_string_to_datetime( datetime_as_string) self.assertEquals(datetime_original, datetime_converted_back)
def __init__(self, assignment_groups, assignment, devilryrole, **kwargs): super(SelectDeadlineItemValue, self).__init__(**kwargs) self.num_assignment_groups = len(assignment_groups) self.assignment_groups = assignment_groups self.num_corrected_assignment_groups = self.__get_num_corrected_groups() self.assignment = assignment self.devilryrole = devilryrole self.deadline_as_string = datetimeutils.datetime_to_url_string(self.value)
def get_backlink_url(self): return self.request.cradmin_app.reverse_appurl( viewname='select-groups-manually', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type } )
def get_backlink_url(self): return self.request.cradmin_app.reverse_appurl( viewname='select-groups-manually', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type })
def get_filterlist_url(self, filters_string): return self.request.cradmin_app.reverse_appurl( 'select-groups-manually-filter', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type, 'filters_string': filters_string })
def get_target_renderer_kwargs(self): kwargs = super(AssignmentGroupMultiSelectListFilterView, self).get_target_renderer_kwargs() kwargs['form_action'] = self.request.cradmin_app.reverse_appurl( viewname='manage-deadline-post', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type }) return kwargs
def test_post_new_attempt(self): testassignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) new_deadline = timezone.now() + timezone.timedelta(days=3) new_deadline = new_deadline.replace(microsecond=0) self.mock_postrequest( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string( testassignment.first_deadline), 'handle_deadline': 'new-attempt' }, requestkwargs={ 'data': { 'new_deadline': isoformat_withseconds(timezone.localtime(new_deadline)), 'comment_text': 'You have been given a new attempt.', 'selected_items': [testgroup1.id, testgroup2.id] } }) self.assertEqual(4, group_models.FeedbackSet.objects.count()) self.assertEqual(2, group_models.GroupComment.objects.count()) group_comments = group_models.GroupComment.objects.all() last_feedbackset_group1 = AssignmentGroupCachedData.objects.get( group_id=testgroup1.id).last_feedbackset last_feedbackset_group2 = AssignmentGroupCachedData.objects.get( group_id=testgroup2.id).last_feedbackset self.assertEqual(last_feedbackset_group1.deadline_datetime, new_deadline) self.assertEqual(last_feedbackset_group2.deadline_datetime, new_deadline) self.assertEqual(last_feedbackset_group1.last_updated_by, testuser) self.assertEqual(last_feedbackset_group2.last_updated_by, testuser) self.assertEqual('You have been given a new attempt.', group_comments[0].text) self.assertEqual('You have been given a new attempt.', group_comments[1].text)
def get_target_renderer_kwargs(self): kwargs = super(AssignmentGroupMultiSelectListFilterView, self).get_target_renderer_kwargs() kwargs['form_action'] = self.request.cradmin_app.reverse_appurl( viewname='manage-deadline-post', kwargs={ 'deadline': datetimeutils.datetime_to_url_string(self.deadline), 'handle_deadline': self.handle_deadline_type }) return kwargs
def test_post_new_attempt(self): testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') testgroup1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup1) testgroup2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group_mommy.feedbackset_first_attempt_published(group=testgroup2) testuser = self._get_admin_user(testassignment.parentnode) mommy.make('core.Examiner', assignmentgroup=testgroup1, relatedexaminer__user=testuser) mommy.make('core.Examiner', assignmentgroup=testgroup2, relatedexaminer__user=testuser) new_deadline = timezone.now() + timezone.timedelta(days=3) new_deadline = new_deadline.replace(microsecond=0) self.mock_postrequest( cradmin_role=testassignment, cradmin_instance=self._get_mock_instance(testassignment), cradmin_app=self._get_mock_app(user=testuser), requestuser=testuser, viewkwargs={ 'deadline': datetimeutils.datetime_to_url_string(testassignment.first_deadline), 'handle_deadline': 'new-attempt' }, requestkwargs={ 'data': { 'new_deadline': isoformat_withseconds(timezone.localtime(new_deadline)), 'comment_text': 'You have been given a new attempt.', 'selected_items': [testgroup1.id, testgroup2.id] } } ) self.assertEqual(4, group_models.FeedbackSet.objects.count()) self.assertEqual(2, group_models.GroupComment.objects.count()) group_comments = group_models.GroupComment.objects.all() last_feedbackset_group1 = AssignmentGroupCachedData.objects.get(group_id=testgroup1.id).last_feedbackset last_feedbackset_group2 = AssignmentGroupCachedData.objects.get(group_id=testgroup2.id).last_feedbackset self.assertEqual(last_feedbackset_group1.deadline_datetime, new_deadline) self.assertEqual(last_feedbackset_group2.deadline_datetime, new_deadline) self.assertEqual(last_feedbackset_group1.last_updated_by, testuser) self.assertEqual(last_feedbackset_group2.last_updated_by, testuser) self.assertEqual('You have been given a new attempt.', group_comments[0].text) self.assertEqual('You have been given a new attempt.', group_comments[1].text)
def deadline_as_string(self): return datetimeutils.datetime_to_url_string( self.feedbackset.deadline_datetime)
def test_url_patternmatcher(self): self.assertIsNotNone( re.match(r'\w+', datetimeutils.datetime_to_url_string(timezone.now())))
def test_url_patternmatcher(self): self.assertIsNotNone(re.match(r'\w+', datetimeutils.datetime_to_url_string(timezone.now())))
def test_url_convert_to_string_and_back(self): datetime_original = timezone.now().replace(microsecond=0) print(repr(timezone.now())) datetime_as_string = datetimeutils.datetime_to_url_string(datetime_original) datetime_converted_back = datetimeutils.datetime_url_string_to_datetime(datetime_as_string) self.assertEqual(datetime_original, datetime_converted_back)
def deadline_as_string(self): return datetimeutils.datetime_to_url_string( self.value.deadline_datetime)