Django 기반 웹 개발(6)
댓글 기능 구현
작업 브랜치: https://github.com/yehoon17/recipe_management_system/tree/comment
테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from django.test import TestCase
from django.urls import reverse
from .models import Recipe, Comment, User
class CommentCRUDTests(TestCase):
def setUp(self):
# 테스트 유저 생성
self.user = User.objects.create_user(username='testuser', password='12345')
# 테스트 레시피 생성
self.recipe = Recipe.objects.create(
user=self.user,
title='Test Recipe',
description='Test Description',
preparation_time=30,
cooking_time=45,
difficulty_level='Easy'
)
def test_create_comment_not_logged_in(self):
comment_text = "This is a test comment"
response = self.client.post(reverse('create_comment', args=[self.recipe.id]), {
'text': comment_text
}, follow=True)
self.assertEqual(response.status_code, 200)
self.assertRedirects(response, reverse('login') + '?next=' + reverse('create_comment', args=[self.recipe.id]))
def test_create_comment_logged_in(self):
self.client.login(username='testuser', password='12345')
comment_text = "This is a test comment"
response = self.client.post(reverse('create_comment', args=[self.recipe.id]), {
'text': comment_text
}, follow=True)
self.assertEqual(response.status_code, 200)
self.assertTrue(Comment.objects.filter(text=comment_text).exists())
self.assertRedirects(response, reverse('recipe_detail', args=[self.recipe.id]))
def test_read_comment(self):
n_comments = 10
comments = []
for i in range(n_comments):
comment = Comment.objects.create(
user=self.user,
recipe=self.recipe,
text=f"Test Comment {i}"
)
comments.append(comment)
response = self.client.get(reverse('recipe_detail', args=[self.recipe.id]))
self.assertEqual(response.status_code, 200)
for comment in comments:
self.assertContains(response, comment.text)
def test_update_comment(self):
self.client.login(username='testuser', password='12345')
comment = Comment.objects.create(
user=self.user,
recipe=self.recipe,
text="Original Comment"
)
updated_text = "Updated Comment"
response = self.client.post(reverse('update_comment', args=[self.recipe.id, comment.id]), {
'text': updated_text
})
self.assertEqual(response.status_code, 302)
self.assertTrue(Comment.objects.filter(text=updated_text).exists())
def test_delete_comment(self):
self.client.login(username='testuser', password='12345')
comment = Comment.objects.create(
user=self.user,
recipe=self.recipe,
text="To be deleted"
)
response = self.client.post(reverse('delete_comment', args=[self.recipe.id, comment.id]))
self.assertEqual(response.status_code, 302)
self.assertFalse(Comment.objects.filter(text="To be deleted").exists())
def test_reply_comment(self):
self.client.login(username='testuser', password='12345')
parent_comment = Comment.objects.create(
user=self.user,
recipe=self.recipe,
text="Parent Comment"
)
comment_text = "Child Comment"
response = self.client.post(reverse('reply_comment', args=[self.recipe.id, parent_comment.id]), {
'text': comment_text
}, follow=True)
self.assertEqual(response.status_code, 200)
self.assertTrue(Comment.objects.filter(text=comment_text, parent_comment=parent_comment).exists())
구현
Next: Django 기반 웹 개발(6)
This post is licensed under CC BY 4.0 by the author.