Loading tests/regressiontests/admin_views/admin.py +38 −6 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated, UndeletableObject, UserMessenger, Simple, Choice) RelatedPrepopulated, UndeletableObject, UserMessenger, Simple, Choice, ShortMessage, Telegram) def callable_year(dt_value): Loading Loading @@ -439,25 +440,54 @@ class FoodDeliveryAdmin(admin.ModelAdmin): list_editable = ('driver', 'restaurant') class CoverLetterAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses defer(), to test verbose_name display in messages shown after adding/editing CoverLetter instances. Note that the CoverLetter model defines a __unicode__ method. For testing fix for ticket #14529. """ def queryset(self, request): return super(CoverLetterAdmin, self).queryset(request).defer('date_written') class PaperAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses only(), to test verbose_name display in messages shown after adding Paper instances. verbose_name display in messages shown after adding/editing Paper instances. For testing fix for ticket #14529. """ def queryset(self, request): return super(PaperAdmin, self).queryset(request).only('title') class CoverLetterAdmin(admin.ModelAdmin): class ShortMessageAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses defer(), to test verbose_name display in messages shown after adding/editing ShortMessage instances. For testing fix for ticket #14529. """ def queryset(self, request): return super(ShortMessageAdmin, self).queryset(request).defer('timestamp') class TelegramAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses only(), to test verbose_name display in messages shown after adding CoverLetter instances. Note that the CoverLetter model defines a __unicode__ method. verbose_name display in messages shown after adding/editing Telegram instances. Note that the Telegram model defines a __unicode__ method. For testing fix for ticket #14529. """ def queryset(self, request): return super(CoverLetterAdmin, self).queryset(request).defer('date_written') return super(TelegramAdmin, self).queryset(request).only('title') class StoryForm(forms.ModelForm): Loading Loading @@ -665,6 +695,8 @@ site.register(FoodDelivery, FoodDeliveryAdmin) site.register(RowLevelChangePermissionModel, RowLevelChangePermissionModelAdmin) site.register(Paper, PaperAdmin) site.register(CoverLetter, CoverLetterAdmin) site.register(ShortMessage, ShortMessageAdmin) site.register(Telegram, TelegramAdmin) site.register(Story, StoryAdmin) site.register(OtherStory, OtherStoryAdmin) site.register(Report, ReportAdmin) Loading tests/regressiontests/admin_views/models.py +18 −4 Original line number Diff line number Diff line Loading @@ -548,18 +548,32 @@ class FoodDelivery(models.Model): unique_together = (("driver", "restaurant"),) @python_2_unicode_compatible class CoverLetter(models.Model): author = models.CharField(max_length=30) date_written = models.DateField(null=True, blank=True) def __str__(self): return self.author class Paper(models.Model): title = models.CharField(max_length=30) author = models.CharField(max_length=30, blank=True, null=True) class ShortMessage(models.Model): content = models.CharField(max_length=140) timestamp = models.DateTimeField(null=True, blank=True) @python_2_unicode_compatible class CoverLetter(models.Model): author = models.CharField(max_length=30) date_written = models.DateField(null=True, blank=True) class Telegram(models.Model): title = models.CharField(max_length=30) date_sent = models.DateField(null=True, blank=True) def __str__(self): return self.author return self.title class Story(models.Model): Loading tests/regressiontests/admin_views/tests.py +152 −11 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ from .models import (Article, BarAccount, CustomArticle, EmptyModel, FooAccount, OtherStory, ComplexSortedPerson, Parent, Child, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, MainPrepopulated, RelatedPrepopulated, UnorderedObject, Simple, UndeletableObject, Choice) Simple, UndeletableObject, Choice, ShortMessage, Telegram) ERROR_MESSAGE = "Please enter the correct username and password \ Loading Loading @@ -2505,27 +2505,93 @@ class AdminCustomQuerysetTest(TestCase): else: self.assertEqual(response.status_code, 404) def test_add_model_modeladmin_defer_qs(self): # Test for #14529. defer() is used in ModelAdmin.queryset() # model has __unicode__ method self.assertEqual(CoverLetter.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "author": "Candidate, Best", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/coverletter/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(CoverLetter.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The cover letter "Candidate, Best" was added successfully.</li>', html=True ) # model has no __unicode__ method self.assertEqual(ShortMessage.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "content": "What's this SMS thing?", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/shortmessage/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(ShortMessage.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The short message "ShortMessage object" was added successfully.</li>', html=True ) def test_add_model_modeladmin_only_qs(self): # only() is used in ModelAdmin.queryset() p = Paper.objects.create(title="My Paper Title") self.assertEqual(Paper.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/paper/%s/' % p.pk) # Test for #14529. only() is used in ModelAdmin.queryset() # model has __unicode__ method self.assertEqual(Telegram.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "title": "Urgent telegram", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/telegram/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Telegram.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The telegram "Urgent telegram" was added successfully.</li>', html=True ) # model has no __unicode__ method self.assertEqual(Paper.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "title": "My Modified Paper Title", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/paper/%s/' % p.pk, response = self.client.post('/test_admin/admin/admin_views/paper/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) # Message should contain non-ugly model name. Instance representation is set by six.text_type() (ugly) self.assertContains(response, '<li class="info">The paper "Paper_Deferred_author object" was changed successfully.</li>', html=True) self.assertEqual(Paper.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The paper "Paper object" was added successfully.</li>', html=True ) def test_edit_model_modeladmin_defer_qs(self): # Test for #14529. defer() is used in ModelAdmin.queryset() # defer() is used in ModelAdmin.queryset() # model has __unicode__ method cl = CoverLetter.objects.create(author="John Doe") self.assertEqual(CoverLetter.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "author": "John Doe II", "_save": "Save", Loading @@ -2533,8 +2599,83 @@ class AdminCustomQuerysetTest(TestCase): response = self.client.post('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) # Message should contain non-ugly model name. Instance representation is set by model's __unicode__() self.assertContains(response, '<li class="info">The cover letter "John Doe II" was changed successfully.</li>', html=True) self.assertEqual(CoverLetter.objects.count(), 1) # Message should contain non-ugly model verbose name. Instance # representation is set by model's __unicode__() self.assertContains( response, '<li class="info">The cover letter "John Doe II" was changed successfully.</li>', html=True ) # model has no __unicode__ method sm = ShortMessage.objects.create(content="This is expensive") self.assertEqual(ShortMessage.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/shortmessage/%s/' % sm.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "content": "Too expensive", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/shortmessage/%s/' % sm.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(ShortMessage.objects.count(), 1) # Message should contain non-ugly model verbose name. The ugly(!) # instance representation is set by six.text_type() self.assertContains( response, '<li class="info">The short message "ShortMessage_Deferred_timestamp object" was changed successfully.</li>', html=True ) def test_edit_model_modeladmin_only_qs(self): # Test for #14529. only() is used in ModelAdmin.queryset() # model has __unicode__ method t = Telegram.objects.create(title="Frist Telegram") self.assertEqual(Telegram.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/telegram/%s/' % t.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "title": "Telegram without typo", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/telegram/%s/' % t.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Telegram.objects.count(), 1) # Message should contain non-ugly model verbose name. The instance # representation is set by model's __unicode__() self.assertContains( response, '<li class="info">The telegram "Telegram without typo" was changed successfully.</li>', html=True ) # model has no __unicode__ method p = Paper.objects.create(title="My Paper Title") self.assertEqual(Paper.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/paper/%s/' % p.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "title": "My Modified Paper Title", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/paper/%s/' % p.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Paper.objects.count(), 1) # Message should contain non-ugly model verbose name. The ugly(!) # instance representation is set by six.text_type() self.assertContains( response, '<li class="info">The paper "Paper_Deferred_author object" was changed successfully.</li>', html=True ) @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) Loading Loading
tests/regressiontests/admin_views/admin.py +38 −6 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ from .models import (Article, Chapter, Account, Media, Child, Parent, Picture, Album, Question, Answer, ComplexSortedPerson, PrePopulatedPostLargeSlug, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, Color2, UnorderedObject, MainPrepopulated, RelatedPrepopulated, UndeletableObject, UserMessenger, Simple, Choice) RelatedPrepopulated, UndeletableObject, UserMessenger, Simple, Choice, ShortMessage, Telegram) def callable_year(dt_value): Loading Loading @@ -439,25 +440,54 @@ class FoodDeliveryAdmin(admin.ModelAdmin): list_editable = ('driver', 'restaurant') class CoverLetterAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses defer(), to test verbose_name display in messages shown after adding/editing CoverLetter instances. Note that the CoverLetter model defines a __unicode__ method. For testing fix for ticket #14529. """ def queryset(self, request): return super(CoverLetterAdmin, self).queryset(request).defer('date_written') class PaperAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses only(), to test verbose_name display in messages shown after adding Paper instances. verbose_name display in messages shown after adding/editing Paper instances. For testing fix for ticket #14529. """ def queryset(self, request): return super(PaperAdmin, self).queryset(request).only('title') class CoverLetterAdmin(admin.ModelAdmin): class ShortMessageAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses defer(), to test verbose_name display in messages shown after adding/editing ShortMessage instances. For testing fix for ticket #14529. """ def queryset(self, request): return super(ShortMessageAdmin, self).queryset(request).defer('timestamp') class TelegramAdmin(admin.ModelAdmin): """ A ModelAdmin with a custom queryset() method that uses only(), to test verbose_name display in messages shown after adding CoverLetter instances. Note that the CoverLetter model defines a __unicode__ method. verbose_name display in messages shown after adding/editing Telegram instances. Note that the Telegram model defines a __unicode__ method. For testing fix for ticket #14529. """ def queryset(self, request): return super(CoverLetterAdmin, self).queryset(request).defer('date_written') return super(TelegramAdmin, self).queryset(request).only('title') class StoryForm(forms.ModelForm): Loading Loading @@ -665,6 +695,8 @@ site.register(FoodDelivery, FoodDeliveryAdmin) site.register(RowLevelChangePermissionModel, RowLevelChangePermissionModelAdmin) site.register(Paper, PaperAdmin) site.register(CoverLetter, CoverLetterAdmin) site.register(ShortMessage, ShortMessageAdmin) site.register(Telegram, TelegramAdmin) site.register(Story, StoryAdmin) site.register(OtherStory, OtherStoryAdmin) site.register(Report, ReportAdmin) Loading
tests/regressiontests/admin_views/models.py +18 −4 Original line number Diff line number Diff line Loading @@ -548,18 +548,32 @@ class FoodDelivery(models.Model): unique_together = (("driver", "restaurant"),) @python_2_unicode_compatible class CoverLetter(models.Model): author = models.CharField(max_length=30) date_written = models.DateField(null=True, blank=True) def __str__(self): return self.author class Paper(models.Model): title = models.CharField(max_length=30) author = models.CharField(max_length=30, blank=True, null=True) class ShortMessage(models.Model): content = models.CharField(max_length=140) timestamp = models.DateTimeField(null=True, blank=True) @python_2_unicode_compatible class CoverLetter(models.Model): author = models.CharField(max_length=30) date_written = models.DateField(null=True, blank=True) class Telegram(models.Model): title = models.CharField(max_length=30) date_sent = models.DateField(null=True, blank=True) def __str__(self): return self.author return self.title class Story(models.Model): Loading
tests/regressiontests/admin_views/tests.py +152 −11 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ from .models import (Article, BarAccount, CustomArticle, EmptyModel, FooAccount, OtherStory, ComplexSortedPerson, Parent, Child, AdminOrderedField, AdminOrderedModelMethod, AdminOrderedAdminMethod, AdminOrderedCallable, Report, MainPrepopulated, RelatedPrepopulated, UnorderedObject, Simple, UndeletableObject, Choice) Simple, UndeletableObject, Choice, ShortMessage, Telegram) ERROR_MESSAGE = "Please enter the correct username and password \ Loading Loading @@ -2505,27 +2505,93 @@ class AdminCustomQuerysetTest(TestCase): else: self.assertEqual(response.status_code, 404) def test_add_model_modeladmin_defer_qs(self): # Test for #14529. defer() is used in ModelAdmin.queryset() # model has __unicode__ method self.assertEqual(CoverLetter.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "author": "Candidate, Best", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/coverletter/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(CoverLetter.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The cover letter "Candidate, Best" was added successfully.</li>', html=True ) # model has no __unicode__ method self.assertEqual(ShortMessage.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "content": "What's this SMS thing?", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/shortmessage/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(ShortMessage.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The short message "ShortMessage object" was added successfully.</li>', html=True ) def test_add_model_modeladmin_only_qs(self): # only() is used in ModelAdmin.queryset() p = Paper.objects.create(title="My Paper Title") self.assertEqual(Paper.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/paper/%s/' % p.pk) # Test for #14529. only() is used in ModelAdmin.queryset() # model has __unicode__ method self.assertEqual(Telegram.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "title": "Urgent telegram", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/telegram/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Telegram.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The telegram "Urgent telegram" was added successfully.</li>', html=True ) # model has no __unicode__ method self.assertEqual(Paper.objects.count(), 0) # Emulate model instance creation via the admin post_data = { "title": "My Modified Paper Title", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/paper/%s/' % p.pk, response = self.client.post('/test_admin/admin/admin_views/paper/add/', post_data, follow=True) self.assertEqual(response.status_code, 200) # Message should contain non-ugly model name. Instance representation is set by six.text_type() (ugly) self.assertContains(response, '<li class="info">The paper "Paper_Deferred_author object" was changed successfully.</li>', html=True) self.assertEqual(Paper.objects.count(), 1) # Message should contain non-ugly model verbose name self.assertContains( response, '<li class="info">The paper "Paper object" was added successfully.</li>', html=True ) def test_edit_model_modeladmin_defer_qs(self): # Test for #14529. defer() is used in ModelAdmin.queryset() # defer() is used in ModelAdmin.queryset() # model has __unicode__ method cl = CoverLetter.objects.create(author="John Doe") self.assertEqual(CoverLetter.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "author": "John Doe II", "_save": "Save", Loading @@ -2533,8 +2599,83 @@ class AdminCustomQuerysetTest(TestCase): response = self.client.post('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) # Message should contain non-ugly model name. Instance representation is set by model's __unicode__() self.assertContains(response, '<li class="info">The cover letter "John Doe II" was changed successfully.</li>', html=True) self.assertEqual(CoverLetter.objects.count(), 1) # Message should contain non-ugly model verbose name. Instance # representation is set by model's __unicode__() self.assertContains( response, '<li class="info">The cover letter "John Doe II" was changed successfully.</li>', html=True ) # model has no __unicode__ method sm = ShortMessage.objects.create(content="This is expensive") self.assertEqual(ShortMessage.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/shortmessage/%s/' % sm.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "content": "Too expensive", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/shortmessage/%s/' % sm.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(ShortMessage.objects.count(), 1) # Message should contain non-ugly model verbose name. The ugly(!) # instance representation is set by six.text_type() self.assertContains( response, '<li class="info">The short message "ShortMessage_Deferred_timestamp object" was changed successfully.</li>', html=True ) def test_edit_model_modeladmin_only_qs(self): # Test for #14529. only() is used in ModelAdmin.queryset() # model has __unicode__ method t = Telegram.objects.create(title="Frist Telegram") self.assertEqual(Telegram.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/telegram/%s/' % t.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "title": "Telegram without typo", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/telegram/%s/' % t.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Telegram.objects.count(), 1) # Message should contain non-ugly model verbose name. The instance # representation is set by model's __unicode__() self.assertContains( response, '<li class="info">The telegram "Telegram without typo" was changed successfully.</li>', html=True ) # model has no __unicode__ method p = Paper.objects.create(title="My Paper Title") self.assertEqual(Paper.objects.count(), 1) response = self.client.get('/test_admin/admin/admin_views/paper/%s/' % p.pk) self.assertEqual(response.status_code, 200) # Emulate model instance edit via the admin post_data = { "title": "My Modified Paper Title", "_save": "Save", } response = self.client.post('/test_admin/admin/admin_views/paper/%s/' % p.pk, post_data, follow=True) self.assertEqual(response.status_code, 200) self.assertEqual(Paper.objects.count(), 1) # Message should contain non-ugly model verbose name. The ugly(!) # instance representation is set by six.text_type() self.assertContains( response, '<li class="info">The paper "Paper_Deferred_author object" was changed successfully.</li>', html=True ) @override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) Loading