def test_active(self): ''' Posts are soft deleted, so only get active posts. ''' create_post(self.user1) p2 = create_post(self.user1) p2.is_active = False p2.save() active_posts = Post.objects.active() self.assertEqual(active_posts.count(), 1)
def test_get_replies(self): p = create_post(self.user1) create_post(self.user1, is_reply=True, parent=p) r2 = create_post(self.user1, is_reply=True, parent=p) r2.is_active = False r2.save() reply_count = p.get_replies().count() self.assertEqual(reply_count, 1)
def test_recommended_posts(self): self.authenticate() create_post(self.user2) response = self.client.get(self.url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the correct results are returned. recommended_post_username = response.data[0].get("author").get("username") self.assertEqual(recommended_post_username, self.user2.username)
def test_profile_posts(self): create_post(self.user1) p2 = create_post(self.user1) p2.is_active = False p2.save() create_post(self.user2) profile_post_count = Post.objects.profile_posts(self.user1).count() self.assertEqual(profile_post_count, 1)
def test_long_recommended_posts(self): self.authenticate() create_post(self.user2) response = self.client.get(self.url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the response data is paginated. self.assertIsInstance(response.data.get("results"), list) # Make sure the correct results are returned. recommended_post_username = ( response.data.get("results")[0].get("author").get("username") ) self.assertEqual(recommended_post_username, self.user2.username)
def test_get_post_replies(self): self.authenticate() p = create_post(self.user1) create_post(self.user1, is_reply=True, parent=p) url = reverse(self.endpoint, kwargs={"pk": p.pk}) response = self.client.get(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the response data is paginated. self.assertIsInstance(response.data.get("results"), list) # Make sure the correct results are returned. reply_count = p.get_replies().count() self.assertEqual(reply_count, 1)
def test_profile_posts(self): self.authenticate() create_post(self.user1) create_post(self.user2) url = reverse(self.endpoint, kwargs={"slug": self.user1.slug}) response = self.client.get(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the respnose data is paginated. self.assertIsInstance(response.data.get("results"), list) # Make sure the correct results are returned. results_count = len(response.data.get("results")) self.assertEqual(results_count, 1)
def test_get_post_detail(self): self.authenticate() p = create_post(self.user1) url = reverse(self.endpoint, kwargs={"pk": p.pk}) response = self.client.get(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_must_be_owner(self): self.authenticate() p = create_post(self.user2) url = reverse(self.endpoint, kwargs={"pk": p.pk}) data = {"body": "testing"} response = self.client.patch(url, data) # Test status code. self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_delete_post_detail(self): self.authenticate() p = create_post(self.user1) url = reverse(self.endpoint, kwargs={'pk': p.pk}) response = self.client.delete(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) # Make sure the post was deleted. post_count = self.user1.posts.active().count() self.assertEqual(post_count, 0)
def test_add_like(self): self.authenticate() p = create_post(self.user1) url = reverse(self.endpoint, kwargs={"pk": p.pk}) response = self.client.post(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Make sure the like was created. likes_count = p.liked.count() self.assertEqual(likes_count, 1)
def test_delete_like(self): self.authenticate() p = create_post(self.user1) url = reverse(self.endpoint, kwargs={"pk": p.pk}) response = self.client.delete(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) # Make sure the like was deleted. likes_count = p.liked.count() self.assertEqual(likes_count, 0)
def test_feed(self): ''' Feed consists of a user's posts, and posts that user is following. Here user1, user2, and user3 create a post. user1 follows user2, therefore the feed should only consist of 2 posts. ''' create_post(self.user1) create_post(self.user2) create_post(self.user3) self.user1.follow(self.user2) feed_count = Post.objects.feed(self.user1).count() self.assertEqual(feed_count, 2)
def test_profile_likes(self): self.authenticate() url = reverse(self.endpoint, kwargs={'slug': self.user1.slug}) response = self.client.get(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the respnose data is paginated. self.assertIsInstance(response.data.get('results'), list) # Make sure the correct results are returned. p = create_post(self.user1) p.liked.add(self.user1) post_likes_count = p.liked.count() self.assertEqual(post_likes_count, 1)
def test_update_post_detail(self): self.authenticate() p = create_post(self.user1) url = reverse(self.endpoint, kwargs={"pk": p.pk}) new_body = "testing" data = { "body": new_body, } response = self.client.patch(url, data) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure post was updated. updated_body = self.user1.posts.get(pk=p.pk).body self.assertEqual(updated_body, new_body)
def test_get_likes(self): self.authenticate() p = create_post(self.user1) p.liked.add(self.user1) url = reverse(self.endpoint, kwargs={"pk": p.pk}) response = self.client.get(url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the response data is paginated. self.assertIsInstance(response.data.get("results"), list) # Make sure the results are correct. likes_count = p.liked.count() self.assertEqual(likes_count, 1)
def test_recommend_posts(self): p1 = create_post(self.user2) create_post(self.user3, parent=p1) create_post(self.user3) self.user1.follow(self.user2) recommend_post_count = Post.objects.recommend_posts(self.user1).count() self.assertEqual(recommend_post_count, 1) for _ in range(0, 10): create_post(self.user3) recommend_post_count = Post.objects.recommend_posts(self.user1).count() self.assertEqual(recommend_post_count, 5) recommend_post_count = Post.objects.recommend_posts(self.user1, long=True).count() self.assertEqual(recommend_post_count, 11)
def test_create_repost(self): self.authenticate() p = create_post(self.user2) data = { "body": "testing", "is_reply": False, "parent_id": p.id, } response = self.client.post(self.url, data) # Test status code. self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Make sure the repost was created. repost_count = p.alt.filter(~Q(parent_id=None), is_reply=False).count() self.assertEqual(repost_count, 1) # Make sure user2 gets notified of a repost. notifications_count = self.user2.notifications.count() self.assertEqual(notifications_count, 1)
def test_create_reply(self): self.authenticate() p = create_post(self.user2) data = { 'body': 'testing', 'is_reply': True, 'parent_id': p.id, } response = self.client.post(self.url, data) # Test status code. self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Make sure the reply was created. post_count = self.user1.posts\ .filter(~Q(parent_id=None), is_reply=True)\ .count() self.assertEqual(post_count, 1) # Make sure user2 gets notified of a repost. notifications_count = self.user2.notifications.count() self.assertEqual(notifications_count, 1)
def test_feed(self): self.authenticate() create_post(self.user1) create_post(self.user2) create_post(self.user3) self.user1.follow(self.user2) response = self.client.get(self.url) # Test status code. self.assertEqual(response.status_code, status.HTTP_200_OK) # Make sure the response data is paginated. self.assertIsInstance(response.data.get("results"), list) # Make sure the correct results are returned. results_count = len(response.data.get("results")) self.assertEqual(results_count, 2)
def test_posts(self): p1 = create_post(self.user1) create_post(self.user1, is_reply=True, parent=p1) p2 = create_post(self.user1) p2.is_active = False p2.save() posts = Post.objects.posts().filter(author=self.user1) # Check post count post_count = posts.count() self.assertEqual(post_count, 1) # Check reply count reply_count = len(posts[0].reply_ids) self.assertEqual(reply_count, 1) # Check repost count create_post(self.user1, parent=p1) repost_count = len(posts[0].repost_ids) self.assertEqual(repost_count, 1)
def test_string_representation(self): p = create_post(self.user1, body="testing") self.assertEqual(str(p), "testing")