You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

132 lines
6.2 KiB

from django.test import TestCase, Client
from django.urls import reverse
from django.contrib.auth import get_user_model
from .models import Post, Like, Comment, Favorite
import json
User = get_user_model()
class PostModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='testpass')
self.post = Post.objects.create(user=self.user, content='test content')
def test_str(self):
self.assertIn(self.user.username, str(self.post))
def test_post_creation(self):
self.assertEqual(Post.objects.count(), 1)
class LikeModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser2', password='testpass')
self.post = Post.objects.create(user=self.user, content='test content')
self.like = Like.objects.create(user=self.user, post=self.post)
def test_like_creation(self):
self.assertEqual(Like.objects.count(), 1)
class CommentModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser3', password='testpass')
self.post = Post.objects.create(user=self.user, content='test content')
self.comment = Comment.objects.create(user=self.user, post=self.post, content='nice!')
def test_comment_creation(self):
self.assertEqual(Comment.objects.count(), 1)
class FavoriteModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser4', password='testpass')
self.post = Post.objects.create(user=self.user, content='test content')
self.favorite = Favorite.objects.create(user=self.user, post=self.post)
def test_favorite_creation(self):
self.assertEqual(Favorite.objects.count(), 1)
class CommunityViewsTest(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(username='testuser5', password='testpass')
self.post = Post.objects.create(user=self.user, content='test content')
def test_post_list_view(self):
response = self.client.get(reverse('community'))
self.assertEqual(response.status_code, 200)
def test_create_post_view_not_logged_in(self):
response = self.client.get(reverse('create_post'))
self.assertEqual(response.status_code, 302) # redirect to login
def test_like_post_view(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('like_post', args=[self.post.id]))
self.assertEqual(response.status_code, 200)
def test_create_post_with_content(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('create_post'), {'content': 'new post'})
self.assertEqual(response.status_code, 302)
def test_create_post_no_content(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('create_post'), {'content': ''})
self.assertEqual(response.status_code, 302)
def test_like_post_twice(self):
self.client.login(username='testuser5', password='testpass')
self.client.post(reverse('like_post', args=[self.post.id]))
response = self.client.post(reverse('like_post', args=[self.post.id]))
self.assertJSONEqual(response.content, {'success': False, 'message': '已点赞'})
def test_like_post_not_exist(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('like_post', args=[9999]))
self.assertEqual(response.status_code, 404)
data = json.loads(response.content)
self.assertEqual(data['error'], '帖子不存在')
def test_comment_post_empty(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('comment_post', args=[self.post.id]), {'content': ''})
self.assertJSONEqual(response.content, {'success': False, 'message': '评论不能为空'})
def test_comment_post_not_exist(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('comment_post', args=[9999]), {'content': 'hi'})
self.assertEqual(response.status_code, 404)
data = json.loads(response.content)
self.assertEqual(data['error'], '帖子不存在')
def test_favorite_post_twice(self):
self.client.login(username='testuser5', password='testpass')
self.client.post(reverse('favorite_post', args=[self.post.id]))
response = self.client.post(reverse('favorite_post', args=[self.post.id]))
self.assertJSONEqual(response.content, {'success': False, 'message': '已收藏'})
def test_favorite_post_not_exist(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('favorite_post', args=[9999]))
self.assertEqual(response.status_code, 404)
data = json.loads(response.content)
self.assertEqual(data['error'], '帖子不存在')
def test_toggle_follow_self(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('toggle_follow', args=[self.user.id]))
self.assertJSONEqual(response.content, {'success': False, 'message': '不能关注自己'})
def test_toggle_follow_not_exist(self):
self.client.login(username='testuser5', password='testpass')
response = self.client.post(reverse('toggle_follow', args=[9999]))
self.assertJSONEqual(response.content, {'success': False, 'message': '用户不存在'})
def test_toggle_follow_and_unfollow(self):
self.client.login(username='testuser5', password='testpass')
# 新建另一个用户
user2 = User.objects.create_user(username='testuser6', password='testpass')
response = self.client.post(reverse('toggle_follow', args=[user2.id]))
self.assertJSONEqual(response.content, {'success': True, 'following': True, 'message': '关注成功'})
# 再次调用应为取消关注
response = self.client.post(reverse('toggle_follow', args=[user2.id]))
self.assertJSONEqual(response.content, {'success': True, 'following': False, 'message': '已取消关注'})