debian-django-import-export/tests/core/tests/test_permissions.py

118 lines
4.0 KiB
Python

from __future__ import unicode_literals
import os.path
from django.contrib.auth.models import Permission
from django.test.utils import override_settings
from django.test.testcases import TestCase
from django.contrib.auth.models import User
class ImportExportPermissionTest(TestCase):
def setUp(self):
user = User.objects.create_user('admin', 'admin@example.com',
'password')
user.is_staff = True
user.is_superuser = False
user.save()
self.user = user
self.client.login(username='admin', password='password')
def set_user_book_model_permission(self, action):
permission = Permission.objects.get(codename="%s_book" % action)
self.user.user_permissions.add(permission)
@override_settings(IMPORT_EXPORT_IMPORT_PERMISSION_CODE='change')
def test_import(self):
# user has no permission to import
response = self.client.get('/admin/core/book/import/')
self.assertEqual(response.status_code, 403)
# POST the import form
input_format = '0'
filename = os.path.join(
os.path.dirname(__file__),
os.path.pardir,
'exports',
'books.csv')
with open(filename, "rb") as f:
data = {
'input_format': input_format,
'import_file': f,
}
response = self.client.post('/admin/core/book/import/', data)
self.assertEqual(response.status_code, 403)
response = self.client.post('/admin/core/book/process_import/', {})
self.assertEqual(response.status_code, 403)
# user has sufficient permission to import
self.set_user_book_model_permission('change')
response = self.client.get('/admin/core/book/import/')
self.assertEqual(response.status_code, 200)
# POST the import form
input_format = '0'
filename = os.path.join(
os.path.dirname(__file__),
os.path.pardir,
'exports',
'books.csv')
with open(filename, "rb") as f:
data = {
'input_format': input_format,
'import_file': f,
}
response = self.client.post('/admin/core/book/import/', data)
self.assertEqual(response.status_code, 200)
confirm_form = response.context['confirm_form']
data = confirm_form.initial
response = self.client.post('/admin/core/book/process_import/', data)
self.assertEqual(response.status_code, 302)
@override_settings(IMPORT_EXPORT_EXPORT_PERMISSION_CODE='change')
def test_import_with_permission_set(self):
response = self.client.get('/admin/core/book/export/')
self.assertEqual(response.status_code, 403)
data = {'file_format': '0'}
response = self.client.post('/admin/core/book/export/', data)
self.assertEqual(response.status_code, 403)
self.set_user_book_model_permission('change')
response = self.client.get('/admin/core/book/export/')
self.assertEqual(response.status_code, 200)
data = {'file_format': '0'}
response = self.client.post('/admin/core/book/export/', data)
self.assertEqual(response.status_code, 200)
@override_settings(IMPORT_EXPORT_EXPORT_PERMISSION_CODE='add')
def test_check_export_button(self):
self.set_user_book_model_permission('change')
response = self.client.get('/admin/core/book/')
widget = "import_link"
self.assertIn(widget, response.content.decode())
widget = "export_link"
self.assertNotIn(widget, response.content.decode())
@override_settings(IMPORT_EXPORT_IMPORT_PERMISSION_CODE='add')
def test_check_import_button(self):
self.set_user_book_model_permission('change')
response = self.client.get('/admin/core/book/')
widget = "import_link"
self.assertNotIn(widget, response.content.decode())
widget = "export_link"
self.assertIn(widget, response.content.decode())