Post

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())

구현

alt text


Next: Django 기반 웹 개발(6)

This post is licensed under CC BY 4.0 by the author.