diff --git a/lms/djangoapps/grades/management/commands/tests/test_compute_grades.py b/lms/djangoapps/grades/management/commands/tests/test_compute_grades.py index 815557b83cea4d065246e63fbeef92399869c146..57d8e9f8ffe4690ba00ae6407df5200178a09240 100644 --- a/lms/djangoapps/grades/management/commands/tests/test_compute_grades.py +++ b/lms/djangoapps/grades/management/commands/tests/test_compute_grades.py @@ -19,13 +19,6 @@ from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory -def _sorted_by_batch(calls): - """ - Return the list of calls sorted by course_key and batch. - """ - return sorted(calls, key=lambda x: (x[1]['kwargs']['course_key'], x[1]['kwargs']['offset'])) - - @ddt.ddt class TestComputeGrades(SharedModuleStoreTestCase): """ @@ -38,12 +31,11 @@ class TestComputeGrades(SharedModuleStoreTestCase): @classmethod def setUpClass(cls): super(TestComputeGrades, cls).setUpClass() - User = get_user_model() # pylint: disable=invalid-name cls.command = compute_grades.Command() cls.courses = [CourseFactory.create() for _ in range(cls.num_courses)] cls.course_keys = [six.text_type(course.id) for course in cls.courses] - cls.users = [User.objects.create(username='user{}'.format(idx)) for idx in range(cls.num_users)] + cls.users = [get_user_model().objects.create(username='user{}'.format(idx)) for idx in range(cls.num_users)] for user in cls.users: for course in cls.courses: @@ -51,10 +43,7 @@ class TestComputeGrades(SharedModuleStoreTestCase): def test_select_all_courses(self): courses = self.command._get_course_keys({'all_courses': True}) - self.assertEqual( - sorted(six.text_type(course) for course in courses), - self.course_keys, - ) + assert set(six.text_type(course) for course in courses) == set(self.course_keys) def test_specify_courses(self): courses = self.command._get_course_keys({'courses': [self.course_keys[0], self.course_keys[1], 'd/n/e']}) @@ -70,10 +59,7 @@ class TestComputeGrades(SharedModuleStoreTestCase): def test_from_settings(self): ComputeGradesSetting.objects.create(course_ids=" ".join(self.course_keys)) courses = self.command._get_course_keys({'from_settings': True}) - self.assertEqual( - sorted(six.text_type(course) for course in courses), - self.course_keys, - ) + assert set(six.text_type(course) for course in courses) == set(self.course_keys) # test that --from_settings always uses the latest setting ComputeGradesSetting.objects.create(course_ids='badcoursekey') with self.assertRaises(CommandError): @@ -103,52 +89,56 @@ class TestComputeGrades(SharedModuleStoreTestCase): 'estimate_first_attempted': estimate_first_attempted, 'seq_id': ANY, } - self.assertEqual( - _sorted_by_batch(mock_task.apply_async.call_args_list), - [ - ({ - 'routing_key': 'key', - 'kwargs': _kwargs(self.course_keys[0], 0) - },), - ({ - 'routing_key': 'key', - 'kwargs': _kwargs(self.course_keys[0], 2) - },), - ({ - 'routing_key': 'key', - 'kwargs': _kwargs(self.course_keys[3], 0) - },), - ({ - 'routing_key': 'key', - 'kwargs': _kwargs(self.course_keys[3], 2) - },), - ], - ) + actual = mock_task.apply_async.call_args_list + # Order doesn't matter, but can't use a set because dicts aren't hashable + expected = [ + ({ + 'routing_key': 'key', + 'kwargs': _kwargs(self.course_keys[0], 0) + },), + ({ + 'routing_key': 'key', + 'kwargs': _kwargs(self.course_keys[0], 2) + },), + ({ + 'routing_key': 'key', + 'kwargs': _kwargs(self.course_keys[3], 0) + },), + ({ + 'routing_key': 'key', + 'kwargs': _kwargs(self.course_keys[3], 2) + },), + ] + assert len(expected) == len(actual) + for call in expected: + assert call in actual @patch('lms.djangoapps.grades.tasks.compute_grades_for_course_v2') def test_tasks_fired_from_settings(self, mock_task): ComputeGradesSetting.objects.create(course_ids=self.course_keys[1], batch_size=2) call_command('compute_grades', '--from_settings') - self.assertEqual( - _sorted_by_batch(mock_task.apply_async.call_args_list), - [ - ({ - 'kwargs': { - 'course_key': self.course_keys[1], - 'batch_size': 2, - 'offset': 0, - 'estimate_first_attempted': True, - 'seq_id': ANY, - }, - },), - ({ - 'kwargs': { - 'course_key': self.course_keys[1], - 'batch_size': 2, - 'offset': 2, - 'estimate_first_attempted': True, - 'seq_id': ANY, - }, - },), - ], - ) + actual = mock_task.apply_async.call_args_list + # Order doesn't matter, but can't use a set because dicts aren't hashable + expected = [ + ({ + 'kwargs': { + 'course_key': self.course_keys[1], + 'batch_size': 2, + 'offset': 0, + 'estimate_first_attempted': True, + 'seq_id': ANY, + }, + },), + ({ + 'kwargs': { + 'course_key': self.course_keys[1], + 'batch_size': 2, + 'offset': 2, + 'estimate_first_attempted': True, + 'seq_id': ANY, + }, + },), + ] + assert len(expected) == len(actual) + for call in expected: + assert call in actual