def test_get_practice_details_with_solved_tasks(self): instance1 = TaskInstanceModel.objects.create(task_id=1, student=self.student, solved=True) instance2 = TaskInstanceModel.objects.create(task_id=1, student=self.student, solved=True) instance3 = TaskInstanceModel.objects.create(task_id=2, student=self.student, solved=True) instance4 = TaskInstanceModel.objects.create(task_id=3, student=self.student, solved=False) info1 = StudentTaskInfoModel.objects.create(student=self.student, task=self.task1) info2 = StudentTaskInfoModel.objects.create(student=self.student, task=self.task2) info3 = StudentTaskInfoModel.objects.create(student=self.student, task=self.task3) info1.update(instance1) info1.update(instance2) info2.update(instance3) info3.update(instance4) info1.save() info2.save() info3.save() practice_details = details.get_practice_details(self.user) self.assertEqual(practice_details.total_credits, 0) self.assertEqual(practice_details.free_credits, 0) self.assertEqual(practice_details.solved_tasks_count, 2)
def test_get_practice_details_no_solved_tasks(self): self.student.total_credits = 7 self.student.free_credits = 3 self.student.save() practice_details = details.get_practice_details(self.user) self.assertEqual(practice_details.total_credits, 7) self.assertEqual(practice_details.free_credits, 3) self.assertEqual(practice_details.solved_tasks_count, 0)
def get_student_toolbox(student): """Fetches the user toolbox. Args: student: current student practicing tasks Returns: list of identifiers of all available blocks for the user """ details = get_practice_details(student.user) return details.available_blocks
def get_practice_details(request): """Get information about practice and skill of current user. Returns: - total-credits - free-credits - solved-tasks-count """ logger.log_request(request) practice_details = details.get_practice_details(user=request.user) details_dict = { 'total-credits': practice_details.total_credits, 'free-credits': practice_details.free_credits, 'solved-tasks-count': practice_details.solved_tasks_count, 'available-blocks': [block.to_json() for block in practice_details.available_blocks] } return JsonResponse(details_dict)