156 lines
4.8 KiB
Python
156 lines
4.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from unittest import mock
|
|
|
|
from django.contrib import admin
|
|
from django.http import HttpRequest
|
|
from django.test import TestCase
|
|
|
|
from django_changelist_inline import ChangelistInlineModelAdmin
|
|
from django_changelist_inline.admin import InlineChangeList
|
|
from testing.factories import ThingFactory
|
|
from testing.models import RelatedThing
|
|
|
|
|
|
class ChangelistInlineModelAdminTestCase(TestCase):
|
|
def setUp(self):
|
|
self.thing = ThingFactory()
|
|
self.fake_request = mock.Mock(spec=HttpRequest)
|
|
|
|
def test_init(self):
|
|
# When
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# Then
|
|
self.assertEqual(model_admin.parent_instance, self.thing)
|
|
self.assertEqual(model_admin.list_editable, ())
|
|
self.assertEqual(model_admin.list_filter, ())
|
|
self.assertEqual(model_admin.search_fields, ())
|
|
self.assertIsNone(model_admin.date_hierarchy)
|
|
self.assertEqual(model_admin.sortable_by, ())
|
|
|
|
# Account for `search_help_text` attr added in Django 4.0
|
|
if hasattr(model_admin, 'search_help_text'):
|
|
self.assertIsNone(model_admin.search_help_text)
|
|
|
|
@mock.patch('django.contrib.admin.ModelAdmin.get_actions')
|
|
def test_get_actions(self, mock_get_actions):
|
|
# Given
|
|
mock_get_actions.return_value = []
|
|
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# When
|
|
result = model_admin.get_actions(self.fake_request)
|
|
|
|
# Then
|
|
self.assertEqual(result, [])
|
|
self.assertFalse(mock_get_actions.called)
|
|
|
|
def test_get_changelist(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# When
|
|
result = model_admin.get_changelist(self.fake_request)
|
|
|
|
# Then
|
|
self.assertEqual(result, InlineChangeList)
|
|
|
|
def test_title(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# Then
|
|
self.assertEqual(
|
|
model_admin.title, RelatedThing._meta.verbose_name_plural,
|
|
)
|
|
|
|
def test_no_results_message(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# Then
|
|
self.assertEqual(
|
|
model_admin.no_results_message,
|
|
f'0 {RelatedThing._meta.verbose_name_plural}',
|
|
)
|
|
|
|
def test_get_add_url_no_add_permission(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
with mock.patch.object(model_admin, 'has_add_permission') as mock_has_add_permission:
|
|
mock_has_add_permission.return_value = False
|
|
|
|
# Then
|
|
self.assertIsNone(model_admin.get_add_url(self.fake_request))
|
|
|
|
mock_has_add_permission.assert_called_with(self.fake_request)
|
|
|
|
def test_get_add_url(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
with mock.patch.object(model_admin, 'has_add_permission') as mock_has_add_permission:
|
|
mock_has_add_permission.return_value = True
|
|
|
|
# Then
|
|
self.assertEqual(
|
|
model_admin.get_add_url(self.fake_request),
|
|
'/admin/testing/relatedthing/add/',
|
|
)
|
|
|
|
def test_get_show_all_url_no_view_permission(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
with mock.patch.object(model_admin, 'has_view_permission') as mock_has_view_permission:
|
|
mock_has_view_permission.return_value = False
|
|
|
|
# Then
|
|
self.assertIsNone(model_admin.get_show_all_url(self.fake_request))
|
|
|
|
mock_has_view_permission.assert_called_with(
|
|
self.fake_request, obj=None,
|
|
)
|
|
|
|
def test_get_show_all_url(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
with mock.patch.object(model_admin, 'has_view_permission') as mock_has_view_permission:
|
|
mock_has_view_permission.return_value = True
|
|
|
|
# Then
|
|
self.assertEqual(
|
|
model_admin.get_show_all_url(self.fake_request),
|
|
'/admin/testing/relatedthing/',
|
|
)
|
|
|
|
def test_get_toolbar_links(self):
|
|
# Given
|
|
model_admin = ChangelistInlineModelAdmin(
|
|
self.thing, RelatedThing, admin.site,
|
|
)
|
|
|
|
# Then
|
|
self.assertIsNone(model_admin.get_toolbar_links(self.fake_request))
|