1from django.contrib.auth.models import Group, Permission 2from django.test import TestCase 3from django.urls import reverse 4 5from wagtail.core.models import GroupPagePermission, Page 6from wagtail.tests.testapp.models import SimplePage 7from wagtail.tests.utils import WagtailTestUtils 8 9 10class TestModerationList(TestCase, WagtailTestUtils): 11 """Test moderation list rendered by `wagtailadmin_home` view""" 12 13 def setUp(self): 14 # Create a submitter 15 submitter = self.create_user( 16 username='submitter', 17 email='submitter@email.com', 18 password='password', 19 ) 20 21 # Find root page 22 self.root_page = Page.objects.get(id=2) 23 24 # Create a page 25 self.page = SimplePage( 26 title='Wagtail, the powerful CMS for modern websites', 27 slug='wagtail', 28 content='Fast, elegant, open source', 29 ) 30 31 self.root_page.add_child(instance=self.page) 32 33 # Submit it for moderation 34 self.page.save_revision(user=submitter, submitted_for_moderation=True) 35 36 # Create a revision 37 self.revision = self.page.get_latest_revision() 38 39 self.edit_page_url = reverse('wagtailadmin_pages:edit', args=(self.revision.page.id, )) 40 self.preview_page_url = reverse('wagtailadmin_pages:preview_for_moderation', args=(self.revision.id, )) 41 42 def login_as_moderator_without_edit(self): 43 # Create moderators group without edit permissions 44 moderators_group = Group.objects.create(name='Moderators without edit') 45 46 admin_permission = Permission.objects.get( 47 content_type__app_label='wagtailadmin', 48 codename='access_admin' 49 ) 50 51 moderators_group.permissions.add(admin_permission) 52 53 # Create group permissions 54 GroupPagePermission.objects.create( 55 group=moderators_group, 56 page=self.root_page, 57 permission_type='publish', 58 ) 59 60 # Create a moderator without edit permissions 61 moderator = self.create_user( 62 username='moderator', 63 email='moderator@email.com', 64 password='password' 65 ) 66 67 moderator.groups.add(moderators_group) 68 69 self.login(moderator) 70 71 def get(self): 72 return self.client.get(reverse('wagtailadmin_home')) 73 74 def test_edit_page(self): 75 # Login as moderator 76 self.login() 77 78 response = self.get() 79 80 self.assertEqual(response.status_code, 200) 81 self.assertTemplateUsed(response, 'wagtailadmin/home.html') 82 83 # Check response 84 self.assertContains(response, self.edit_page_url, count=2) 85 86 def test_preview_for_moderation(self): 87 # Login as moderator without edit permissions 88 self.login_as_moderator_without_edit() 89 90 response = self.get() 91 92 self.assertEqual(response.status_code, 200) 93 self.assertTemplateUsed(response, 'wagtailadmin/home.html') 94 95 # Check response 96 self.assertContains(response, self.preview_page_url, count=2) 97 self.assertNotContains(response, self.edit_page_url) 98