Example #1
0
    def setUp(self):
        # Permissions for objects we're testing
        self.edit_page = Permission.objects.get_by_natural_key(
            'edit_page', 'glitter_pages', 'page'
        )
        self.publish_page = Permission.objects.get_by_natural_key(
            'publish_page', 'glitter_pages', 'page'
        )
        self.edit_book = Permission.objects.get_by_natural_key(
            'edit_book', 'sample', 'book'
        )
        self.publish_book = Permission.objects.get_by_natural_key(
            'publish_book', 'sample', 'book'
        )

        # Superuser
        User = get_user_model()
        self.superuser = User.objects.create_superuser(
            username='******', email='', password=None
        )

        # Editor with editing permissions
        self.editor = User.objects.create_user(username='******', email='', password=None)
        self.editor.is_staff = True
        self.editor.save()
        self.editor.user_permissions.add(self.edit_page, self.edit_book)

        # Publisher with edit and publish permissions
        self.publisher = User.objects.create_user(username='******', email='', password=None)
        self.publisher.is_staff = True
        self.publisher.save()
        self.publisher.user_permissions.add(
            self.edit_page, self.publish_page, self.edit_book, self.publish_book
        )

        # Staff with no editing permissions
        self.staff = User.objects.create_user(username='******', email='', password=None)
        self.staff.is_staff = True
        self.staff.save()

        # Page with an unsaved page version
        self.page = Page.objects.create(url='/test/', title='Test page')
        self.page_version = Version.objects.create(
            content_type=ContentType.objects.get_for_model(Page),
            object_id=self.page.id,
            template_name='glitter/sample.html',
            owner=self.editor,
        )
        self.page_admin = PageAdmin(Page, AdminSite())

        # Sample model
        self.book = Book.objects.create(title='Hello')
        self.book_admin = PageAdmin(Book, AdminSite())
Example #2
0
    def setUp(self):

        # Permissions
        self.edit_permissions = Permission.objects.get_by_natural_key(
            'edit_page', 'glitter_pages', 'page'
        )

        # Page
        self.page = Page.objects.create(url='/test/', title='Test page')

        # Information about model
        self.info = self.page._meta.app_label, self.page._meta.model_name

        # Superuser
        User = get_user_model()
        self.super_user = User.objects.create_superuser('test', '*****@*****.**', 'test')
        self.super_user_client = Client()
        self.super_user_client.login(username='******', password='******')

        # Editor with editing permissions
        self.editor = User.objects.create_user('editor', '*****@*****.**', 'editor')
        self.editor.is_staff = True
        self.editor.user_permissions.add(self.edit_permissions)
        self.editor.save()
        self.editor_client = Client()
        self.editor_client.login(username='******', password='******')

        # Editor with not editing permissions
        self.editor_no_permissions = User.objects.create_user(
            'editor_no_perm', '*****@*****.**', 'editor_no_perm'
        )
        self.editor_no_permissions.is_staff = True
        self.editor_no_permissions.save()
        self.editor_no_permissions_client = Client()
        self.editor_no_permissions_client.login(
            username='******', password='******'
        )

        # Page version.
        self.page_version = Version.objects.create(
            content_type=ContentType.objects.get_for_model(Page), object_id=self.page.id,
            template_name='glitter/sample.html', owner=self.editor
        )

        self.page_admin = PageAdmin(Page, AdminSite())

        self.change_obj_url = reverse('admin:glitter_pages_page_change', args=(self.page.id,))
        self.add_obj_url = reverse('admin:glitter_pages_page_add')
        self.page_redirect_url = reverse('admin:glitter_pages_page_redirect', args=(self.page.id,))
