from django.contrib.auth import get_user_model from django.test import Client, TestCase from django.urls import reverse from django.utils import timezone from blog.models import Post class BlogPublicTests(TestCase): def test_list_hides_drafts(self): Post.objects.create(title="Draft", body="x", is_published=False) Post.objects.create( title="Live", body="hello", is_published=True, published_at=timezone.now(), ) response = Client().get(reverse("blog:list")) self.assertEqual(response.status_code, 200) self.assertContains(response, "Live") self.assertNotContains(response, "Draft") def test_portal_requires_login(self): response = Client().get(reverse("blog_portal:portal_list")) self.assertEqual(response.status_code, 302) class BlogPortalTests(TestCase): def setUp(self): User = get_user_model() self.user = User.objects.create_user("editor", password="test-pass-123", is_staff=True) self.client = Client() self.client.login(username="editor", password="test-pass-123") def test_create_published_post(self): response = self.client.post( reverse("blog_portal:portal_new"), {"title": "Hello", "body": "World", "is_published": "on"}, ) self.assertEqual(response.status_code, 302) post = Post.objects.get() self.assertTrue(post.is_published) self.assertEqual(post.slug, "hello")