25
26
self.episode_pk = e.pk
26
27
m = Media(content_object=e, url='http://example.com/podcast.mp3')
29
self.mp3_media_pk = m.pk
31
m = Media(content_object=e, url='http://example.com/logo.png')
33
self.png_media_pk = m.pk
30
35
def tearDown(self):
31
36
self.client.logout()
32
37
settings.TEMPLATE_DEBUG = self.original_template_debug
34
39
def testBasicAddGet(self):
36
41
A smoke test to ensure GET on the add_view works.
38
43
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/add/')
39
44
self.failUnlessEqual(response.status_code, 200)
41
46
def testBasicEditGet(self):
43
48
A smoke test to ensure GET on the change_view works.
45
50
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk)
46
51
self.failUnlessEqual(response.status_code, 200)
48
53
def testBasicAddPost(self):
50
55
A smoke test to ensure POST on add_view works.
66
72
"name": u"This Week in Django",
68
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"2",
69
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"1",
70
"generic_inline_admin-media-content_type-object_id-0-id": u"%d" % self.media_pk,
74
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"3",
75
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"2",
76
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
77
"generic_inline_admin-media-content_type-object_id-0-id": u"%d" % self.mp3_media_pk,
71
78
"generic_inline_admin-media-content_type-object_id-0-url": u"http://example.com/podcast.mp3",
72
"generic_inline_admin-media-content_type-object_id-1-id": u"",
73
"generic_inline_admin-media-content_type-object_id-1-url": u"",
79
"generic_inline_admin-media-content_type-object_id-1-id": u"%d" % self.png_media_pk,
80
"generic_inline_admin-media-content_type-object_id-1-url": u"http://example.com/logo.png",
81
"generic_inline_admin-media-content_type-object_id-2-id": u"",
82
"generic_inline_admin-media-content_type-object_id-2-url": u"",
75
84
url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
76
85
response = self.client.post(url, post_data)
77
86
self.failUnlessEqual(response.status_code, 302) # redirect somewhere
88
def testGenericInlineFormset(self):
89
EpisodeMediaFormSet = generic_inlineformset_factory(Media, can_delete=False, extra=3)
90
e = Episode.objects.get(name='This Week in Django')
92
# Works with no queryset
93
formset = EpisodeMediaFormSet(instance=e)
94
self.assertEquals(len(formset.forms), 5)
95
self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/podcast.mp3" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.mp3_media_pk)
96
self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>' % self.png_media_pk)
97
self.assertEquals(formset.forms[2].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-2-url" type="text" name="generic_inline_admin-media-content_type-object_id-2-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-2-id" id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
99
# A queryset can be used to alter display ordering
100
formset = EpisodeMediaFormSet(instance=e, queryset=Media.objects.order_by('url'))
101
self.assertEquals(len(formset.forms), 5)
102
self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.png_media_pk)
103
self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" value="http://example.com/podcast.mp3" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>' % self.mp3_media_pk)
104
self.assertEquals(formset.forms[2].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-2-url" type="text" name="generic_inline_admin-media-content_type-object_id-2-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-2-id" id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
107
# Works with a queryset that omits items
108
formset = EpisodeMediaFormSet(instance=e, queryset=Media.objects.filter(url__endswith=".png"))
109
self.assertEquals(len(formset.forms), 4)
110
self.assertEquals(formset.forms[0].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-0-url" type="text" name="generic_inline_admin-media-content_type-object_id-0-url" value="http://example.com/logo.png" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-0-id" value="%s" id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>' % self.png_media_pk)
111
self.assertEquals(formset.forms[1].as_p(), '<p><label for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> <input id="id_generic_inline_admin-media-content_type-object_id-1-url" type="text" name="generic_inline_admin-media-content_type-object_id-1-url" maxlength="200" /><input type="hidden" name="generic_inline_admin-media-content_type-object_id-1-id" id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>')
79
113
def testGenericInlineFormsetFactory(self):
80
114
# Regression test for #10522.
81
115
inline_formset = generic_inlineformset_factory(Media,
118
# Regression test for #12340.
119
e = Episode.objects.get(name='This Week in Django')
120
formset = inline_formset(instance=e)
121
self.failUnless(formset.get_queryset().ordered)
84
123
class GenericInlineAdminParametersTest(TestCase):
85
124
fixtures = ['users.xml']
139
178
e = self._create_object(EpisodeExclude)
140
179
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/episodeexclude/%s/' % e.pk)
141
180
formset = response.context['inline_admin_formsets'][0].formset
142
self.failIf('url' in formset.forms[0], 'The formset has excluded "url" field.')
b'\\ No newline at end of file'
181
self.failIf('url' in formset.forms[0], 'The formset has excluded "url" field.')
183
class GenericInlineAdminWithUniqueTogetherTest(TestCase):
184
fixtures = ['users.xml']
187
self.client.login(username='super', password='secret')
196
"generic_inline_admin-phonenumber-content_type-object_id-TOTAL_FORMS": u"1",
197
"generic_inline_admin-phonenumber-content_type-object_id-INITIAL_FORMS": u"0",
198
"generic_inline_admin-phonenumber-content_type-object_id-MAX_NUM_FORMS": u"0",
199
"generic_inline_admin-phonenumber-content_type-object_id-0-id": "",
200
"generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555",
202
response = self.client.get('/generic_inline_admin/admin/generic_inline_admin/contact/add/')
203
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/contact/add/', post_data)
204
self.failUnlessEqual(response.status_code, 302) # redirect somewhere
206
class NoInlineDeletionTest(TestCase):
207
def test_no_deletion(self):
209
inline = MediaPermanentInline(EpisodePermanent, fake_site)
210
fake_request = object()
211
formset = inline.get_formset(fake_request)
212
self.assertFalse(formset.can_delete)