from django.contrib.auth.models import User
from django.test import TestCase
from django.urls import reverse

from .models import Blog, Category, Comment


class BlogModelTests(TestCase):
    def test_slug_is_made_unique(self):
        author = User.objects.create_user(username="writer", password="secret")
        first = Blog.objects.create(title="Same Title", author=author, content="<p>One</p>")
        second = Blog.objects.create(title="Same Title", author=author, content="<p>Two</p>")

        self.assertEqual(first.slug, "same-title")
        self.assertEqual(second.slug, "same-title-2")


class BlogViewTests(TestCase):
    def setUp(self):
        self.author = User.objects.create_user(username="author", password="secret")
        self.category = Category.objects.create(name="News")
        self.blog = Blog.objects.create(
            title="Launch Post",
            author=self.author,
            category=self.category,
            content="<p>Hello world</p>",
            meta="Launch post meta",
        )

    def test_blog_detail_renders_without_brand_business(self):
        response = self.client.get(reverse("blog_detail", args=[self.blog.slug]))

        self.assertEqual(response.status_code, 200)
        self.blog.refresh_from_db()
        self.assertEqual(self.blog.views_count, 1)

    def test_posting_comment_updates_comment_counter(self):
        response = self.client.post(
            reverse("blog_detail", args=[self.blog.slug]),
            {
                "full_name": "A Reader",
                "email": "reader@example.com",
                "description": "Useful article",
            },
        )

        self.assertRedirects(response, self.blog.get_absolute_url())
        self.assertEqual(Comment.objects.filter(blog=self.blog).count(), 1)
        self.blog.refresh_from_db()
        self.assertEqual(self.blog.comments_count, 1)
