123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- from django.urls import reverse
- from ...acl import ACL_CACHE
- from ...acl.models import Role
- from ...admin.test import AdminTestCase
- from ...cache.test import assert_invalidates_cache
- from ..models import Rank
- class RankAdminViewsTests(AdminTestCase):
- def test_link_registered(self):
- """admin nav contains ranks link"""
- response = self.client.get(reverse("misago:admin:users:accounts:index"))
- response = self.client.get(response["location"])
- self.assertContains(response, reverse("misago:admin:users:ranks:index"))
- def test_list_view(self):
- """ranks list view returns 200"""
- response = self.client.get(reverse("misago:admin:users:ranks:index"))
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, "Team")
- def test_new_view(self):
- """new rank view has no showstoppers"""
- test_role_a = Role.objects.create(name="Test Role A")
- test_role_b = Role.objects.create(name="Test Role B")
- test_role_c = Role.objects.create(name="Test Role C")
- response = self.client.get(reverse("misago:admin:users:ranks:new"))
- self.assertEqual(response.status_code, 200)
- response = self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- "roles": [test_role_a.pk, test_role_c.pk],
- },
- )
- self.assertEqual(response.status_code, 302)
- response = self.client.get(reverse("misago:admin:users:ranks:index"))
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, "Test Rank")
- self.assertContains(response, "Test Title")
- test_rank = Rank.objects.get(slug="test-rank")
- self.assertIn(test_role_a, test_rank.roles.all())
- self.assertIn(test_role_c, test_rank.roles.all())
- self.assertTrue(test_role_b not in test_rank.roles.all())
- def test_edit_view(self):
- """edit rank view has no showstoppers"""
- test_role_a = Role.objects.create(name="Test Role A")
- test_role_b = Role.objects.create(name="Test Role B")
- test_role_c = Role.objects.create(name="Test Role C")
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- "roles": [test_role_a.pk, test_role_c.pk],
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.get(
- reverse("misago:admin:users:ranks:edit", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, test_rank.name)
- self.assertContains(response, test_rank.title)
- response = self.client.post(
- reverse("misago:admin:users:ranks:edit", kwargs={"pk": test_rank.pk}),
- data={"name": "Top Lel", "roles": [test_role_b.pk]},
- )
- self.assertEqual(response.status_code, 302)
- test_rank = Rank.objects.get(slug="top-lel")
- response = self.client.get(reverse("misago:admin:users:ranks:index"))
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, test_rank.name)
- self.assertTrue("Test Rank" not in test_rank.roles.all())
- self.assertTrue("Test Title" not in test_rank.roles.all())
- self.assertIn(test_role_b, test_rank.roles.all())
- self.assertTrue(test_role_a not in test_rank.roles.all())
- self.assertTrue(test_role_c not in test_rank.roles.all())
- def test_editing_rank_invalidates_acl_cache(self):
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- test_role_b = Role.objects.create(name="Test Role B")
- with assert_invalidates_cache(ACL_CACHE):
- self.client.post(
- reverse("misago:admin:users:ranks:edit", kwargs={"pk": test_rank.pk}),
- data={"name": "Top Lel", "roles": [test_role_b.pk]},
- )
- def test_default_view(self):
- """default rank view has no showstoppers"""
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.post(
- reverse("misago:admin:users:ranks:default", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 302)
- test_rank = Rank.objects.get(slug="test-rank")
- self.assertTrue(test_rank.is_default)
- def test_move_up_view(self):
- """move rank up view has no showstoppers"""
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.post(
- reverse("misago:admin:users:ranks:up", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 302)
- changed_rank = Rank.objects.get(slug="test-rank")
- self.assertEqual(changed_rank.order + 1, test_rank.order)
- def test_move_down_view(self):
- """move rank down view has no showstoppers"""
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- # Move rank up
- response = self.client.post(
- reverse("misago:admin:users:ranks:up", kwargs={"pk": test_rank.pk})
- )
- response = self.client.post(
- reverse("misago:admin:users:ranks:down", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 302)
- # Test move down
- changed_rank = Rank.objects.get(slug="test-rank")
- self.assertEqual(changed_rank.order, test_rank.order)
- def test_users_view(self):
- """users with this rank view has no showstoppers"""
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.get(
- reverse("misago:admin:users:ranks:users", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 302)
- def test_delete_view(self):
- """delete rank view has no showstoppers"""
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.post(
- reverse("misago:admin:users:ranks:delete", kwargs={"pk": test_rank.pk})
- )
- self.assertEqual(response.status_code, 302)
- self.client.get(reverse("misago:admin:users:ranks:index"))
- response = self.client.get(reverse("misago:admin:users:ranks:index"))
- self.assertEqual(response.status_code, 200)
- self.assertNotContains(response, test_rank.name)
- self.assertNotContains(response, test_rank.title)
- def test_deleting_rank_invalidates_acl_cache(self):
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test Rank",
- "description": "Lorem ipsum dolor met",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- with assert_invalidates_cache(ACL_CACHE):
- self.client.post(
- reverse("misago:admin:users:ranks:delete", kwargs={"pk": test_rank.pk})
- )
- def test_uniquess(self):
- """rank slug uniqueness is enforced by admin forms"""
- test_role_a = Role.objects.create(name="Test Role A")
- response = self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Members",
- "description": "Colliding rank",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- "roles": [test_role_a.pk],
- },
- )
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, "This name collides with other rank.")
- self.client.post(
- reverse("misago:admin:users:ranks:new"),
- data={
- "name": "Test rank",
- "description": "Colliding rank",
- "title": "Test Title",
- "style": "test",
- "is_tab": "1",
- "roles": [test_role_a.pk],
- },
- )
- test_rank = Rank.objects.get(slug="test-rank")
- response = self.client.post(
- reverse("misago:admin:users:ranks:edit", kwargs={"pk": test_rank.pk}),
- data={"name": "Members", "roles": [test_role_a.pk]},
- )
- self.assertEqual(response.status_code, 200)
- self.assertContains(response, "This name collides with other rank.")
|