diff options
Diffstat (limited to 'tests/admin_views')
| -rw-r--r-- | tests/admin_views/admin.py | 19 | ||||
| -rw-r--r-- | tests/admin_views/models.py | 4 | ||||
| -rw-r--r-- | tests/admin_views/test_history_view.py | 45 | ||||
| -rw-r--r-- | tests/admin_views/tests.py | 2 |
4 files changed, 67 insertions, 3 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py index 8f0aaf843f..44333e893f 100644 --- a/tests/admin_views/admin.py +++ b/tests/admin_views/admin.py @@ -893,8 +893,27 @@ class CityInlineAdmin(admin.TabularInline): view_on_site = False +class StateAdminForm(forms.ModelForm): + nolabel_form_field = forms.BooleanField(required=False) + + class Meta: + model = State + fields = '__all__' + labels = {"name": "State name (from form's Meta.labels)"} + + @property + def changed_data(self): + data = super().changed_data + if data: + # Add arbitrary name to changed_data to test + # change message construction. + return data + ['not_a_form_field'] + return data + + class StateAdmin(admin.ModelAdmin): inlines = [CityInlineAdmin] + form = StateAdminForm class RestaurantInlineAdmin(admin.TabularInline): diff --git a/tests/admin_views/models.py b/tests/admin_views/models.py index 9ac3c53bab..a519f7395d 100644 --- a/tests/admin_views/models.py +++ b/tests/admin_views/models.py @@ -864,12 +864,12 @@ class EmptyModelMixin(models.Model): class State(models.Model): - name = models.CharField(max_length=100) + name = models.CharField(max_length=100, verbose_name='State verbose_name') class City(models.Model): state = models.ForeignKey(State, models.CASCADE) - name = models.CharField(max_length=100) + name = models.CharField(max_length=100, verbose_name='City verbose_name') def get_absolute_url(self): return '/dummy/%s/' % self.pk diff --git a/tests/admin_views/test_history_view.py b/tests/admin_views/test_history_view.py new file mode 100644 index 0000000000..fdcb9e5267 --- /dev/null +++ b/tests/admin_views/test_history_view.py @@ -0,0 +1,45 @@ +from django.contrib.admin.models import LogEntry +from django.contrib.auth.models import User +from django.test import TestCase, override_settings +from django.urls import reverse + +from .models import City, State + + +@override_settings(ROOT_URLCONF='admin_views.urls') +class AdminHistoryViewTests(TestCase): + + @classmethod + def setUpTestData(cls): + cls.superuser = User.objects.create_superuser( + username='super', password='secret', email='super@example.com', + ) + + def setUp(self): + self.client.force_login(self.superuser) + + def test_changed_message_uses_form_lables(self): + """ + Admin's model history change messages use form labels instead of + field names. + """ + state = State.objects.create(name='My State Name') + city = City.objects.create(name='My City Name', state=state) + change_dict = { + 'name': 'My State Name 2', + 'nolabel_form_field': True, + 'city_set-0-name': 'My City name 2', + 'city_set-0-id': city.pk, + 'city_set-TOTAL_FORMS': '3', + 'city_set-INITIAL_FORMS': '1', + 'city_set-MAX_NUM_FORMS': '0', + } + state_change_url = reverse('admin:admin_views_state_change', args=(state.pk,)) + self.client.post(state_change_url, change_dict) + logentry = LogEntry.objects.filter(content_type__model__iexact='state').latest('id') + self.assertEqual( + logentry.get_change_message(), + 'Changed State name (from form\'s Meta.labels), ' + 'nolabel_form_field and not_a_form_field. ' + 'Changed City verbose_name for city "%s".' % city + ) diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 87835eb37b..203551fa39 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -900,7 +900,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase): self.assertRedirects(response, reverse('admin:admin_views_readablepizza_changelist')) pizza_ctype = ContentType.objects.get_for_model(ReadablePizza, for_concrete_model=False) log = LogEntry.objects.filter(content_type=pizza_ctype, object_id=pizza.pk).first() - self.assertEqual(log.get_change_message(), 'Changed toppings.') + self.assertEqual(log.get_change_message(), 'Changed Toppings.') def test_allows_attributeerror_to_bubble_up(self): """ |
