118 lines
4.0 KiB
Python
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())
|