Example #3
0
class TestAdmin(TestCase):

    def setUp(self):

        # Permissions
        self.edit_permissions = Permission.objects.get_by_natural_key(
            'edit_page', 'glitter_pages', 'page'
        )

        # Page
        self.page = Page.objects.create(url='/test/', title='Test page')

        # Information about model
        self.info = self.page._meta.app_label, self.page._meta.model_name

        # Superuser
        User = get_user_model()
        self.super_user = User.objects.create_superuser('test', '*****@*****.**', 'test')
        self.super_user_client = Client()
        self.super_user_client.login(username='******', password='******')

        # Editor with editing permissions
        self.editor = User.objects.create_user('editor', '*****@*****.**', 'editor')
        self.editor.is_staff = True
        self.editor.user_permissions.add(self.edit_permissions)
        self.editor.save()
        self.editor_client = Client()
        self.editor_client.login(username='******', password='******')

        # Editor with not editing permissions
        self.editor_no_permissions = User.objects.create_user(
            'editor_no_perm', '*****@*****.**', 'editor_no_perm'
        )
        self.editor_no_permissions.is_staff = True
        self.editor_no_permissions.save()
        self.editor_no_permissions_client = Client()
        self.editor_no_permissions_client.login(
            username='******', password='******'
        )

        # Page version.
        self.page_version = Version.objects.create(
            content_type=ContentType.objects.get_for_model(Page), object_id=self.page.id,
            template_name='glitter/sample.html', owner=self.editor
        )

        self.page_admin = PageAdmin(Page, AdminSite())

        self.change_obj_url = reverse('admin:glitter_pages_page_change', args=(self.page.id,))
        self.add_obj_url = reverse('admin:glitter_pages_page_add')
        self.page_redirect_url = reverse('admin:glitter_pages_page_redirect', args=(self.page.id,))

    def test_data_for_change_and_add_response(self):
        response_data = {'url': '/testing2/', 'title': 'Testing2'}
        response_save_and_edit_data = {
            'url': '/testing223/', 'title': 'Testing2', '_saveandedit': True
        }
        response_save_and_continue_edit = {
            'url': '/testing223/', 'title': 'Testing2', '_continue': True
        }
        return response_data, response_save_and_edit_data, response_save_and_continue_edit

    def test_admin_url(self):
        self.page_admin.view_url(self.page)

    def test_unpublish_count(self):
        self.page_admin.admin_unpublished_count(self.page)

    def test_response_change(self):
        response_data, response_save_and_edit_data, response_save_and_continue_edit = (
            self.test_data_for_change_and_add_response()
        )
        self.super_user_client.post(self.change_obj_url, response_save_and_edit_data)
        self.super_user_client.post(self.change_obj_url, response_data)
        self.super_user_client.post(self.change_obj_url, response_save_and_continue_edit)
        self.super_user_client.get(self.page_redirect_url)

    def test_response_add(self):
        response_data, response_save_and_edit_data, response_save_and_continue_edit = (
            self.test_data_for_change_and_add_response()
        )
        response_data['_saveasnew'] = 'Testing'
        self.super_user_client.post(self.add_obj_url, response_data)
        self.super_user_client.post(self.add_obj_url, response_save_and_edit_data)
        self.super_user_client.post(self.add_obj_url, response_save_and_continue_edit)
        self.super_user_client.get(self.page_redirect_url)

    def test_show_login(self):
        self.factory = RequestFactory()
        request = self.factory.get('/')

        self.assertEqual(
            self.page_admin.get_fields(request),
            ['url', 'title', 'parent', 'login_required', 'show_in_navigation']
        )
Example #4
0
class TestPermissions(TestCase):
    def setUp(self):
        # Permissions for objects we're testing
        self.edit_page = Permission.objects.get_by_natural_key(
            'edit_page', 'glitter_pages', 'page'
        )
        self.publish_page = Permission.objects.get_by_natural_key(
            'publish_page', 'glitter_pages', 'page'
        )
        self.edit_book = Permission.objects.get_by_natural_key(
            'edit_book', 'sample', 'book'
        )
        self.publish_book = Permission.objects.get_by_natural_key(
            'publish_book', 'sample', 'book'
        )

        # Superuser
        User = get_user_model()
        self.superuser = User.objects.create_superuser(
            username='******', email='', password=None
        )

        # Editor with editing permissions
        self.editor = User.objects.create_user(username='******', email='', password=None)
        self.editor.is_staff = True
        self.editor.save()
        self.editor.user_permissions.add(self.edit_page, self.edit_book)

        # Publisher with edit and publish permissions
        self.publisher = User.objects.create_user(username='******', email='', password=None)
        self.publisher.is_staff = True
        self.publisher.save()
        self.publisher.user_permissions.add(
            self.edit_page, self.publish_page, self.edit_book, self.publish_book
        )

        # Staff with no editing permissions
        self.staff = User.objects.create_user(username='******', email='', password=None)
        self.staff.is_staff = True
        self.staff.save()

        # Page with an unsaved page version
        self.page = Page.objects.create(url='/test/', title='Test page')
        self.page_version = Version.objects.create(
            content_type=ContentType.objects.get_for_model(Page),
            object_id=self.page.id,
            template_name='glitter/sample.html',
            owner=self.editor,
        )
        self.page_admin = PageAdmin(Page, AdminSite())

        # Sample model
        self.book = Book.objects.create(title='Hello')
        self.book_admin = PageAdmin(Book, AdminSite())

    def test_edit_permission(self):
        # Only people with glitter_pages.edit_page have edit permission
        request = HttpRequest()

        request.user = self.editor
        self.assertTrue(self.page_admin.has_edit_permission(request=request))

        request.user = self.staff
        self.assertFalse(self.page_admin.has_edit_permission(request=request))

    def test_edit_version(self):
        # Only the creator of an unsaved version can edit it
        request = HttpRequest()

        request.user = self.superuser
        self.assertFalse(self.page_admin.has_edit_permission(
            request=request, version=self.page_version
        ))

        request.user = self.editor
        self.assertTrue(self.page_admin.has_edit_permission(
            request=request, version=self.page_version
        ))

    def test_publish_permission(self):
        # Only people with glitter_pages.publish_page have publish permission
        request = HttpRequest()

        request.user = self.publisher
        self.assertTrue(self.page_admin.has_publish_permission(request=request))

        request.user = self.staff
        self.assertFalse(self.page_admin.has_publish_permission(request=request))

    def test_book_model(self):
        # Test that permissions work with different types of models
        request = HttpRequest()

        request.user = self.editor
        self.assertTrue(self.book_admin.has_edit_permission(request=request))

        request.user = self.publisher
        self.assertTrue(self.book_admin.has_publish_permission(request=request))

        request.user = self.staff
        self.assertFalse(self.book_admin.has_edit_permission(request=request))
        self.assertFalse(self.book_admin.has_publish_permission(request=request))