mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	git-svn-id: http://code.djangoproject.com/svn/django/trunk@14803 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			122 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.contrib.admin.helpers import InlineAdminForm
 | |
| from django.contrib.contenttypes.models import ContentType
 | |
| from django.test import TestCase
 | |
| 
 | |
| # local test models
 | |
| from models import (Holder, Inner, InnerInline, Holder2, Inner2, Holder3,
 | |
|     Inner3, Person, OutfitItem, Fashionista, Teacher, Parent, Child)
 | |
| 
 | |
| 
 | |
| class TestInline(TestCase):
 | |
|     fixtures = ['admin-views-users.xml']
 | |
| 
 | |
|     def setUp(self):
 | |
|         holder = Holder(dummy=13)
 | |
|         holder.save()
 | |
|         Inner(dummy=42, holder=holder).save()
 | |
|         self.change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
 | |
| 
 | |
|         result = self.client.login(username='super', password='secret')
 | |
|         self.assertEqual(result, True)
 | |
| 
 | |
|     def tearDown(self):
 | |
|         self.client.logout()
 | |
| 
 | |
|     def test_can_delete(self):
 | |
|         """
 | |
|         can_delete should be passed to inlineformset factory.
 | |
|         """
 | |
|         response = self.client.get(self.change_url)
 | |
|         inner_formset = response.context[-1]['inline_admin_formsets'][0].formset
 | |
|         expected = InnerInline.can_delete
 | |
|         actual = inner_formset.can_delete
 | |
|         self.assertEqual(expected, actual, 'can_delete must be equal')
 | |
| 
 | |
|     def test_readonly_stacked_inline_label(self):
 | |
|         """Bug #13174."""
 | |
|         holder = Holder.objects.create(dummy=42)
 | |
|         inner = Inner.objects.create(holder=holder, dummy=42, readonly='')
 | |
|         response = self.client.get('/test_admin/admin/admin_inlines/holder/%i/'
 | |
|                                    % holder.id)
 | |
|         self.assertContains(response, '<label>Inner readonly label:</label>')
 | |
| 
 | |
|     def test_many_to_many_inlines(self):
 | |
|         "Autogenerated many-to-many inlines are displayed correctly (#13407)"
 | |
|         response = self.client.get('/test_admin/admin/admin_inlines/author/add/')
 | |
|         # The heading for the m2m inline block uses the right text
 | |
|         self.assertContains(response, '<h2>Author-book relationships</h2>')
 | |
|         # The "add another" label is correct
 | |
|         self.assertContains(response, 'Add another Author-Book Relationship')
 | |
|         # The '+' is dropped from the autogenerated form prefix (Author_books+)
 | |
|         self.assertContains(response, 'id="id_Author_books-TOTAL_FORMS"')
 | |
| 
 | |
|     def test_inline_primary(self):
 | |
|         person = Person.objects.create(firstname='Imelda')
 | |
|         item = OutfitItem.objects.create(name='Shoes')
 | |
|         # Imelda likes shoes, but can't cary her own bags.
 | |
|         data = {
 | |
|             'shoppingweakness_set-TOTAL_FORMS': 1,
 | |
|             'shoppingweakness_set-INITIAL_FORMS': 0,
 | |
|             'shoppingweakness_set-MAX_NUM_FORMS': 0,
 | |
|             '_save': u'Save',
 | |
|             'person': person.id,
 | |
|             'max_weight': 0,
 | |
|             'shoppingweakness_set-0-item': item.id,
 | |
|         }
 | |
|         response = self.client.post('/test_admin/admin/admin_inlines/fashionista/add/', data)
 | |
|         self.assertEqual(response.status_code, 302)
 | |
|         self.assertEqual(len(Fashionista.objects.filter(person__firstname='Imelda')), 1)
 | |
| 
 | |
| class TestInlineMedia(TestCase):
 | |
|     fixtures = ['admin-views-users.xml']
 | |
| 
 | |
|     def setUp(self):
 | |
| 
 | |
|         result = self.client.login(username='super', password='secret')
 | |
|         self.assertEqual(result, True)
 | |
| 
 | |
|     def tearDown(self):
 | |
|         self.client.logout()
 | |
| 
 | |
|     def test_inline_media_only_base(self):
 | |
|         holder = Holder(dummy=13)
 | |
|         holder.save()
 | |
|         Inner(dummy=42, holder=holder).save()
 | |
|         change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
 | |
|         response = self.client.get(change_url)
 | |
|         self.assertContains(response, 'my_awesome_admin_scripts.js')
 | |
| 
 | |
|     def test_inline_media_only_inline(self):
 | |
|         holder = Holder3(dummy=13)
 | |
|         holder.save()
 | |
|         Inner3(dummy=42, holder=holder).save()
 | |
|         change_url = '/test_admin/admin/admin_inlines/holder3/%i/' % holder.id
 | |
|         response = self.client.get(change_url)
 | |
|         self.assertContains(response, 'my_awesome_inline_scripts.js')
 | |
| 
 | |
|     def test_all_inline_media(self):
 | |
|         holder = Holder2(dummy=13)
 | |
|         holder.save()
 | |
|         Inner2(dummy=42, holder=holder).save()
 | |
|         change_url = '/test_admin/admin/admin_inlines/holder2/%i/' % holder.id
 | |
|         response = self.client.get(change_url)
 | |
|         self.assertContains(response, 'my_awesome_admin_scripts.js')
 | |
|         self.assertContains(response, 'my_awesome_inline_scripts.js')
 | |
| 
 | |
| class TestInlineAdminForm(TestCase):
 | |
| 
 | |
|     def test_immutable_content_type(self):
 | |
|         """Regression for #9362
 | |
|         The problem depends only on InlineAdminForm and its "original"
 | |
|         argument, so we can safely set the other arguments to None/{}. We just
 | |
|         need to check that the content_type argument of Child isn't altered by
 | |
|         the internals of the inline form."""
 | |
| 
 | |
|         sally = Teacher.objects.create(name='Sally')
 | |
|         john = Parent.objects.create(name='John')
 | |
|         joe = Child.objects.create(name='Joe', teacher=sally, parent=john)
 | |
| 
 | |
|         iaf = InlineAdminForm(None, None, {}, {}, joe)
 | |
|         parent_ct = ContentType.objects.get_for_model(Parent)
 | |
|         self.assertEqual(iaf.original.content_type, parent_ct)
 |