1
0
Fork 0
django-changelist-inline/tests/admin/test_ChangelistInline.py

107 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
from unittest import mock
from django.contrib import admin
from django.http import HttpRequest, QueryDict
from django.test import TestCase
from django_changelist_inline.admin import (
ChangelistInline,
ChangelistInlineModelAdmin,
InlineChangeList,
)
from testing.factories import ThingFactory
from testing.models import RelatedThing, Thing
class RelatedThingChangelistInline(ChangelistInline):
model = RelatedThing
class ChangelistModelAdmin(ChangelistInlineModelAdmin):
pass
class ChangelistInlineTestCase(TestCase):
def test_init(self):
# When
changelist_inline = RelatedThingChangelistInline(Thing, admin.site)
# Then
self.assertIsNone(changelist_inline.request)
self.assertIsNone(changelist_inline.changelist_model_admin)
def test_bind(self):
# Given
fake_request = mock.Mock(spec=HttpRequest)
fake_request.GET = QueryDict('q=test&data__has_key=test&p=2&o=-1')
thing = ThingFactory()
changelist_inline = RelatedThingChangelistInline(Thing, admin.site)
with mock.patch.object(changelist_inline, 'ChangelistModelAdmin') as mock_changelist_model_admin:
fake_changelist_model_admin = mock.Mock(
spec=RelatedThingChangelistInline.ChangelistModelAdmin,
)
mock_changelist_model_admin.return_value = fake_changelist_model_admin
# When
changelist_inline.bind(fake_request, thing)
# Then
self.assertNotEqual(changelist_inline.request, fake_request)
self.assertIsInstance(changelist_inline.request, HttpRequest)
self.assertEqual(len(changelist_inline.request.GET), 0)
self.assertEqual(len(changelist_inline.request.POST), 0)
self.assertEqual(
changelist_inline.changelist_model_admin,
fake_changelist_model_admin,
)
mock_changelist_model_admin.assert_called_with(
thing, RelatedThing, admin.site,
)
def test_changelist_cant_view(self):
# Given
fake_request = mock.Mock(spec=HttpRequest)
thing = ThingFactory()
changelist_inline = RelatedThingChangelistInline(Thing, admin.site)
changelist_inline.bind(fake_request, thing)
with mock.patch.object(changelist_inline.changelist_model_admin, 'has_view_or_change_permission') as mock_has_view_or_change_permission: # noqa: E501
mock_has_view_or_change_permission.return_value = False
# Then
self.assertIsNone(changelist_inline.changelist)
mock_has_view_or_change_permission.assert_called_with(
changelist_inline.request, obj=None,
)
def test_changelist(self):
# Given
fake_request = mock.Mock(spec=HttpRequest)
thing = ThingFactory()
changelist_inline = RelatedThingChangelistInline(Thing, admin.site)
changelist_inline.bind(fake_request, thing)
with mock.patch.object(changelist_inline.changelist_model_admin, 'has_view_or_change_permission') as mock_has_view_or_change_permission: # noqa: E501
with mock.patch.object(changelist_inline.changelist_model_admin, 'get_changelist_instance') as mock_get_changelist_instance: # noqa: E501
fake_changelist_instance = mock.Mock(spec=InlineChangeList)
mock_has_view_or_change_permission.return_value = True
mock_get_changelist_instance.return_value = fake_changelist_instance
# Then
self.assertEqual(
changelist_inline.changelist, fake_changelist_instance,
)
mock_get_changelist_instance.assert_called_with(
changelist_inline.request,
)