Skip to content

Commit

Permalink
[#39] Fix KeyError when you try to delete on changelist_view.
Browse files Browse the repository at this point in the history
  • Loading branch information
lefterisnik committed Dec 27, 2017
1 parent 853aa20 commit ebb7004
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 17 deletions.
7 changes: 4 additions & 3 deletions admin_view_permission/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ def has_change_permission(self, request, obj=None):
self).has_change_permission(request, obj)
if change_permission or self.has_view_permission(request, obj):
return True
else:
return change_permission

return change_permission

def get_excluded_fields(self):
"""
Expand Down Expand Up @@ -302,7 +302,8 @@ def changelist_view(self, request, extra_context=None):
request, extra_context)
if self.has_view_permission(request) and \
not self._has_change_only_permission(request):
resp.context_data['cl'].formset = None
if hasattr(resp, 'context_data') and 'cl' in resp.context_data:
resp.context_data['cl'].formset = None

return resp

Expand Down
83 changes: 71 additions & 12 deletions tests/tests/functional/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ class TestModelAdminViews(AdminViewPermissionViewsTestCase):
# admin index

def test_index_view_from_simple_user(self):
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(reverse('admin:index'))

assert len(response.context['app_list']) == 1
Expand All @@ -33,17 +36,55 @@ def test_index_view_from_super_user(self):

# changeview

def test_changelist_view_from_simple_user(self):
self.client.login(username='simple_user', password='simple_user')
def test_changelist_view_get_from_user_with_v_perm_on_model1(self):
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_changelist' % ('test_app', 'testmodel1')),
)

assert response.status_code == 200
assert response.context['title'] == 'Select test model1 to view'

def test_changelist_view_from_simple_user_as_popup(self):
self.client.login(username='simple_user', password='simple_user')
def test_changelist_view_get_from_user_with_vd_perm_on_model1(self):
self.client.login(
username='user_with_vd_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_changelist' % ('test_app', 'testmodel1')),
)

assert response.status_code == 200
assert response.context['title'] == 'Select test model1 to view'

def test_changelist_view_post_from_user_with_vd_perm_on_model1(self):
obj = mommy.make('test_app.TestModel1')
data = {
'index': ['0'],
'action': ['delete_selected'],
'select_across': ['0'],
'_selected_action': [str(obj.pk)]
}
self.client.login(
username='user_with_vd_perm_on_model1',
password='simple_user',
)
response = self.client.post(
reverse('admin:%s_%s_changelist' % ('test_app', 'testmodel1')),
data=data,
)

assert response.status_code == 200
assert response.context['title'] == 'Are you sure?'

def test_changelist_view_get_from_simple_user_as_popup(self):
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
(reverse('admin:%s_%s_changelist' % ('test_app', 'testmodel1')) +
'?_to_field=id&_popup=1'),
Expand All @@ -52,7 +93,7 @@ def test_changelist_view_from_simple_user_as_popup(self):
assert response.status_code == 200
assert response.context['title'] == 'Select test model1'

def test_changelist_view_from_super_user(self):
def test_changelist_view_get_from_super_user(self):
self.client.login(username='super_user', password='super_user')
response = self.client.get(
reverse('admin:%s_%s_changelist' % ('test_app', 'testmodel1')),
Expand All @@ -65,7 +106,10 @@ def test_changelist_view_from_super_user(self):

def test_history_view_from_simple_user(self):
obj = mommy.make('test_app.TestModel1')
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_history' % ('test_app', 'testmodel1'),
args=(obj.pk,)),
Expand All @@ -86,7 +130,10 @@ def test_history_view_from_super_user(self):
# add

def test_add_view_from_simple_user(self):
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_add' % ('test_app', 'testmodel1')),
)
Expand All @@ -105,7 +152,10 @@ def test_add_view_from_super_user(self):

def test_change_view_from_simple_user(self):
obj = mommy.make('test_app.TestModel1')
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_change' % ('test_app', 'testmodel1'),
args=(obj.pk,)),
Expand All @@ -115,7 +165,10 @@ def test_change_view_from_simple_user(self):

def test_change_view_from_simple_user_unauthorized_post(self):
obj = mommy.make('test_app.TestModel1')
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
data = {
'var1': 'test',
'var2': 'test',
Expand Down Expand Up @@ -152,7 +205,10 @@ def test_change_view_from_super_user(self):

def test_delete_view_from_simple_user(self):
obj = mommy.make('test_app.TestModel1')
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.get(
reverse('admin:%s_%s_delete' % ('test_app', 'testmodel1'),
args=(obj.pk,)),
Expand All @@ -162,7 +218,10 @@ def test_delete_view_from_simple_user(self):

def test_delete_view_from_simple_user_unauthorized_post(self):
obj = mommy.make('test_app.TestModel1')
self.client.login(username='simple_user', password='simple_user')
self.client.login(
username='user_with_v_perm_on_model1',
password='simple_user',
)
response = self.client.post(
reverse('admin:%s_%s_delete' % ('test_app', 'testmodel1'),
args=(obj.pk,)),
Expand Down
16 changes: 14 additions & 2 deletions tests/tests/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,20 @@ class AdminViewPermissionViewsTestCase(DataMixin, TestCase):
def setUpTestData(cls):
super(AdminViewPermissionViewsTestCase, cls).setUpTestData()

cls.simple_user = create_simple_user(username='simple_user')
cls.simple_user.user_permissions.add(cls.view_permission_model1)
cls.user_with_v_perm_on_model1 = create_simple_user(
username='user_with_v_perm_on_model1',
)
cls.user_with_v_perm_on_model1.user_permissions.add(
cls.view_permission_model1,
)

cls.user_with_vd_perm_on_moedl1 = create_simple_user(
username='user_with_vd_perm_on_model1',
)
cls.user_with_vd_perm_on_moedl1.user_permissions.add(
cls.view_permission_model1,
cls.delete_permission_model1,
)

cls.super_user = create_super_user(username='super_user')

Expand Down

0 comments on commit ebb7004

Please sign in to comment.