コード例 #1
0
    def setUp(self):
        self.post_user = create_user()
        data_test_posts = [{
            'title': 'Post 1',
            'body': 'Post 1 body',
            'status': Post.PostStatus.DRAFT,
            'author': self.post_user
        }, {
            'title': 'Post 2',
            'body': 'Post 2 body',
            'status': Post.PostStatus.UNPUBLISHED,
            'author': self.post_user
        }, {
            'title': 'Post 3',
            'body': 'Post 3 body',
            'status': Post.PostStatus.PUBLISHED,
            'author': self.post_user
        }]
        self.test_posts = []
        for post in data_test_posts:
            self.test_posts.append(create_post_with_views(post))

        self.draft_url = reverse('retrieve-update-post',
                                 args=[self.test_posts[0].pk])
        self.unpublished_url = reverse('retrieve-update-post',
                                       args=[self.test_posts[1].pk])
        self.published_url = reverse('retrieve-update-post',
                                     args=[self.test_posts[2].pk])
コード例 #2
0
    def test_not_create_post_if_title_missing(self):
        data = {'body': 'A test post.', 'status': 'D'}
        user = create_user()
        login_user(self.client, user)
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
コード例 #3
0
    def test_not_create_post_if_invalid_status(self):
        data = {'title': 'Test Post', 'body': 'A test post.', 'status': 'A'}
        user = create_user()
        login_user(self.client, user)
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
コード例 #4
0
    def test_login_user_with_correct_credentials(self):
        user = create_user()
        data = {'username': user.username, 'password': '******'}
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['token'], user.auth_token.key)
コード例 #5
0
    def test_logout_logged_in_user(self):
        user = create_user()
        login_user(self.client, user)
        response = self.client.delete(self.base_url)

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
        self.assertEqual(response.data, None)
コード例 #6
0
    def test_create_post_if_status_missing(self):
        data = {'title': 'Test Post', 'body': 'A test post.'}
        user = create_user()
        login_user(self.client, user)
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(Post.objects.count(), 1)
        self.assertEqual(Post.objects.get().status, Post.PostStatus.DRAFT)
コード例 #7
0
    def test_not_register_user_if_username_exist(self):
        user = create_user()
        data = {
            'username': user.username,
            'password': '******',
            'retype_password': '******'
        }
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
コード例 #8
0
    def test_create_post_if_user_logged_in(self):
        data = {'title': 'Test Post', 'body': 'A test post.', 'status': 'D'}
        user = create_user()
        login_user(self.client, user)
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(Post.objects.count(), 1)
        self.assertEqual(Post.objects.get().title, data['title'])
        self.assertEqual(Post.objects.get().author_id, user.pk)
コード例 #9
0
    def test_post_views_increase_when_non_author_views_it(self):
        user = create_user({'username': '******', 'password': '******'})
        login_user(self.client, user)

        initial_view_count = PostViews.objects.get(
            post_id=self.test_posts[2].pk).views
        response = self.client.get(self.published_url)
        final_view_count = PostViews.objects.get(
            post_id=self.test_posts[2].pk).views

        self.assertEqual(response.data.get('views'), final_view_count)
        self.assertEqual(final_view_count, initial_view_count + 1)
コード例 #10
0
    def test_non_author_cannot_update_post(self):
        author = create_user()
        published_post = create_post({
            'title': 'Test Post',
            'body': 'Test body',
            'status': Post.PostStatus.PUBLISHED,
            'author': author
        })
        user_data = {'username': '******', 'password': '******'}
        non_author = create_user(user_data)
        login_user(self.client, non_author)
        new_data = {
            'title': 'DRAFT Post',
            'body': 'DRAFT Post Body',
            'status': Post.PostStatus.DRAFT
        }

        url = reverse('retrieve-update-post', args=[published_post.pk])
        response = self.client.put(url, new_data)

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
コード例 #11
0
def create_post(data=None):
    if data is None:
        user = create_user()
        data = {
            'title': 'Test Post',
            'body': 'Test body',
            'status': Post.PostStatus.DRAFT,
            'author': user
        }

    post = Post.objects.create(**data)
    return post
コード例 #12
0
    def test_new_post_creates_related_post_view(self):
        data = {'title': 'Test Post', 'body': 'A test post.', 'status': 'D'}
        user = create_user()
        login_user(self.client, user)
        response = self.client.post(self.base_url, data)

        post = Post.objects.get()
        post_views = PostViews.objects.get()
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(Post.objects.count(), 1)
        self.assertEqual(PostViews.objects.count(), 1)
        self.assertTrue(hasattr(post, 'postviews'))
        self.assertEqual(post.postviews.pk, post_views.pk)
        self.assertEqual(post_views.views, 0)
コード例 #13
0
    def test_non_author_only_sees_published_posts_and_own_posts(self):
        user = create_user({'username': '******', 'password': '******'})
        user_post = create_post({
            'title': 'User Post',
            'body': 'User Post body',
            'status': Post.PostStatus.DRAFT,
            'author': user
        })
        login_user(self.client, user)
        response = self.client.get(self.base_url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 2)
        self.assertEqual(response.data[0].get('title'), user_post.title)
        self.assertEqual(response.data[1].get('title'),
                         self.test_posts[2].get('title'))
コード例 #14
0
    def test_non_author_can_only_view_published_posts_of_others(self):
        user = create_user({'username': '******', 'password': '******'})
        login_user(self.client, user)

        # DRAFT POST
        response = self.client.get(self.draft_url)
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

        # UNPUBLISHED POST
        response = self.client.get(self.unpublished_url)
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

        # PUBLISHED POST
        response = self.client.get(self.published_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get('title'), self.test_posts[2].title)
コード例 #15
0
 def setUp(self):
     self.base_url = reverse('list-create-post')
     self.post_user = create_user()
     self.test_posts = [{
         'title': 'Post 1',
         'body': 'Post 1 body',
         'status': Post.PostStatus.DRAFT,
         'author': self.post_user
     }, {
         'title': 'Post 2',
         'body': 'Post 2 body',
         'status': Post.PostStatus.UNPUBLISHED,
         'author': self.post_user
     }, {
         'title': 'Post 3',
         'body': 'Post 3 body',
         'status': Post.PostStatus.PUBLISHED,
         'author': self.post_user
     }]
     for post in self.test_posts:
         create_post(post)
コード例 #16
0
    def test_not_login_user_with_invalid_credentials(self):
        user = create_user()
        data = {'username': '******', 'password': '******'}
        response = self.client.post(self.base_url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
コード例 #17
0
    def test_deny_logout_logged_out_user(self):
        user = create_user()
        response = self.client.delete(self.base_url)

        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)