def test_input_valid(self): """入力データのバリデーション(OK) """ # シリアライザの作成 input_data = { "category": 1, "author_name": 1, "title": '飛騨トンネル', "content": 'あいうえお', } serializer = PostSerializer(data=input_data) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), True)
def test_list_success(self): """ 自分のお気に入りの投稿一覧取得APIへのGETリクエスト (正常系) """ # リクエストを実行 response = self.client.get( self.TARGET_URL, format='json', ) # JSONデータを読み込み content = json.loads(response.content) # ステータスコードをテスト self.assertEqual(response.status_code, 200) # 予想されるお気に入りの投稿一覧データ expected_posts = Post.objects.all() # シリアライザのインスタンスを作成 serializer = PostSerializer(expected_posts, many=True) # データの内容をテスト self.assertEqual(content['results'], serializer.data)
def test_partial_update_success(self): """投稿一部更新APIへのPATCHリクエスト(正常系)""" # PARTIAL_UPDATE用URLを作成 PARTIAL_UPDATE_URL = self.TARGET_URL + str(self.my_post.id) + '/' # 投稿一部変更データの作成 params = { 'title': 'patch_post', } # APIへのリクエストを実行 response = self.client.patch( PARTIAL_UPDATE_URL, params, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # ステータスコードをテスト self.assertEqual(response.status_code, 200) # 投稿したデータを取得 updated_post = Post.objects.get(title='patch_post') # シリアライザのインスタンスを作成 serializer = PostSerializer(updated_post) # データ内容をテスト self.assertEqual(content, serializer.data)
def test_retrieve_success(self): """自分の投稿個別取得APIへのGETリクエスト(正常系)""" # URLを作成 RETRIEVE_URL = self.TARGET_URL + str(self.my_post.id) + '/' # APIへのリクエストを実行 response = self.client.get( RETRIEVE_URL, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 target_post = Post.objects.get(id=self.my_post.id) # シリアライザのインスタンスを作成 serializer = PostSerializer(target_post) # データ内容をテスト self.assertEqual(content, serializer.data)
def test_list_success(self): """自分の投稿一覧取得APIへのGETリクエスト(正常系)""" # ログインユーザーがauthorの投稿を追加で作成 Post.objects.create( title='extra_my_post', status='public', picture=self.mock_picture, author=self.user, ) # APIへのリクエストを実行 response = self.client.get( self.TARGET_URL, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 target_posts = Post.objects.filter( author=self.user).order_by('-posted_date') # シリアライザのインスタンスを作成 serializer = PostSerializer(target_posts, many=True) # データ内容をテスト self.assertEqual(content['results'], serializer.data)
def test_list_success_public(self): """ Postモデルの一覧取得APIへのGETリクエスト (正常系:status='public'の投稿取得) """ # status='private'の非公開の投稿を作成 private_post = Post.objects.create( title='private_post', status='private', picture=self.mock_picture, author=self.user, ) # APIへのリクエストを実行 response = self.client.get( self.TARGET_URL, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 public_posts = Post.objects.filter(status='public') # シリアライザのインスタンスを作成 serializer = PostSerializer(public_posts, many=True) # データ内容をテスト self.assertEqual(content['results'], serializer.data)
def test_input_invalid_if_title_is_blank(self): """入力データのバリデーション(NG: titleが空文字)""" # シリアライザを作成 input_data = { "category": 1, "author_name": 1, "title": '', "content": 'あいうえお', } serializer = PostSerializer(data=input_data) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), False) self.assertCountEqual(serializer.errors.keys(), ['title']) self.assertCountEqual( [x.code for x in serializer.errors['title']], ['blank'])
def test_input_valid(self): """入力データのバリデーション(OK)""" # シリアライザに渡すデータ input_data = { 'title': 'test_title', 'text': 'test_text', 'picture': self.picture, 'author': self.test_user, 'status': 'public', 'category': [self.category.name], 'zip_code': '1600022', 'prefecture': '東京都', 'location': '新宿区新宿3丁目38-1', } # シリアライザを作成 serializer = PostSerializer(data=input_data) # バリデーション結果をテスト self.assertTrue(serializer.is_valid())
def test_list_success_user_id(self): """ Postモデルの一覧取得APIへのGETリクエスト (正常系:ユーザーIDクエリパラメータ) """ # ターゲットのユーザーを作成 target_user = get_user_model().objects.create_user( username='******', password='******', ) # アクセス先URLを作成 URL_WITH_USER_ID = self.TARGET_URL + '?user_id=' + str(target_user.id) # 取得する投稿を作成 Post.objects.create( title='target_post', status='public', picture=self.mock_picture, author=target_user, ) # APIへのリクエストを実行 response = self.client.get( URL_WITH_USER_ID, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 target_post = Post.objects.filter(title='target_post') # シリアライザのインスタンスを作成 serializer = PostSerializer(target_post, many=True) # データ内容をテスト self.assertEqual(content['results'], serializer.data)
def test_update_success(self): """投稿更新APIへのPUTリクエスト(正常系)""" # UPDATE用URLを作成 UPDATE_URL = self.TARGET_URL + str(self.my_post.id) + '/' # 変更用画像ファイル updated_file = SimpleUploadedFile( 'updated_file.jpeg', content=open(PICTURE_PATH, 'rb').read(), content_type='multipart/form-data', ) # 投稿変更データの作成 params = { 'id': str(self.my_post.id), 'title': 'updated_post', 'picture': updated_file, } # APIへのリクエストを実行 response = self.client.put( UPDATE_URL, params, format='multipart', ) # JSONデータの読み込み content = json.loads(response.content) # ステータスコードをテスト self.assertEqual(response.status_code, 200) # 投稿したデータを取得 updated_post = Post.objects.get(title='updated_post') # シリアライザのインスタンスを作成 serializer = PostSerializer(updated_post) # データ内容をテスト self.assertEqual(content, serializer.data)
def test_create_success(self): """投稿作成APIへのPOSTリクエスト(正常系)""" # 投稿用画像ファイル uploaded_file = SimpleUploadedFile( 'uploaded_file.jpeg', content=open(PICTURE_PATH, 'rb').read(), content_type='multipart/form-data', ) # 投稿データの作成 params = { 'title': 'new_post', 'picture': uploaded_file, } # APIへのリクエストを実行 response = self.client.post( self.TARGET_URL, params, format='multipart', ) # JSONデータの読み込み content = json.loads(response.content) # データベースの状態をテスト self.assertEqual(Post.objects.count(), 2) # ステータスコードをテスト self.assertEqual(response.status_code, 201) # 投稿したデータを取得 new_post = Post.objects.get(title='new_post') # シリアライザのインスタンスを作成 serializer = PostSerializer(new_post) # データ内容をテスト self.assertEqual(content, serializer.data)
def test_output_data(self): """出力データの内容検証""" # テスト対象のデータを作成 post = Post.objects.create( title='output_title', text='output_text', picture=self.picture, author=self.test_user, status='public', zip_code='1600022', prefecture='東京都', location='新宿区新宿3丁目38-1', ) post.category.add(self.category) posted_date = dateformat.format( timezone.localtime(post.posted_date), 'Y年m月d日 H:i', ) author_serializer = CustomUserSerializer(post.author) # シリアライザを作成 serializer = PostSerializer(instance=post) # シリアライザの出力内容を検証 expected_data = { 'id': str(post.id), 'title': post.title, 'text': post.text, 'posted_date': str(posted_date), 'picture_url': post.picture_url, 'picture_filename': post.picture_filename, 'author': author_serializer.data, 'status': post.status, 'category': [self.category.name], 'zip_code': post.zip_code, 'prefecture': post.prefecture, 'location': post.location, } self.assertDictEqual(serializer.data, expected_data)
def test_retrieve_success_query_params(self): """ Postモデルの個別取得APIへのGETリクエスト (正常系:retrieve=Trueクエリパラメータ付きリクエスト) """ # 非公開の投稿を作成 private_post = Post.objects.create( title='private_post', status='private', picture=self.mock_picture, author=self.user, ) # 非公開の投稿取得URL PRIVATE_RETRIEVE_URL = self.TARGET_URL + str( private_post.id) + '/?retrieve=True' # APIへのリクエストを実行 response = self.client.get( PRIVATE_RETRIEVE_URL, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 expected_post = Post.objects.get(id=private_post.id) # シリアライザのインスタンスを作成 serializer = PostSerializer(expected_post) # データ内容をテスト self.assertEqual(content, serializer.data)
def test_list_success(self): """Postモデルの一覧取得APIへのGETリクエスト(正常系)""" # APIへのリクエストを実行 response = self.client.get( self.TARGET_URL, format='json', ) # JSONデータの読み込み content = json.loads(response.content) # レスポンスのステータスコードをテスト self.assertEqual(response.status_code, 200) # データベースからテスト対象のデータを取得 posts = Post.objects.all() # シリアライザのインスタンスを作成 serializer = PostSerializer(posts, many=True) # データ内容をテスト self.assertEqual(content['results'], serializer.data)