changeset 1223:0807b202b776 modernize

Really add unit tests for comments template tags.
author Brian Neal <bgneal@gmail.com>
date Mon, 10 Mar 2025 20:27:47 -0500
parents 39a7f86acd7e
children d7c7a4777dd7
files comments/tests/test_templatetags.py
diffstat 1 files changed, 206 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comments/tests/test_templatetags.py	Mon Mar 10 20:27:47 2025 -0500
@@ -0,0 +1,206 @@
+"""
+Unit tests for the comments app template tags.
+
+"""
+from datetime import datetime
+
+from django.contrib.auth.models import AnonymousUser, User
+from django.contrib.contenttypes.models import ContentType
+from django.template import Context, Template
+from django.test import TestCase
+from lxml import html
+
+from comments.models import Comment
+from potd.models import Photo
+
+
+class GetCommentCountTestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% get_comment_count for photo as count %}'
+        'Number of comments: {{ count }}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+
+        content_type = ContentType.objects.get(app_label='potd', model='photo')
+        c = Comment(content_type=content_type, object_id=self.photo.pk,
+                    user=self.user, comment='Nice', ip_address='127.0.0.1')
+        c.save()
+
+    def test_renders_comment_count(self):
+        rendered = self.TEMPLATE.render(Context({'photo': self.photo}))
+        self.assertIn('Number of comments: 1', rendered)
+
+
+class GetCommentListTestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% get_comment_list for photo as comments %}'
+        '{% for comment in comments %}'
+        '<p>{{ comment.comment }}</p>'
+        '{% endfor %}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+
+        content_type = ContentType.objects.get(app_label='potd', model='photo')
+        c = Comment(content_type=content_type, object_id=self.photo.pk,
+                    user=self.user, comment='Nice', ip_address='127.0.0.1')
+        c.save()
+        c = Comment(content_type=content_type, object_id=self.photo.pk,
+                    user=self.user, comment='Cool', ip_address='127.0.0.1')
+        c.save()
+
+    def test_renders_comment_list(self):
+        rendered = self.TEMPLATE.render(Context({'photo': self.photo}))
+        self.assertIn('<p>Nice</p>', rendered)
+        self.assertIn('<p>Cool</p>', rendered)
+
+
+def test_form(self, doc):
+    textareas = doc.xpath('//textarea')
+    self.assertIsNotNone(textareas)
+    self.assertEqual(len(textareas), 1)
+
+    ct_inputs = doc.xpath('//input[@id="id_content_type"]')
+    self.assertIsNotNone(ct_inputs)
+    self.assertEqual(len(ct_inputs), 1)
+
+    ct_input = ct_inputs[0]
+    self.assertEqual(ct_input.name, 'content_type')
+    self.assertEqual(ct_input.type, 'hidden')
+    self.assertEqual(ct_input.value, 'potd.photo')
+
+    pk_inputs = doc.xpath('//input[@id="id_object_pk"]')
+    self.assertIsNotNone(pk_inputs)
+    self.assertEqual(len(pk_inputs), 1)
+
+    pk_input = pk_inputs[0]
+    self.assertEqual(pk_input.name, 'object_pk')
+    self.assertEqual(pk_input.type, 'hidden')
+    self.assertEqual(pk_input.value, str(self.photo.pk))
+
+
+class GetCommentFormTestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% get_comment_form for photo as form %}'
+        '{{ form }}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+
+    def test_renders_comment_form(self):
+        rendered = self.TEMPLATE.render(Context({'photo': self.photo}))
+        doc = html.fragment_fromstring(rendered)
+        test_form(self, doc)
+
+
+class RenderCommentFormTestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% render_comment_form user photo %}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+
+    def test_renders_comment_form(self):
+        rendered = self.TEMPLATE.render(Context({
+            'user': self.user,
+            'photo': self.photo,
+        }))
+        doc = html.fragment_fromstring(rendered)
+        test_form(self, doc)
+
+    def test_renders_comment_form_logged_out(self):
+        anon_user = AnonymousUser()
+        rendered = self.TEMPLATE.render(Context({
+            'user': anon_user,
+            'photo': self.photo,
+        }))
+        doc = html.fragment_fromstring(rendered)
+        links = doc.xpath('//a')
+        self.assertIsNotNone(links)
+        self.assertEqual(len(links), 2)
+        self.assertEqual(links[0].items()[0], ('href', '/accounts/login/'))
+        self.assertEqual(links[1].items()[0], ('href', '/accounts/register/'))
+
+
+class RenderCommentFormV3TestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% render_comment_form_v3 user photo %}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+
+    def test_renders_comment_form(self):
+        rendered = self.TEMPLATE.render(Context({
+            'user': self.user,
+            'photo': self.photo,
+        }))
+        # Just make sure nothing blows up
+        self.assertIsNotNone(rendered)
+        self.assertTrue(len(rendered) > 0)
+
+    def test_renders_comment_form_logged_out(self):
+        anon_user = AnonymousUser()
+        rendered = self.TEMPLATE.render(Context({
+            'user': anon_user,
+            'photo': self.photo,
+        }))
+        doc = html.fragment_fromstring(rendered)
+        links = doc.xpath('//a')
+        self.assertIsNotNone(links)
+        self.assertEqual(len(links), 2)
+        self.assertEqual(links[0].items()[0], ('href', '/accounts/login/'))
+        self.assertEqual(links[1].items()[0], ('href', '/accounts/register/'))
+
+
+class RenderCommentListTestCase(TestCase):
+    TEMPLATE = Template(
+        '{% load comment_tags %}'
+        '{% render_comment_list photo %}'
+        )
+
+    def setUp(self):
+        self.user = User.objects.create_user('pjmoto', '', 'pw')
+        self.user.save()
+        self.photo = Photo(pk=4096, user=self.user, date_added=datetime.today())
+        self.photo.save()
+        content_type = ContentType.objects.get(app_label='potd', model='photo')
+        c = Comment(content_type=content_type, object_id=self.photo.pk,
+                    user=self.user, comment='Nice', ip_address='127.0.0.1')
+        c.save()
+        c = Comment(content_type=content_type, object_id=self.photo.pk,
+                    user=self.user, comment='Cool', ip_address='127.0.0.1')
+        c.save()
+
+    def test_renders_comment_list(self):
+        rendered = self.TEMPLATE.render(Context({
+            'photo': self.photo,
+        }))
+        self.assertIn('Nice', rendered)
+        self.assertIn('Cool', rendered)
+