from django.conf import settings from django.test import TestCase from django.urls import reverse from main import models class PostAnalyticAnonTestCase(TestCase): """Test post analytics for non logged in users.""" def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "Welcome post", "slug": "welcome-post", "body": "Content sentence.", } self.post = models.Post.objects.create(owner=self.user, **self.data) self.client.logout() def test_post_analytic_anon(self): response = self.client.get( reverse("post_detail", args=(self.post.slug,)), # needs HTTP_HOST because we need to request it on the subdomain HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertEqual(models.AnalyticPost.objects.filter(post=self.post).count(), 1) class PostAnalyticTestCase(TestCase): """Test post analytics for logged in users do not count.""" def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "Welcome post", "slug": "welcome-post", "body": "Content sentence.", } self.post = models.Post.objects.create(owner=self.user, **self.data) def test_post_analytic_logged_in(self): response = self.client.get( reverse("post_detail", args=(self.post.slug,)), HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertFalse(models.AnalyticPost.objects.filter(post=self.post).exists()) class PageAnalyticAnonTestCase(TestCase): """Test page analytics for non logged in users.""" def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "About", "slug": "about", "body": "About this blog.", "is_hidden": False, } self.page = models.Page.objects.create(owner=self.user, **self.data) self.client.logout() def test_page_analytic_anon(self): response = self.client.get( reverse("page_detail", args=(self.page.slug,)), # needs HTTP_HOST because we need to request it on the subdomain HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertEqual( models.AnalyticPage.objects.filter(path=self.page.slug).count(), 1 ) class PageAnalyticTestCase(TestCase): """Test generic page analytics for logged in users do not count.""" def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "About", "slug": "about", "body": "About this blog.", "is_hidden": False, } self.page = models.Page.objects.create(owner=self.user, **self.data) def test_page_analytic_logged_in(self): response = self.client.get( reverse("page_detail", args=(self.page.slug,)), # needs HTTP_HOST because we need to request it on the subdomain HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertFalse( models.AnalyticPage.objects.filter(path=self.page.slug).exists() ) class PageAnalyticIndexTestCase(TestCase): """Test 'index' special page analytics.""" def setUp(self): self.user = models.User.objects.create(username="alice") def test_index_analytic(self): response = self.client.get( reverse("index"), # needs HTTP_HOST because we need to request it on the subdomain HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertEqual(models.AnalyticPage.objects.filter(path="index").count(), 1) class PageAnalyticFeedTestCase(TestCase): """Test 'rss' special page analytics.""" def setUp(self): self.user = models.User.objects.create(username="alice") def test_feed_analytic(self): for feed in ["rss", "atom"]: response = self.client.get( reverse(f"{feed}_feed"), HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) self.assertEqual(response.status_code, 200) self.assertEqual(models.AnalyticPage.objects.filter(path=feed).count(), 1) class AnalyticListTestCase(TestCase): def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "Welcome post", "slug": "welcome-post", "body": "Content sentence.", } self.post = models.Post.objects.create(owner=self.user, **self.data) def test_analytic_list(self): response = self.client.get( reverse("analytic_list"), ) self.assertEqual(response.status_code, 200) self.assertContains(response, "List of pages:") self.assertContains(response, "index") self.assertContains(response, "rss") self.assertContains(response, "List of posts:") self.assertContains(response, "Welcome post") class PostAnalyticDetailTestCase(TestCase): def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.data = { "title": "Welcome post", "slug": "welcome-post", "body": "Content sentence.", } self.post = models.Post.objects.create(owner=self.user, **self.data) # register one sample post analytic self.client.logout() # need to logout for analytic to be counted self.client.get( reverse("post_detail", args=(self.post.slug,)), HTTP_HOST=self.user.username + "." + settings.CANONICAL_HOST, ) # need to login again to access analytic post detail dashboard page self.client.force_login(self.user) def test_post_analytic_detail(self): response = self.client.get( reverse("analytic_post_detail", args=(self.post.slug,)), ) self.assertEqual(response.status_code, 200) self.assertContains(response, '