|
|
@ -1,3 +1,132 @@ |
|
|
|
from django.test import TestCase |
|
|
|
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 |
|
|
|
|
|
|
|
# Create your tests here. |
|
|
|
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': '已取消关注'}) |