def test_get_tasks(self):

        manipulator = TaskManipulator()

        # 事前にタスクを作成
        TODO_USER = User.objects.get(pk=2)
        TODO_DESCRIPTION = "test-description"
        TODO_STATUS = TaskStatus.objects.get(pk=1)

        TODO_TASKS = []
        for i in range(3):
            task = manipulator.create(
                title=str(i),
                user=TODO_USER,
                description=TODO_DESCRIPTION
            )
            TODO_TASKS.append(task)

        task_list = manipulator.get_tasks(user=TODO_USER)

        self.assertEqual(len(task_list), 3)

        for i in range(3):
            self.assertEqual(task_list[i][0].id, TODO_TASKS[i].id)
            self.assertEqual(task_list[i][0].title, TODO_TASKS[i].title)
            self.assertEqual(task_list[i][0].description, TODO_TASKS[i].description)
            self.assertEqual(task_list[i][0].user, TODO_USER)
            self.assertEqual(task_list[i][1], TODO_STATUS)
    def test_get_tasks_without_tasks(self):

        manipulator = TaskManipulator()
        TODO_USER = User.objects.get(pk=2)

        task_list = manipulator.get_tasks(user=TODO_USER)

        self.assertEqual(len(task_list), 0)
Ejemplo n.º 3
0
    def get(self, request, task_id=None):
        """
        1) task_idが指定されている場合
        ・対応するidを持つTaskがリクエストしたUserのものである場合は
          当該Task1つのみを当該Taskに含んだを返す。
        ・対応するTaskが存在しない場合は空配列と404 Not Foundを返す
        ・対応するTaskが存在してもリクエストしたUserのものではない場合も
        404 Not Foundとから配列を返す。
        2) task_idが指定されていない場合
        ・リクエストしたUserのTaskの配列を返す(200 OK)

        <返すレスポンスの形式>
        [
            {
                "id": Task.id,
                "title": Task.title,
                "description": Task.description,
                "status": Taskの最新TaskStatus.name
            },...
        ]
        """
        user = request.user
        manipulator = TaskManipulator()

        tasks = []
        if task_id is None:
            ts = manipulator.get_tasks(user=user)
        
            for task, task_status in ts:
                tasks.append({
                    "id": task.id,
                    "title": task.title,
                    "description": task.description,
                    "status": task_status.name,
                })
            

        else:
            task, task_status = manipulator.get_task(user=user, task_id=task_id)

            if task is None or task_status is None:
                # 一方のみがNone出ないことはアプリケーションの仕様上
                # ありえないが念の為
                serializer = TaskSerializer(tasks, many=True)
                return Response(data=serializer.data, status=status.HTTP_404_NOT_FOUND)

            tasks.append({
                "id": task.id,
                "title": task.title,
                "description": task.description,
                "status": task_status.name,
            })
        
        serializer = TaskSerializer(tasks, many=True)
        return Response(data=serializer.data, status=status.HTTP_200_OK)
    def test_get_tasks_with_other_users(self):

        manipulator = TaskManipulator()

        # 事前にタスクを作成
        TODO_USER = User.objects.get(pk=2)
        TODO_DESCRIPTION = "test-description"
        TODO_STATUS = TaskStatus.objects.get(pk=1)

        TODO_TASKS = []
        for i in range(3):
            task = manipulator.create(
                title=str(i),
                user=TODO_USER,
                description=TODO_DESCRIPTION
            )
            TODO_TASKS.append(task)

        USER = User.objects.get(pk=1)

        task_list = manipulator.get_tasks(user=USER)

        self.assertEqual(len(task_list), 0)