From 5e74d6cf0a4fa0caa51e77af77d55c2572f0917d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20G=C3=B3mez?= <alejandro@dialelo.com>
Date: Sat, 5 Apr 2014 15:11:40 +0200
Subject: [PATCH] [1.7.x] Fixed #21084 -- Used proxy model's content type for
 admin log entries.

Backport of 7a7f6fccae from master
---
 tests/admin_views/tests.py | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index e7f44f067e..6e0c08c1ec 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -54,7 +54,7 @@ from .models import (Article, BarAccount, CustomArticle, EmptyModel, FooAccount,
     Report, MainPrepopulated, RelatedPrepopulated, UnorderedObject,
     Simple, UndeletableObject, UnchangeableObject, Choice, ShortMessage,
     Telegram, Pizza, Topping, FilteredManager, City, Restaurant, Worker,
-    ParentWithDependentChildren, Character, FieldOverridePost)
+    ParentWithDependentChildren, Character, FieldOverridePost, Color2)
 from .admin import site, site2, CityAdmin
 
 
@@ -669,6 +669,38 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
         with self.assertRaises(NoReverseMatch):
             reverse('admin:app_list', args=('admin_views2',))
 
+    def test_proxy_model_content_type_is_used_for_log_entries(self):
+        """
+        Log entries for proxy models should have the proxy model's content
+        type.
+
+        Regression test for #21084.
+        """
+        color2_content_type = ContentType.objects.get_for_model(Color2, for_concrete_model=False)
+
+        # add
+        color2_add_url = reverse('admin:admin_views_color2_add')
+        self.client.post(color2_add_url, {'value': 'orange'})
+
+        color2_addition_log = LogEntry.objects.all()[0]
+        self.assertEqual(color2_content_type, color2_addition_log.content_type)
+
+        # change
+        color_id = color2_addition_log.object_id
+        color2_change_url = reverse('admin:admin_views_color2_change', args=(color_id))
+
+        self.client.post(color2_change_url, {'value': 'blue'})
+
+        color2_change_log = LogEntry.objects.all()[0]
+        self.assertEqual(color2_content_type, color2_change_log.content_type)
+
+        # delete
+        color2_delete_url = reverse('admin:admin_views_color2_delete', args=(color_id))
+        self.client.post(color2_delete_url)
+
+        color2_delete_log = LogEntry.objects.all()[0]
+        self.assertEqual(color2_content_type, color2_delete_log.content_type)
+
 
 @override_settings(TEMPLATE_DIRS=ADMIN_VIEW_TEMPLATES_DIR)
 class AdminCustomTemplateTests(AdminViewBasicTestCase):