def test_merge_history_meta_data_real_groups(self): test_assignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3') group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4') AssignmentGroup.merge_groups([group1, group2, group3]) AssignmentGroup.merge_groups([group1, group4]) meta_data = AssignmentGroupHistory.objects.get( assignment_group__id=group1.id).meta_data self.assertEqual(len(meta_data), 2) self.assertDictContainsSubset({'groups': ['group1', 'group4']}, meta_data[0]) self.assertDictContainsSubset( {'groups': ['group1', 'group2', 'group3']}, meta_data[1])
def test_merge_single_assignment_groups(self): test_assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') AssignmentGroup.merge_groups([group1, group2]) merge_history = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).merge_history self.assertEqual(merge_history['groups'][0]['state']['name'], 'group1') self.assertEqual(merge_history['groups'][1]['state']['name'], 'group2')
def form_valid(self, form): try: AssignmentGroup.merge_groups(self.__get_groups_from_form(form)) except ValidationError as e: messages.warning(self.request, ugettext_lazy(str(e.message))) else: messages.success( self.request, ugettext_lazy("A group with {} has been created!".format( self.__get_merged_candidates_short_name( self.target_group)))) return super(MergeGroupsView, self).form_valid(form)
def form_valid(self, form): try: AssignmentGroup.merge_groups(self.__get_groups_from_form(form)) except ValidationError as e: messages.warning( self.request, ugettext_lazy(str(e.message))) else: candidates_short_name = self.__get_merged_candidates_short_name(self.target_group) messages.success( self.request, ugettext_lazy("A group with %(what)s has been created!") % {'what': candidates_short_name} ) return super(MergeGroupsView, self).form_valid(form)
def test_merge_history_meta_data_real_groups(self): test_assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3') group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4') AssignmentGroup.merge_groups([group1, group2, group3]) AssignmentGroup.merge_groups([group1, group4]) meta_data = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).meta_data self.assertEqual(len(meta_data), 2) self.assertDictContainsSubset({ 'groups': ['group1', 'group4'] }, meta_data[0]) self.assertDictContainsSubset({ 'groups': ['group1', 'group2', 'group3'] }, meta_data[1])
def test_is_deleted_after_merge(self): test_assignment = mommy.make_recipe( 'devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3') group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4') AssignmentGroup.merge_groups([group1, group2]) historygroup1id = group1.assignmentgrouphistory.id AssignmentGroup.merge_groups([group4, group3]) historygroup4id = group4.assignmentgrouphistory.id AssignmentGroup.merge_groups([group1, group4]) with self.assertRaises(AssignmentGroupHistory.DoesNotExist): AssignmentGroupHistory.objects.get(id=historygroup4id) self.assertTrue( AssignmentGroupHistory.objects.filter(id=historygroup1id).exists())
def test_examiner_count_filter_after_merge(self): testuser = mommy.make(settings.AUTH_USER_MODEL) testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) mommy.make('core.AssignmentGroup', parentnode=testassignment) mommy.make('core.AssignmentGroup', parentnode=testassignment) core_mommy.candidate(group=group1) core_mommy.candidate(group=group1) core_mommy.candidate(group=group2) core_mommy.examiner(group=group2) core_mommy.examiner(group=group1) AssignmentGroup.merge_groups([group1, group2]) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=testassignment, cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'), requestuser=testuser, viewkwargs={ 'filters_string': 'candidatecount-eq-3' }) self.assertEqual( 1, mockresponse.selector.count('.django-cradmin-listbuilder-itemvalue'))
def test_examiner_count_filter_after_merge(self): testuser = mommy.make(settings.AUTH_USER_MODEL) testassignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=testassignment) group2 = mommy.make('core.AssignmentGroup', parentnode=testassignment) mommy.make('core.AssignmentGroup', parentnode=testassignment) mommy.make('core.AssignmentGroup', parentnode=testassignment) core_mommy.candidate(group=group1) core_mommy.candidate(group=group1) core_mommy.candidate(group=group2) core_mommy.examiner(group=group2) core_mommy.examiner(group=group1) AssignmentGroup.merge_groups([group1, group2]) mockresponse = self.mock_http200_getrequest_htmls( cradmin_role=testassignment, cradmin_instance=self.__mockinstance_with_devilryrole('departmentadmin'), requestuser=testuser, viewkwargs={ 'filters_string': 'candidatecount-3' }) self.assertEqual( 1, mockresponse.selector.count('.django-cradmin-listbuilder-itemvalue'))
def test_is_deleted_after_merge(self): test_assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3') group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4') AssignmentGroup.merge_groups([group1, group2]) historygroup1id = group1.assignmentgrouphistory.id AssignmentGroup.merge_groups([group4, group3]) historygroup4id = group4.assignmentgrouphistory.id AssignmentGroup.merge_groups([group1, group4]) with self.assertRaises(AssignmentGroupHistory.DoesNotExist): AssignmentGroupHistory.objects.get(id=historygroup4id) self.assertTrue(AssignmentGroupHistory.objects.filter(id=historygroup1id).exists())
def test_merge_assignmentgroup_multiple_times(self): test_assignment = mommy.make_recipe('devilry.apps.core.assignment_activeperiod_start') group1 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group1') group2 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group2') group3 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group3') group4 = mommy.make('core.AssignmentGroup', parentnode=test_assignment, name='group4') core_mommy.candidate(group=group1) core_mommy.candidate(group=group1) core_mommy.candidate(group=group2) core_mommy.candidate(group=group3) core_mommy.candidate(group=group4) core_mommy.examiner(group=group1) core_mommy.examiner(group=group2) core_mommy.examiner(group=group2) core_mommy.examiner(group=group3) group1_state = group1.get_current_state() group2_state = group2.get_current_state() group3_state = group3.get_current_state() group4_state = group4.get_current_state() AssignmentGroup.merge_groups([group1, group3]) AssignmentGroup.merge_groups([group2, group4]) group1_merge_history = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).merge_history group2_merge_history = AssignmentGroupHistory.objects.get(assignment_group__id=group2.id).merge_history self.assertDictEqual(group1_merge_history['groups'][0]['state'], group1_state) self.assertDictEqual(group1_merge_history['groups'][1]['state'], group3_state) self.assertDictEqual(group2_merge_history['groups'][0]['state'], group2_state) self.assertDictEqual(group2_merge_history['groups'][1]['state'], group4_state) group1 = AssignmentGroup.objects.get(id=group1.id) group2 = AssignmentGroup.objects.get(id=group2.id) # Checking one more level in the Btree group1_state = AssignmentGroup.objects.get(id=group1.id).get_current_state() group2_state = AssignmentGroup.objects.get(id=group2.id).get_current_state() AssignmentGroup.merge_groups([group1, group2]) group1_merge_history_new = AssignmentGroupHistory.objects.get(assignment_group__id=group1.id).merge_history self.assertListEqual(group1_merge_history_new['groups'][0]['groups'], group1_merge_history['groups']) self.assertListEqual(group1_merge_history_new['groups'][1]['groups'], group2_merge_history['groups']) self.assertDictEqual(group1_merge_history_new['groups'][0]['state'], group1_state) self.assertDictEqual(group1_merge_history_new['groups'][1]['state'], group2_state)