from django.test import TestCase from django.urls import reverse from main import models class SnapshotCreateTestCase(TestCase): def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) def test_snapshot_create(self): data = { "title": "New blog", "body": "Hey audience!", } response = self.client.post( reverse("snapshot_create"), data=data, ) self.assertEqual(response.status_code, 200) self.assertEqual(models.Snapshot.objects.all().count(), 1) self.assertEqual(models.Snapshot.objects.all().first().title, data["title"]) self.assertEqual(models.Snapshot.objects.all().first().body, data["body"]) self.assertEqual(models.Snapshot.objects.all().first().owner, self.user) class SnapshotDetailTestCase(TestCase): def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.snapshot = models.Snapshot.objects.create( owner=self.user, title="New blog", body="hello world", ) def test_snapshot_detail(self): response = self.client.get( reverse("snapshot_detail", args=(self.snapshot.id,)), ) self.assertEqual(response.status_code, 200) self.assertContains(response, self.snapshot.id) self.assertContains(response, self.snapshot.title) class SnapshotListTestCase(TestCase): def setUp(self): self.user = models.User.objects.create(username="alice") self.client.force_login(self.user) self.snapshot_a = models.Snapshot.objects.create( owner=self.user, title="New blog", body="hello world", ) self.snapshot_b = models.Snapshot.objects.create( owner=self.user, title="New blog", body="Hello new world", ) def test_snapshot_list(self): response = self.client.get(reverse("snapshot_list")) self.assertEqual(response.status_code, 200) self.assertContains(response, self.snapshot_a.id) self.assertContains(response, self.snapshot_a.title) self.assertContains(response, self.snapshot_b.id) self.assertContains(response, self.snapshot_b.title) class SnapshotDetailNonOwnerTestCase(TestCase): """Test snapshots cannot be accessed by non-owners.""" def setUp(self): self.user_a = models.User.objects.create(username="alice") self.snapshot_a = models.Snapshot.objects.create( owner=self.user_a, title="New blog", body="hello world", ) def test_snapshot_detail_nonauth(self): self.user_b = models.User.objects.create(username="bob") self.client.force_login(self.user_b) response = self.client.get( reverse("snapshot_detail", args=(self.snapshot_a.id,)), ) self.assertEqual(response.status_code, 403) class SnapshotListNonownerTestCase(TestCase): """Test snapshot list cannot be accessed by non-owners.""" def setUp(self): self.user_a = models.User.objects.create(username="alice") self.snapshot_a = models.Snapshot.objects.create( owner=self.user_a, title="New blog", body="hello world", ) def test_snapshot_detail_nonauth(self): self.user_b = models.User.objects.create(username="bob") self.client.force_login(self.user_b) response = self.client.get( reverse("snapshot_list"), ) self.assertEqual(response.status_code, 200) self.assertContains(response, "none")