コード例 #1
0
    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)
コード例 #2
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #3
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #4
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #5
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #6
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #7
0
    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'])
コード例 #8
0
    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())
コード例 #9
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #10
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #11
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #12
0
    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)
コード例 #13
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)
コード例 #14
0
ファイル: test_views.py プロジェクト: tko-asn/keshikii
    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)