|
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': '已取消关注'})
|