def test_delete_task(self): """ Taskが正常に削除され、かつ、 削除されたTaskのIDが返ってくることを期待する。 """ manipulator = TaskManipulator() TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "todo-description" TODO_TASK = manipulator.create( user=TODO_USER, title=TODO_TITLE, description=TODO_DESCRIPTION ) task_id = manipulator.delete_task( user=TODO_USER, task_id=TODO_TASK.id ) self.assertEqual(task_id, TODO_TASK.id) # 正常に削除できていることを確認する。 task, task_status = manipulator.get_task(user=TODO_USER, task_id=task_id) self.assertIsNone(task) self.assertIsNone(task_status)
def test_update_task_with_status_only(self): """ TaskStatusのみをアップデート """ manipulator = TaskManipulator() # 事前にタスクを作成 TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "test-description" task = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) # 更新処理タスクが期待したとおりに更新されているかを確認 RUNNING_STATUS = TaskStatus.objects.get(pk=2) updated_task, updated_task_status = manipulator.update_task( user=TODO_USER, task_id=task.id, status=RUNNING_STATUS.name ) self.assertEqual(updated_task.id, task.id) self.assertEqual(updated_task.title, TODO_TITLE) self.assertEqual(updated_task.description, TODO_DESCRIPTION) self.assertEqual(updated_task.user, TODO_USER) self.assertEqual(updated_task_status.name, RUNNING_STATUS.name)
def test_update_task_with_wrong_status(self): manipulator = TaskManipulator() # 事前にタスクを作成 TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "test-description" task = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) # 更新処理タスクが期待したとおりに更新されているかを確認 UPDATED_TITLE = "updated" UPDATED_DESCRIPTION = "updated-description" WRONG_STATUS = "wrong" updated_task, updated_task_status = manipulator.update_task( user=TODO_USER, task_id=task.id, title=UPDATED_TITLE, description=UPDATED_DESCRIPTION, status=WRONG_STATUS ) # Taskが更新されていないこと、 # TaskStatusとしてNoneが返ってきていることを確認 self.assertEqual(updated_task, task) self.assertIsNone(updated_task_status)
def test_create_task(self): # 作成されることを期待しているTaskの情報を # 定数的に記述しておく。 TODO_TITLE = "test-task" TODO_USER = User.objects.get(pk=2) TODO_DESCRIPTION = "test-description" manipulator = TaskManipulator() task = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) self.assertIsNotNone(task.id) self.assertEqual(task.title, TODO_TITLE) self.assertEqual(task.description, TODO_DESCRIPTION) self.assertEqual(task.user, TODO_USER) # Task作成時に一緒に作成されているTaskStatusが期待したものかを確認する。 EXPECTED_TASK_STATUS = TaskStatus.objects.get(pk=1) task_history = TaskHistory.objects.filter(task=task) self.assertEqual(len(task_history), 1) self.assertEqual(task_history[0].status, EXPECTED_TASK_STATUS)
def test_delete_task_with_other_users(self): """ 存在するが、他Userに紐付いているTaskを 削除しようとしてNoneが返ってくることを期待する。 """ manipulator = TaskManipulator() TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "todo-description" TODO_TASK = manipulator.create( user=TODO_USER, title=TODO_TITLE, description=TODO_DESCRIPTION ) user = User.objects.get(pk=1) task_id = manipulator.delete_task( user=user, task_id=TODO_TASK.id ) self.assertIsNone(task_id) # 当該タスクが削除されていないことを確認する。 task, _ = manipulator.get_task(user=TODO_USER, task_id=TODO_TASK.id) self.assertEqual(task, TODO_TASK)
def test_delete_task(self): # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # Taskを事前に作成 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' manipulator = TaskManipulator() task = manipulator.create(title=TODO_TITLE, description=TODO_DESCRIPTION, user=TODO_USER) # 追加したタスクを削除 path = reverse('specific_task', kwargs={'task_id': task.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) response = client.delete(path=path, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get('id'), task.id) self.assertEqual(response.data.get('title'), task.title) self.assertEqual(response.data.get('description'), task.description)
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 post(self, request): """ メッセージボディとして以下を期待。 { "title": Taskのtitle, "description": Taskの内容, } レスポンスメッセージとして以下を作成する。 { "id": TaskのID, "title": Taskの名前, "description": Taskの詳細, "created_at": Taskの生成日時 } """ # https://qiita.com/xKxAxKx/items/60e8fb93d6bbeebcf065#%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97 data = JSONParser().parse(request) user = request.user manipulator = TaskManipulator() task = manipulator.create( title=data['title'], user=user, description=data['description'] ) serializer = TaskSerializer(task) return Response(serializer.data, status=status.HTTP_201_CREATED)
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)
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_update_task_with_other_user(self): """ 更新しようとしたTaskは存在するものの、 リクエストしたUserに紐付かないものである場合に、 404 Not Foundが返ってくることを確認する。 """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # Taskを事前に作成 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' USER = User.objects.get(pk=1) manipulator = TaskManipulator() task = manipulator.create(title=TODO_TITLE, description=TODO_DESCRIPTION, user=USER) # 追加したタスクを更新 path = reverse('specific_task', kwargs={'task_id': task.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) TITLE = "title" DESCRIPTION = "description" STATUS = "status" UPDATED_TASK_TITLE = '洗濯機から洗濯物を回収する' UPDATED_TASK_DESCRIPTION = '洗濯機から乾燥済みの洗濯物を回収する' UPDATED_TASK_STATUS = TaskStatus.objects.get(pk=2).name data = { TITLE: UPDATED_TASK_TITLE, DESCRIPTION: UPDATED_TASK_DESCRIPTION, STATUS: UPDATED_TASK_STATUS } response = client.patch(path=path, data=data, format='json') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertIsNone(response.data)
def test_get_task_not_exist(self): # 存在しないTaskのidを指定して # None, Noneが返ってくることを期待する。 manipulator = TaskManipulator() TODO_USER = User.objects.get(pk=2) # 明らかに存在しないTaskのidを指定する task, status = manipulator.get_task(user=TODO_USER, task_id=100) self.assertIsNone(task) self.assertIsNone(status)
def test_update_task_without_task_id(self): manipulator = TaskManipulator() user = User.objects.get(pk=2) task, task_status = manipulator.update_task( user=user, task_id=None ) self.assertIsNone(task) self.assertIsNone(task_status)
def test_update_task_with_wrong_status(self): """ 存在しないTaskStatusを指定して更新を試みて 400 Bad Requestが返ってくることを確認する """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # Taskを事前に作成 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' TODO_USER = User.objects.get(pk=2) manipulator = TaskManipulator() task = manipulator.create(title=TODO_TITLE, description=TODO_DESCRIPTION, user=TODO_USER) # 追加したタスクを更新 path = reverse('specific_task', kwargs={'task_id': task.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) TITLE = "title" DESCRIPTION = "description" STATUS = "status" UPDATED_TASK_TITLE = '洗濯機から洗濯物を回収する' UPDATED_TASK_DESCRIPTION = '洗濯機から乾燥済みの洗濯物を回収する' UPDATED_TASK_STATUS = "WRONG" data = { TITLE: UPDATED_TASK_TITLE, DESCRIPTION: UPDATED_TASK_DESCRIPTION, STATUS: UPDATED_TASK_STATUS } response = client.patch(path=path, data=data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertIsNone(response.data)
def patch(self, request, task_id): """ メッセージボディとして以下を期待 { "title": Taskの名前, "description": Taskの内容, "status": TaskStatusの名前 } レスポンスメッセージとして以下を作成する。 { "id": TaskのID, "title": 更新済みTaskの名前, "description": 更新済みTaskの詳細, "status": 更新済みTaskStatus } """ data = JSONParser().parse(request) user = request.user manipulator = TaskManipulator() task, task_status = manipulator.update_task( user = user, task_id=task_id, title=data.get("title"), description=data.get("description"), status=data.get("status") ) if task_status is None: if task is None: return Response(data=None, status=status.HTTP_404_NOT_FOUND) return Response(data=None, status=status.HTTP_400_BAD_REQUEST) if task is None: return Response(data=None, status=status.HTTP_404_NOT_FOUND) response_task = { "id": task.id, "title": task.title, "description": task.description, "status": task_status.name, } serializer = TaskSerializer(response_task) return Response(data=serializer.data, status=status.HTTP_200_OK)
def test_delete_task_with_no_task(self): """ 存在しないTaskを指定する。 Noneが返ってくることを期待する。 """ manipulator = TaskManipulator() TODO_USER = User.objects.get(pk=2) task_id = manipulator.delete_task( user=TODO_USER, task_id = 100 ) self.assertIsNone(task_id)
def test_get_task(self): """ task_idを指定して当該Taskを取得する """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # 取得対象Taskを追加 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' manipulator = TaskManipulator() TODO_TASK = manipulator.create(title=TODO_TITLE, description=TODO_DESCRIPTION, user=TODO_USER) # 追加したTaskを取得 path = reverse('specific_task', kwargs={'task_id': TODO_TASK.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) response = client.get(path=path, format='json') # レスポンスコードが200 OKであることを確認 self.assertEqual(response.status_code, status.HTTP_200_OK) # 返ってきたTaskが事前に作成したTask(TODO_TASK)と一致することを確認 tasks = response.data self.assertEqual(len(tasks), 1) self.assertEqual(tasks[0].get('id'), TODO_TASK.id) self.assertEqual(tasks[0].get('title'), TODO_TASK.title) self.assertEqual(tasks[0].get('description'), TODO_TASK.description) self.assertEqual(tasks[0].get('status'), "TODO")
def delete(self, request, task_id): """ 削除対象としたいtask_id以外は、特に不要 レスポンスメッセージとして以下を期待 { "id": 削除したTaskのID, "title": 削除したTaskのtitle, "description": 削除したTaskのdescription } 削除に成功した場合は200 OKを返す。 削除対象のTaskが存在しない場合は404 Not Foundを返す。 404 Not Foundを返す際は、レスポンスボディは空 (本当にTaskが存在しない場合、 Taskに紐づくUserがリクエストしたUserと異なる場合も同様) """ manipulator = TaskManipulator() user = request.user task, _ = manipulator.get_task(user=user, task_id=task_id) if task is None: return Response(status=status.HTTP_404_NOT_FOUND) response_task = { "id": task.id, "title": task.title, "description": task.description } task_id = manipulator.delete_task(user=user, task_id=task.id) if task_id is None: # 基本的にはこれは到達不可能コード # (事前に削除対象のタスクが存在し、 # リクエストしたユーザのものであることを確認済みであるため) return Response(status=status.HTTP_404_NOT_FOUND) serializer = TaskSerializer(response_task) return Response(data=serializer.data, status=status.HTTP_200_OK)
def test_get_task_updated(self): # 当該タスクに対してより新しいTaskStatusが追加された場合に # get_taskで最新のTaskStatusが取得できることを確認します。 manipulator = TaskManipulator() # 事前にタスクを作成 TODO_TITLE = "test-task" TODO_USER = User.objects.get(pk=2) TODO_DESCRIPTION = "test-description" TODO_STATUS = TaskStatus.objects.get(pk=1) manipulator = TaskManipulator() TODO_TASK = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) # TaskHistoryにRUNNNINGの状態のものを追加 RUNNING_STATUS = TaskStatus.objects.get(pk=2) TaskHistory( status=RUNNING_STATUS, task=TODO_TASK ).save() task, status = manipulator.get_task(user=TODO_USER, task_id=TODO_TASK.id) self.assertEqual(task, TODO_TASK) self.assertEqual(status, RUNNING_STATUS)
def test_get_task_without_tasks(self): """ Task一覧を取得するがリクエストするUserの Taskが一見も存在しない場合に空配列を受け取れるかを確認する。 """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # 別ユーザでタスクを追加 OTHER_USER = User.objects.get(pk=1) manipulator = TaskManipulator() manipulator.create(title="todo", description="todo-descirption", user=OTHER_USER) # TODO_USERの持つTask一覧を取得 path = reverse('task') client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) response = client.get(path=path, format='json') # 200 OKが返ってくることを確認 self.assertEqual(response.status_code, status.HTTP_200_OK) # tasksが空配列であることを確認する tasks = response.data self.assertEqual(len(tasks), 0)
def test_get_task(self): # 当該Userに紐づくTaskが1つある場合に # Task, TaskStatus(TODO状態)が # 返ってくることを確認します。 manipulator = TaskManipulator() # 事前にタスクを作成 TODO_TITLE = "test-task" TODO_USER = User.objects.get(pk=2) TODO_DESCRIPTION = "test-description" TODO_STATUS = TaskStatus.objects.get(pk=1) manipulator = TaskManipulator() TODO_TASK = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) task, status = manipulator.get_task(user=TODO_USER, task_id=TODO_TASK.id) self.assertEqual(task.title, TODO_TITLE) self.assertEqual(task.user, TODO_USER) self.assertEqual(task.description, TODO_DESCRIPTION) self.assertEqual(status, TODO_STATUS)
def test_update_task_status_with_other_user(self): """ 他のユーザに紐づくタスクを指定した場合 に更新されずにNone, Noneが返ってくることを確認 """ manipulator = TaskManipulator() # 事前にタスクを作成 TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "test-description" task = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) # 更新処理タスクが期待したとおりに更新されているかを確認 USER = User.objects.get(pk=1) RUNNING_STATUS = TaskStatus.objects.get(pk=2) UPDATED_TITLE = "updated" UPDATED_DESCRIPTION = "updated-description" updated_task, updated_task_status = manipulator.update_task( user=USER, task_id=task.id, title=UPDATED_TITLE, description=UPDATED_DESCRIPTION, status=RUNNING_STATUS.name ) self.assertIsNone(updated_task) self.assertIsNone(updated_task_status) task = Task.objects.get(pk=task.id) self.assertEqual(task.title, TODO_TITLE) self.assertEqual(task.description, TODO_DESCRIPTION)
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)
def test_update_task_status_without_task(self): """ 指定したtask_idに対応するTaskが存在しない場合 """ manipulator = TaskManipulator() TODO_USER = User.objects.get(pk=2) # 更新処理タスクが期待したとおりに更新されているかを確認 UPDATED_TITLE = "updated" UPDATED_DESCRIPTION = "updated-description" RUNNING_STATUS = TaskStatus.objects.get(pk=2) updated_task, updated_task_status = manipulator.update_task( user=TODO_USER, task_id=140000000, title=UPDATED_TITLE, description=UPDATED_DESCRIPTION, status=RUNNING_STATUS ) # Task, TaskStatusともにNoneであることを確認 self.assertIsNone(updated_task) self.assertIsNone(updated_task_status)
def test_delete_task_with_other_users(self): # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # 別Userに紐づくTaskを事前に作成 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' manipulator = TaskManipulator() user = User.objects.get(pk=1) task = manipulator.create(user=user, title=TODO_TITLE, description=TODO_DESCRIPTION) # Taskが作成されていることを確認 self.assertIsNotNone(task) # 他Userに紐づくTaskを削除しようと試みる path = reverse('specific_task', kwargs={'task_id': task.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) response = client.delete(path=path, format='json') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
def test_update_task(self): """ 正常にTaskおよびTaskStatusの更新ができることを確認する """ manipulator = TaskManipulator() # 事前にタスクを作成 TODO_USER = User.objects.get(pk=2) TODO_TITLE = "todo" TODO_DESCRIPTION = "test-description" task = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) # 更新処理タスクが期待したとおりに更新されているかを確認 RUNNING_STATUS = TaskStatus.objects.get(pk=2) UPDATED_TITLE = "updated" UPDATED_DESCRIPTION = "updated-description" updated_task, updated_task_status = manipulator.update_task( user=TODO_USER, task_id=task.id, title=UPDATED_TITLE, description=UPDATED_DESCRIPTION, status=RUNNING_STATUS.name ) self.assertEqual(updated_task.id, task.id) self.assertEqual(updated_task.title, UPDATED_TITLE) self.assertEqual(updated_task.description, UPDATED_DESCRIPTION) self.assertEqual(updated_task.user, TODO_USER) self.assertEqual(updated_task_status.name, RUNNING_STATUS.name)
def test_get_task_with_other_users(self): # 指定したidのTaskは存在するが、 # 他UserのTaskである場合。 manipulator = TaskManipulator() # 事前にタスクを作成 TODO_TITLE = "test-task" TODO_USER = User.objects.get(pk=2) TODO_DESCRIPTION = "test-description" manipulator = TaskManipulator() TODO_TASK = manipulator.create( title=TODO_TITLE, user=TODO_USER, description=TODO_DESCRIPTION ) USER = User.objects.get(pk=1) # Task作成時のUserとは別Userを指定 task, status = manipulator.get_task(user=USER, task_id=TODO_TASK.id) self.assertIsNone(task) self.assertIsNone(status)
def test_get_tasks(self): """ タスク一覧取得の処理を投げる。 以下の結果を期待する。 [ { "id": "?", "title": "0", "description": "todo-description", "status": "TODO" }, { "id": "?", "title": "1", "description": "todo-description", "status": "TODO" }, { "id": "?", "title": "2", "description": "todo-description", "status": "TODO" } ] """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # Taskを事前に作成 TODO_DESCRIPTION = 'todo-description' manipulator = TaskManipulator() for i in range(3): manipulator.create(title=str(i), description=TODO_DESCRIPTION, user=TODO_USER) path = reverse('task') client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) response = client.get(path=path, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) tasks = response.data self.assertEqual(len(tasks), 3) for i in range(3): self.assertEqual(tasks[i].get('title'), str(i)) self.assertEqual(tasks[i].get('description'), TODO_DESCRIPTION) self.assertEqual(tasks[i].get('status'), "TODO")
def test_update_task(self): """ 存在するtask_idを指定して更新を行い 更新済みのTaskの情報が返ってくること、 200 OKとなることを確認する。 以下のような形式のメッセージが返ってくることを期待する。 { "id": "?", "title": "0", "description": "todo-description", "status": "TODO" } """ # JWTを取得 TODO_USER = User.objects.get(pk=2) client = APIClient() path = reverse('auth') data = { "username": TODO_USER.username, "password": "******", } response = client.post(path=path, data=data, format='json') token = response.data.get('token') self.assertEqual(response.status_code, status.HTTP_200_OK) # Taskを事前に作成 TODO_TITLE = 'todo-title' TODO_DESCRIPTION = 'todo-description' TODO_USER = User.objects.get(pk=2) manipulator = TaskManipulator() task = manipulator.create(title=TODO_TITLE, description=TODO_DESCRIPTION, user=TODO_USER) # 追加したタスクを更新 path = reverse('specific_task', kwargs={'task_id': task.id}) client = APIClient() client.credentials(HTTP_AUTHORIZATION='JWT ' + token) TITLE = "title" DESCRIPTION = "description" STATUS = "status" UPDATED_TASK_TITLE = '洗濯機から洗濯物を回収する' UPDATED_TASK_DESCRIPTION = '洗濯機から乾燥済みの洗濯物を回収する' UPDATED_TASK_STATUS = TaskStatus.objects.get(pk=2).name data = { TITLE: UPDATED_TASK_TITLE, DESCRIPTION: UPDATED_TASK_DESCRIPTION, STATUS: UPDATED_TASK_STATUS } response = client.patch(path=path, data=data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data.get("id"), task.id) self.assertEqual(response.data.get("title"), UPDATED_TASK_TITLE) self.assertEqual(response.data.get("description"), UPDATED_TASK_DESCRIPTION) self.assertEqual(response.data.get("status"), UPDATED_TASK_STATUS)