Example #1
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)
Example #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)
Example #3
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)
Example #4
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)
Example #5
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)
Example #6
0
    def test_post_views_not_increase_when_author_views_it(self):
        login_user(self.client, self.post_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'), initial_view_count)
        self.assertEqual(final_view_count, initial_view_count)
Example #7
0
    def test_posts_ordered_by_descending_created_date(self):
        login_user(self.client, self.post_user)
        response = self.client.get(self.base_url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertTrue(
            self.str_to_date(response.data[0].get('created_on')) >
            self.str_to_date(response.data[1].get('created_on')))
        self.assertTrue(
            self.str_to_date(response.data[1].get('created_on')) >
            self.str_to_date(response.data[2].get('created_on')))
Example #8
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)
Example #9
0
    def test_author_sees_all_self_posts(self):
        login_user(self.client, self.post_user)
        response = self.client.get(self.base_url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 3)
        self.assertEqual(response.data[0].get('title'),
                         self.test_posts[2].get('title'))
        self.assertEqual(response.data[1].get('title'),
                         self.test_posts[1].get('title'))
        self.assertEqual(response.data[2].get('title'),
                         self.test_posts[0].get('title'))
Example #10
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)
Example #11
0
    def test_author_can_update_individual_fields(self):
        post = create_post()
        login_user(self.client, post.author)

        new_data = {'status': Post.PostStatus.PUBLISHED}
        url = reverse('retrieve-update-post', args=[post.pk])
        response = self.client.patch(url, new_data)

        updated_post = Post.objects.get()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(updated_post.id, post.id)
        self.assertEqual(updated_post.status, new_data['status'])
        self.assertEqual(updated_post.title, post.title)
        self.assertEqual(updated_post.body, post.body)
        self.assertNotEqual(updated_post.status, post.status)
Example #12
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)
Example #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'))
Example #14
0
    def test_author_can_view_all_self_posts(self):
        login_user(self.client, self.post_user)

        # DRAFT POST
        response = self.client.get(self.draft_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get('title'), self.test_posts[0].title)

        # UNPUBLISHED POST
        response = self.client.get(self.unpublished_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get('title'), self.test_posts[1].title)

        # 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)
Example #15
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)
Example #16
0
    def test_author_can_update_complete_post(self):
        post = create_post()
        login_user(self.client, post.author)

        new_data = {
            'title': 'Published Post',
            'body': 'Published Post Body',
            'status': Post.PostStatus.PUBLISHED
        }
        url = reverse('retrieve-update-post', args=[post.pk])
        response = self.client.put(url, new_data)

        updated_post = Post.objects.get()
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(updated_post.id, post.id)
        self.assertEqual(updated_post.title, new_data['title'])
        self.assertEqual(updated_post.body, new_data['body'])
        self.assertEqual(updated_post.status, new_data['status'])
        self.assertNotEqual(updated_post.title, post.title)
        self.assertNotEqual(updated_post.body, post.body)
        self.assertNotEqual(updated_post.status, post.status)