def test_waiting_students_number(self): """Check whether we get correct number of waiting students of given type. Our exercise groups have limit for 1 person. Bolek is in cooking_exercise_group_1 and Lolek is in cooking_exercise_group_2. Tola is in queues of all above groups. Bolek changed his mind and want to be in cooking_exercise_group_2. Lolek also want to join other group(cooking_exercise_group_1). We have 2 enrolled Records and 4 enqueued. Only Lola isn't enrolled in any group. That's why we should return 1. """ with patch(RECORDS_DATETIME, mock_datetime(2011, 10, 8, 12)): self.cooking_exercise_group_1.limit = 1 self.cooking_exercise_group_2.limit = 1 Record.enqueue_student(self.bolek, self.cooking_exercise_group_1) Record.enqueue_student(self.lolek, self.cooking_exercise_group_2) Record.enqueue_student(self.tola, self.cooking_exercise_group_1) Record.enqueue_student(self.tola, self.cooking_exercise_group_2) Record.enqueue_student(self.bolek, self.cooking_exercise_group_2) Record.enqueue_student(self.lolek, self.cooking_exercise_group_1) self.assertEqual( Record.get_number_of_waiting_students( self.cooking_exercise_group_1.course, group_type=2), 1)
def get_grouped_waiting_students(course: CourseInstance, user) -> List: """Return numbers of waiting students grouped by course group type. The user argument is used to decide if the list should be generated at all. """ if not user.is_superuser: return [] group_types: List = [{ 'id': '2', 'name': 'cwiczenia' }, { 'id': '3', 'name': 'pracownie' }, { 'id': '5', 'name': 'ćwiczenio-pracownie' }] return [{ 'students_amount': Record.get_number_of_waiting_students(course, group_type['id']), 'type_name': group_type['name'] } for group_type in group_types]