From 39a7eed1bbf12020a077e4bec3d82e08f171a021 Mon Sep 17 00:00:00 2001 From: Josh Smeaton Date: Mon, 23 Feb 2015 11:53:57 +1100 Subject: Converted test fixtures to setUpTestData methods --- tests/admin_views/fixtures/admin-views-actions.xml | 15 - tests/admin_views/fixtures/admin-views-books.xml | 45 - tests/admin_views/fixtures/admin-views-colors.xml | 19 - tests/admin_views/fixtures/admin-views-fabrics.xml | 12 - tests/admin_views/fixtures/admin-views-person.xml | 18 - .../fixtures/admin-views-restaurants.xml | 63 -- tests/admin_views/fixtures/admin-views-unicode.xml | 63 -- tests/admin_views/fixtures/admin-views-users.xml | 110 -- tests/admin_views/fixtures/deleted-objects.xml | 53 - .../fixtures/multiple-child-classes.json | 107 -- tests/admin_views/fixtures/string-primary-key.xml | 6 - tests/admin_views/tests.py | 1179 ++++++++++++++++---- 12 files changed, 963 insertions(+), 727 deletions(-) delete mode 100644 tests/admin_views/fixtures/admin-views-actions.xml delete mode 100644 tests/admin_views/fixtures/admin-views-books.xml delete mode 100644 tests/admin_views/fixtures/admin-views-colors.xml delete mode 100644 tests/admin_views/fixtures/admin-views-fabrics.xml delete mode 100644 tests/admin_views/fixtures/admin-views-person.xml delete mode 100644 tests/admin_views/fixtures/admin-views-restaurants.xml delete mode 100644 tests/admin_views/fixtures/admin-views-unicode.xml delete mode 100644 tests/admin_views/fixtures/admin-views-users.xml delete mode 100644 tests/admin_views/fixtures/deleted-objects.xml delete mode 100644 tests/admin_views/fixtures/multiple-child-classes.json delete mode 100644 tests/admin_views/fixtures/string-primary-key.xml (limited to 'tests/admin_views') diff --git a/tests/admin_views/fixtures/admin-views-actions.xml b/tests/admin_views/fixtures/admin-views-actions.xml deleted file mode 100644 index 316e750577..0000000000 --- a/tests/admin_views/fixtures/admin-views-actions.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - John Doe - john@example.org - - - Max Mustermann - max@example.org - - - John Doe - john@example.org - - diff --git a/tests/admin_views/fixtures/admin-views-books.xml b/tests/admin_views/fixtures/admin-views-books.xml deleted file mode 100644 index 0517ed8d8a..0000000000 --- a/tests/admin_views/fixtures/admin-views-books.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - Book 1 - - - Book 2 - - - Promo 1 - 1 - - - Promo 2 - 2 - - - Chapter 1 - [ insert contents here ] - 1 - - - Chapter 2 - [ insert contents here ] - 1 - - - Chapter 1 - [ insert contents here ] - 2 - - - Chapter 2 - [ insert contents here ] - 2 - - - ChapterXtra1 1 - 1 - - - ChapterXtra1 2 - 3 - - diff --git a/tests/admin_views/fixtures/admin-views-colors.xml b/tests/admin_views/fixtures/admin-views-colors.xml deleted file mode 100644 index e1213561b9..0000000000 --- a/tests/admin_views/fixtures/admin-views-colors.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - Red - 1 - - - Orange - 1 - - - Blue - 0 - - - Green - 0 - - diff --git a/tests/admin_views/fixtures/admin-views-fabrics.xml b/tests/admin_views/fixtures/admin-views-fabrics.xml deleted file mode 100644 index 485bb27c2a..0000000000 --- a/tests/admin_views/fixtures/admin-views-fabrics.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - x - - - y - - - plain - - diff --git a/tests/admin_views/fixtures/admin-views-person.xml b/tests/admin_views/fixtures/admin-views-person.xml deleted file mode 100644 index ff00fd2169..0000000000 --- a/tests/admin_views/fixtures/admin-views-person.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - John Mauchly - 1 - True - - - Grace Hopper - 1 - False - - - Guido van Rossum - 1 - True - - diff --git a/tests/admin_views/fixtures/admin-views-restaurants.xml b/tests/admin_views/fixtures/admin-views-restaurants.xml deleted file mode 100644 index 81e67ee8d0..0000000000 --- a/tests/admin_views/fixtures/admin-views-restaurants.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - New York - - - Illinois - - - California - - - 1 - New York - - - 2 - Chicago - - - 3 - San Francisco - - - 1 - Italian Pizza - - - 1 - Boulevard - - - 2 - Chinese Dinner - - - 2 - Angels - - - 2 - Take Away - - - 3 - The Unknown Restaurant - - - 1 - Mario - Rossi - - - 1 - Antonio - Bianchi - - - 1 - John - Doe - - diff --git a/tests/admin_views/fixtures/admin-views-unicode.xml b/tests/admin_views/fixtures/admin-views-unicode.xml deleted file mode 100644 index 5652aa1881..0000000000 --- a/tests/admin_views/fixtures/admin-views-unicode.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - super - Super - User - super@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - True - True - True - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - Lærdommer - - - <Promo for Lærdommer> - 1 - - - Norske bostaver æøå skaper problemer - <p>Svært frustrerende med UnicodeDecodeErro</p> - 1 - - - Kjærlighet - <p>La kjærligheten til de lidende seire.</p> - 1 - - - Kjærlighet - <p>Noe innhold</p> - 1 - - - <Xtra(1) Norske bostaver æøå skaper problemer> - 1 - - - <Xtra(1) Kjærlighet> - 2 - - - <Xtra(1) Kjærlighet> - 3 - - - <Xtra(2) Norske bostaver æøå skaper problemer> - 1 - - - <Xtra(2) Kjærlighet> - 2 - - - <Xtra(2) Kjærlighet> - 3 - - diff --git a/tests/admin_views/fixtures/admin-views-users.xml b/tests/admin_views/fixtures/admin-views-users.xml deleted file mode 100644 index 0b951b4e28..0000000000 --- a/tests/admin_views/fixtures/admin-views-users.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - super - Super - User - super@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - True - True - True - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - adduser - Add - User - auser@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - True - True - False - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - changeuser - Change - User - cuser@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - True - True - False - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - deleteuser - Delete - User - duser@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - True - True - False - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - joepublic - Joe - Public - joepublic@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - False - True - False - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - nostaff - No - Staff - nostaff@example.com - sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 - False - True - False - 2007-05-30 13:20:10 - 2007-05-30 13:20:10 - - - - - Test section - - - <p>Middle content</p> - 2008-03-18 11:54:58 - 1 - - - <p>Oldest content</p> - 2000-03-18 11:54:58 - 1 - - - <p>Newest content</p> - 2009-03-18 11:54:58 - 1 - - - A Long Title - True - a-long-title - - diff --git a/tests/admin_views/fixtures/deleted-objects.xml b/tests/admin_views/fixtures/deleted-objects.xml deleted file mode 100644 index 92e43dba1c..0000000000 --- a/tests/admin_views/fixtures/deleted-objects.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - Adam - - - Sue - - - Bob - - - - - World Domination - 1 - 2 - - - World Peace - 2 - 2 - - - almost finished - 1 - - - underground bunker - 1 - - - floating castle - 3 - - - super floating castle! - 3 - - - I am recursive - 1 - - - I am recursive too - 1 - - - Corn Conspiracy - 1 - 1 - - diff --git a/tests/admin_views/fixtures/multiple-child-classes.json b/tests/admin_views/fixtures/multiple-child-classes.json deleted file mode 100644 index 5cadf4c1c5..0000000000 --- a/tests/admin_views/fixtures/multiple-child-classes.json +++ /dev/null @@ -1,107 +0,0 @@ -[ - { - "pk": 1, - "model": "admin_views.title", - "fields": - { - } - }, - - { - "pk": 2, - "model": "admin_views.title", - "fields": - { - } - }, - - { - "pk": 3, - "model": "admin_views.title", - "fields": - { - } - }, - - { - "pk": 4, - "model": "admin_views.title", - "fields": - { - } - }, - - { - "pk": 1, - "model": "admin_views.titletranslation", - "fields": - { - "text": "Bar", - "title": 1 - } - }, - - { - "pk": 2, - "model": "admin_views.titletranslation", - "fields": - { - "text": "Foo", - "title": 2 - } - }, - - { - "pk": 3, - "model": "admin_views.titletranslation", - "fields": - { - "text": "Few", - "title": 3 - } - }, - - { - "pk": 4, - "model": "admin_views.titletranslation", - "fields": - { - "text": "Bas", - "title": 4 - } - }, - - { - "pk": 1, - "model": "admin_views.recommender", - "fields": - { - } - }, - - { - "pk": 4, - "model": "admin_views.recommender", - "fields": - { - } - }, - - { - "pk": 2, - "model": "admin_views.recommendation", - "fields": - { - "recommender": 1 - } - }, - - { - "pk": 3, - "model": "admin_views.recommendation", - "fields": - { - "recommender": 4 - } - } -] \ No newline at end of file diff --git a/tests/admin_views/fixtures/string-primary-key.xml b/tests/admin_views/fixtures/string-primary-key.xml deleted file mode 100644 index 1792cb2d7e..0000000000 --- a/tests/admin_views/fixtures/string-primary-key.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - #%" {}|\^[]`]]> - - diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 11cc9e5f39..311f4d4873 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -44,17 +44,20 @@ from .admin import CityAdmin, site, site2 from .models import ( Actor, AdminOrderedAdminMethod, AdminOrderedCallable, AdminOrderedField, AdminOrderedModelMethod, Answer, Article, BarAccount, Book, Category, - Chapter, Character, Child, Choice, City, Collector, Color2, - ComplexSortedPerson, CoverLetter, CustomArticle, DooHickey, Employee, - EmptyModel, FancyDoodad, FieldOverridePost, FilteredManager, FooAccount, + Chapter, ChapterXtra1, ChapterXtra2, Character, Child, Choice, City, + Collector, Color, Color2, ComplexSortedPerson, CoverLetter, CustomArticle, + CyclicOne, CyclicTwo, DooHickey, Employee, EmptyModel, ExternalSubscriber, + Fabric, FancyDoodad, FieldOverridePost, FilteredManager, FooAccount, FoodDelivery, FunkyTag, Gallery, Grommet, Inquisition, Language, MainPrepopulated, ModelWithStringPrimaryKey, OtherStory, Paper, Parent, ParentWithDependentChildren, Person, Persona, Picture, Pizza, Plot, - PluggableSearchPerson, Podcast, Post, Promo, Question, RelatedPrepopulated, - Report, Restaurant, RowLevelChangePermissionModel, Section, ShortMessage, - Simple, Story, Subscriber, Telegram, Topping, UnchangeableObject, - UndeletableObject, UnorderedObject, Vodcast, Whatsit, Widget, Worker, - WorkHour, + PlotDetails, PluggableSearchPerson, Podcast, Post, PrePopulatedPost, Promo, + Question, Recommendation, Recommender, RelatedPrepopulated, Report, + Restaurant, RowLevelChangePermissionModel, SecretHideout, Section, + ShortMessage, Simple, State, Story, Subscriber, SuperSecretHideout, + SuperVillain, Telegram, TitleTranslation, Topping, UnchangeableObject, + UndeletableObject, UnorderedObject, Villain, Vodcast, Whatsit, Widget, + Worker, WorkHour, ) @@ -66,8 +69,115 @@ for a staff account. Note that both fields may be case-sensitive." ROOT_URLCONF="admin_views.urls", USE_I18N=True, USE_L10N=False, LANGUAGE_CODE='en') class AdminViewBasicTestCase(TestCase): - fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', - 'admin-views-fabrics.xml', 'admin-views-books.xml'] + + @classmethod + def setUpTestData(cls): + # password = "secret" + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u2 = User.objects.create( + id=101, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='adduser', + first_name='Add', last_name='User', email='auser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u3 = User.objects.create( + id=102, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='changeuser', + first_name='Change', last_name='User', email='cuser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u4 = User.objects.create( + id=103, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='deleteuser', + first_name='Delete', last_name='User', email='duser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u5 = User.objects.create( + id=104, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='joepublic', + first_name='Joe', last_name='Public', email='joepublic@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u6 = User.objects.create( + id=106, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='nostaff', + first_name='No', last_name='Staff', email='nostaff@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.s1 = Section.objects.create(name='Test section') + cls.a1 = Article.objects.create( + content='

Middle content

', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a2 = Article.objects.create( + content='

Oldest content

', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a3 = Article.objects.create( + content='

Newest content

', date=datetime.datetime(2009, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.p1 = PrePopulatedPost.objects.create(title='A Long Title', published=True, slug='a-long-title') + cls.color1 = Color.objects.create(value='Red', warm=True) + cls.color2 = Color.objects.create(value='Orange', warm=True) + cls.color3 = Color.objects.create(value='Blue', warm=False) + cls.color4 = Color.objects.create(value='Green', warm=False) + cls.fab1 = Fabric.objects.create(surface='x') + cls.fab2 = Fabric.objects.create(surface='y') + cls.fab3 = Fabric.objects.create(surface='plain') + cls.b1 = Book.objects.create(name='Book 1') + cls.b2 = Book.objects.create(name='Book 2') + cls.pro1 = Promo.objects.create(name='Promo 1', book=cls.b1) + cls.pro1 = Promo.objects.create(name='Promo 2', book=cls.b2) + cls.chap1 = Chapter.objects.create(title='Chapter 1', content='[ insert contents here ]', book=cls.b1) + cls.chap2 = Chapter.objects.create(title='Chapter 2', content='[ insert contents here ]', book=cls.b1) + cls.chap3 = Chapter.objects.create(title='Chapter 1', content='[ insert contents here ]', book=cls.b2) + cls.chap4 = Chapter.objects.create(title='Chapter 2', content='[ insert contents here ]', book=cls.b2) + cls.cx1 = ChapterXtra1.objects.create(chap=cls.chap1, xtra='ChapterXtra1 1') + cls.cx2 = ChapterXtra1.objects.create(chap=cls.chap3, xtra='ChapterXtra1 2') + + # Post data for edit inline + cls.inline_post_data = { + "name": "Test section", + # inline data + "article_set-TOTAL_FORMS": "6", + "article_set-INITIAL_FORMS": "3", + "article_set-MAX_NUM_FORMS": "0", + "article_set-0-id": cls.a1.pk, + # there is no title in database, give one here or formset will fail. + "article_set-0-title": "Norske bostaver æøå skaper problemer", + "article_set-0-content": "<p>Middle content</p>", + "article_set-0-date_0": "2008-03-18", + "article_set-0-date_1": "11:54:58", + "article_set-0-section": cls.s1.pk, + "article_set-1-id": cls.a2.pk, + "article_set-1-title": "Need a title.", + "article_set-1-content": "<p>Oldest content</p>", + "article_set-1-date_0": "2000-03-18", + "article_set-1-date_1": "11:54:58", + "article_set-2-id": cls.a3.pk, + "article_set-2-title": "Need a title.", + "article_set-2-content": "<p>Newest content</p>", + "article_set-2-date_0": "2009-03-18", + "article_set-2-date_1": "11:54:58", + "article_set-3-id": "", + "article_set-3-title": "", + "article_set-3-content": "", + "article_set-3-date_0": "", + "article_set-3-date_1": "", + "article_set-4-id": "", + "article_set-4-title": "", + "article_set-4-content": "", + "article_set-4-date_0": "", + "article_set-4-date_1": "", + "article_set-5-id": "", + "article_set-5-title": "", + "article_set-5-content": "", + "article_set-5-date_0": "", + "article_set-5-date_1": "", + } def setUp(self): self.client.login(username='super', password='secret') @@ -124,7 +234,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase): """ A smoke test to ensure GET on the change_view works. """ - response = self.client.get(reverse('admin:admin_views_section_change', args=(1,))) + response = self.client.get(reverse('admin:admin_views_section_change', args=(self.s1.pk,))) self.assertIsInstance(response, TemplateResponse) self.assertEqual(response.status_code, 200) @@ -142,9 +252,9 @@ class AdminViewBasicTest(AdminViewBasicTestCase): The change URL changed in Django 1.9, but the old one still redirects. """ response = self.client.get( - reverse('admin:admin_views_section_change', args=(1,)).replace('change/', '') + reverse('admin:admin_views_section_change', args=(self.s1.pk,)).replace('change/', '') ) - self.assertRedirects(response, reverse('admin:admin_views_section_change', args=(1,))) + self.assertRedirects(response, reverse('admin:admin_views_section_change', args=(self.s1.pk,))) def test_basic_inheritance_GET_string_PK(self): """ @@ -185,52 +295,11 @@ class AdminViewBasicTest(AdminViewBasicTestCase): self.assertContains(response, 'dismissAddRelatedObjectPopup') self.assertContains(response, 'title with a new\\u000Aline') - # Post data for edit inline - inline_post_data = { - "name": "Test section", - # inline data - "article_set-TOTAL_FORMS": "6", - "article_set-INITIAL_FORMS": "3", - "article_set-MAX_NUM_FORMS": "0", - "article_set-0-id": "1", - # there is no title in database, give one here or formset will fail. - "article_set-0-title": "Norske bostaver æøå skaper problemer", - "article_set-0-content": "<p>Middle content</p>", - "article_set-0-date_0": "2008-03-18", - "article_set-0-date_1": "11:54:58", - "article_set-0-section": "1", - "article_set-1-id": "2", - "article_set-1-title": "Need a title.", - "article_set-1-content": "<p>Oldest content</p>", - "article_set-1-date_0": "2000-03-18", - "article_set-1-date_1": "11:54:58", - "article_set-2-id": "3", - "article_set-2-title": "Need a title.", - "article_set-2-content": "<p>Newest content</p>", - "article_set-2-date_0": "2009-03-18", - "article_set-2-date_1": "11:54:58", - "article_set-3-id": "", - "article_set-3-title": "", - "article_set-3-content": "", - "article_set-3-date_0": "", - "article_set-3-date_1": "", - "article_set-4-id": "", - "article_set-4-title": "", - "article_set-4-content": "", - "article_set-4-date_0": "", - "article_set-4-date_1": "", - "article_set-5-id": "", - "article_set-5-title": "", - "article_set-5-content": "", - "article_set-5-date_0": "", - "article_set-5-date_1": "", - } - def test_basic_edit_POST(self): """ A smoke test to ensure POST on edit_view works. """ - response = self.client.post(reverse('admin:admin_views_section_change', args=(1,)), self.inline_post_data) + response = self.client.post(reverse('admin:admin_views_section_change', args=(self.s1.pk,)), self.inline_post_data) self.assertEqual(response.status_code, 302) # redirect somewhere def test_edit_save_as(self): @@ -246,7 +315,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase): "article_set-4-section": "1", "article_set-5-section": "1", }) - response = self.client.post(reverse('admin:admin_views_section_change', args=(1,)), post_data) + response = self.client.post(reverse('admin:admin_views_section_change', args=(self.s1.pk,)), post_data) self.assertEqual(response.status_code, 302) # redirect somewhere def test_edit_save_as_delete_inline(self): @@ -261,7 +330,7 @@ class AdminViewBasicTest(AdminViewBasicTestCase): "article_set-2-DELETE": "1", "article_set-3-section": "1", }) - response = self.client.post(reverse('admin:admin_views_section_change', args=(1,)), post_data) + response = self.client.post(reverse('admin:admin_views_section_change', args=(self.s1.pk,)), post_data) self.assertEqual(response.status_code, 302) # started with 3 articles, one was deleted. self.assertEqual(Section.objects.latest('id').article_set.count(), 2) @@ -527,8 +596,8 @@ class AdminViewBasicTest(AdminViewBasicTestCase): for rows corresponding to instances of a model in which a named group has been used in the choices option of a field. """ - link1 = reverse('admin:admin_views_fabric_change', args=(1,)) - link2 = reverse('admin:admin_views_fabric_change', args=(2,)) + link1 = reverse('admin:admin_views_fabric_change', args=(self.fab1.pk,)) + link2 = reverse('admin:admin_views_fabric_change', args=(self.fab2.pk,)) response = self.client.get(reverse('admin:admin_views_fabric_changelist')) fail_msg = "Changelist table isn't showing the right human-readable values set by a model field 'choices' option named group." self.assertContains(response, 'Horizontal' % link1, msg_prefix=fail_msg, html=True) @@ -928,9 +997,59 @@ class AdminCustomTemplateTests(AdminViewBasicTestCase): @override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'], ROOT_URLCONF="admin_views.urls") class AdminViewFormUrlTest(TestCase): - fixtures = ["admin-views-users.xml"] current_app = "admin3" + @classmethod + def setUpTestData(cls): + # password = "secret" + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u2 = User.objects.create( + id=101, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='adduser', + first_name='Add', last_name='User', email='auser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u3 = User.objects.create( + id=102, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='changeuser', + first_name='Change', last_name='User', email='cuser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u4 = User.objects.create( + id=103, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='deleteuser', + first_name='Delete', last_name='User', email='duser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u5 = User.objects.create( + id=104, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='joepublic', + first_name='Joe', last_name='Public', email='joepublic@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u6 = User.objects.create( + id=106, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='nostaff', + first_name='No', last_name='Staff', email='nostaff@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.s1 = Section.objects.create(name='Test section') + cls.a1 = Article.objects.create( + content='

Middle content

', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a2 = Article.objects.create( + content='

Oldest content

', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a3 = Article.objects.create( + content='

Newest content

', date=datetime.datetime(2009, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.p1 = PrePopulatedPost.objects.create(title='A Long Title', published=True, slug='a-long-title') + def setUp(self): self.client.login(username='super', password='secret') @@ -939,7 +1058,7 @@ class AdminViewFormUrlTest(TestCase): Tests whether change_view has form_url in response.context """ response = self.client.get( - reverse('admin:admin_views_section_change', args=(1,), current_app=self.current_app) + reverse('admin:admin_views_section_change', args=(self.s1.pk,), current_app=self.current_app) ) self.assertIn('form_url', response.context, msg='form_url not present in response.context') self.assertEqual(response.context['form_url'], 'pony') @@ -964,7 +1083,15 @@ class AdminViewFormUrlTest(TestCase): @override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'], ROOT_URLCONF="admin_views.urls") class AdminJavaScriptTest(TestCase): - fixtures = ['admin-views-users.xml'] + + @classmethod + def setUpTestData(cls): + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) def setUp(self): self.client.login(username='super', password='secret') @@ -1004,7 +1131,16 @@ class AdminJavaScriptTest(TestCase): @override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'], ROOT_URLCONF="admin_views.urls") class SaveAsTests(TestCase): - fixtures = ['admin-views-users.xml', 'admin-views-person.xml'] + + @classmethod + def setUpTestData(cls): + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.per1 = Person.objects.create(name='John Mauchly', gender=1, alive=True) def setUp(self): self.client.login(username='super', password='secret') @@ -1012,9 +1148,9 @@ class SaveAsTests(TestCase): def test_save_as_duplication(self): """Ensure save as actually creates a new person""" post_data = {'_saveasnew': '', 'name': 'John M', 'gender': 1, 'age': 42} - self.client.post(reverse('admin:admin_views_person_change', args=(1,)), post_data) + self.client.post(reverse('admin:admin_views_person_change', args=(self.per1.pk,)), post_data) self.assertEqual(len(Person.objects.filter(name='John M')), 1) - self.assertEqual(len(Person.objects.filter(id=1)), 1) + self.assertEqual(len(Person.objects.filter(id=self.per1.pk)), 1) def test_save_as_display(self): """ @@ -1022,7 +1158,7 @@ class SaveAsTests(TestCase): invalid data aside save_as_new will not show us a form to overwrite the initial model. """ - change_url = reverse('admin:admin_views_person_change', args=(1,)) + change_url = reverse('admin:admin_views_person_change', args=(self.per1.pk,)) response = self.client.get(change_url) self.assertTrue(response.context['save_as']) post_data = {'_saveasnew': '', 'name': 'John M', 'gender': 3, 'alive': 'checked'} @@ -1121,37 +1257,69 @@ def get_perm(Model, perm): class AdminViewPermissionsTest(TestCase): """Tests for Admin Views Permissions.""" - fixtures = ['admin-views-users.xml'] - @classmethod def setUpTestData(cls): super(AdminViewPermissionsTest, cls).setUpTestData() - # Setup permissions, for our users who can add, change, and delete. - # We can't put this into the fixture, because the content type id - # and the permission id could be different on each run of the test. + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u2 = User.objects.create( + id=101, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='adduser', + first_name='Add', last_name='User', email='auser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u3 = User.objects.create( + id=102, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='changeuser', + first_name='Change', last_name='User', email='cuser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u4 = User.objects.create( + id=103, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='deleteuser', + first_name='Delete', last_name='User', email='duser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u5 = User.objects.create( + id=104, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='joepublic', + first_name='Joe', last_name='Public', email='joepublic@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u6 = User.objects.create( + id=106, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='nostaff', + first_name='No', last_name='Staff', email='nostaff@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.s1 = Section.objects.create(name='Test section') + cls.a1 = Article.objects.create( + content='

Middle content

', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a2 = Article.objects.create( + content='

Oldest content

', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a3 = Article.objects.create( + content='

Newest content

', date=datetime.datetime(2009, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.p1 = PrePopulatedPost.objects.create(title='A Long Title', published=True, slug='a-long-title') + # Setup permissions, for our users who can add, change, and delete. opts = Article._meta # User who can add Articles - add_user = User.objects.get(username='adduser') - add_user.user_permissions.add(get_perm(Article, - get_permission_codename('add', opts))) - + cls.u2.user_permissions.add(get_perm(Article, get_permission_codename('add', opts))) # User who can change Articles - change_user = User.objects.get(username='changeuser') - change_user.user_permissions.add(get_perm(Article, - get_permission_codename('change', opts))) - change_user2 = User.objects.get(username='nostaff') - change_user2.user_permissions.add(get_perm(Article, - get_permission_codename('change', opts))) + cls.u3.user_permissions.add(get_perm(Article, get_permission_codename('change', opts))) + cls.u6.user_permissions.add(get_perm(Article, get_permission_codename('change', opts))) # User who can delete Articles - delete_user = User.objects.get(username='deleteuser') - delete_user.user_permissions.add(get_perm(Article, - get_permission_codename('delete', opts))) - - delete_user.user_permissions.add(get_perm(Section, - get_permission_codename('delete', Section._meta))) + cls.u4.user_permissions.add(get_perm(Article, get_permission_codename('delete', opts))) + cls.u4.user_permissions.add(get_perm(Section, get_permission_codename('delete', Section._meta))) # login POST dicts cls.index_url = reverse('admin:index') @@ -1346,7 +1514,7 @@ class AdminViewPermissionsTest(TestCase): add_dict = {'title': 'Døm ikke', 'content': '

great article

', 'date_0': '2008-03-18', 'date_1': '10:54:39', - 'section': 1} + 'section': self.s1.pk} # Change User should not have access to add articles self.client.get(self.index_url) @@ -1402,8 +1570,8 @@ class AdminViewPermissionsTest(TestCase): change_dict = {'title': 'Ikke fordømt', 'content': '

edited article

', 'date_0': '2008-03-18', 'date_1': '10:54:39', - 'section': 1} - article_change_url = reverse('admin:admin_views_article_change', args=(1,)) + 'section': self.s1.pk} + article_change_url = reverse('admin:admin_views_article_change', args=(self.a1.pk,)) article_changelist_url = reverse('admin:admin_views_article_changelist') # add user should not be able to view the list of article or change any of them @@ -1426,7 +1594,7 @@ class AdminViewPermissionsTest(TestCase): self.assertEqual(response.status_code, 200) post = self.client.post(article_change_url, change_dict) self.assertRedirects(post, article_changelist_url) - self.assertEqual(Article.objects.get(pk=1).content, '

edited article

') + self.assertEqual(Article.objects.get(pk=self.a1.pk).content, '

edited article

') # one error in form should produce singular error message, multiple errors plural change_dict['title'] = '' @@ -1481,7 +1649,7 @@ class AdminViewPermissionsTest(TestCase): """Delete view should restrict access and actually delete items.""" delete_dict = {'post': 'yes'} - delete_url = reverse('admin:admin_views_article_delete', args=(1,)) + delete_url = reverse('admin:admin_views_article_delete', args=(self.a1.pk,)) # add user should not be able to delete articles self.client.login(**self.adduser_login) @@ -1494,14 +1662,14 @@ class AdminViewPermissionsTest(TestCase): # Delete user can delete self.client.login(**self.deleteuser_login) - response = self.client.get(reverse('admin:admin_views_section_delete', args=(1,))) + response = self.client.get(reverse('admin:admin_views_section_delete', args=(self.s1.pk,))) self.assertContains(response, "

Summary

") self.assertContains(response, "
  • Articles: 3
  • ") # test response contains link to related Article - self.assertContains(response, "admin_views/article/1/") + self.assertContains(response, "admin_views/article/%s/" % self.a1.pk) response = self.client.get(delete_url) - self.assertContains(response, "admin_views/article/1/") + self.assertContains(response, "admin_views/article/%s/" % self.a1.pk) self.assertContains(response, "

    Summary

    ") self.assertContains(response, "
  • Articles: 1
  • ") self.assertEqual(response.status_code, 200) @@ -1512,7 +1680,7 @@ class AdminViewPermissionsTest(TestCase): self.assertEqual(mail.outbox[0].subject, 'Greetings from a deleted object') article_ct = ContentType.objects.get_for_model(Article) logged = LogEntry.objects.get(content_type=article_ct, action_flag=DELETION) - self.assertEqual(logged.object_id, '1') + self.assertEqual(logged.object_id, str(self.a1.pk)) def test_history_view(self): """History view should restrict access.""" @@ -1522,25 +1690,25 @@ class AdminViewPermissionsTest(TestCase): # add user should not be able to view the list of article or change any of them self.client.get(self.index_url) self.client.post(login_url, self.adduser_login) - response = self.client.get(reverse('admin:admin_views_article_history', args=(1,))) + response = self.client.get(reverse('admin:admin_views_article_history', args=(self.a1.pk,))) self.assertEqual(response.status_code, 403) self.client.get(reverse('admin:logout')) # change user can view all items and edit them self.client.get(self.index_url) self.client.post(login_url, self.changeuser_login) - response = self.client.get(reverse('admin:admin_views_article_history', args=(1,))) + response = self.client.get(reverse('admin:admin_views_article_history', args=(self.a1.pk,))) self.assertEqual(response.status_code, 200) # Test redirection when using row-level change permissions. Refs #11513. - RowLevelChangePermissionModel.objects.create(id=1, name="odd id") - RowLevelChangePermissionModel.objects.create(id=2, name="even id") + rl1 = RowLevelChangePermissionModel.objects.create(name="odd id") + rl2 = RowLevelChangePermissionModel.objects.create(name="even id") for login_dict in [self.super_login, self.changeuser_login, self.adduser_login, self.deleteuser_login]: self.client.post(login_url, login_dict) - response = self.client.get(reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(1,))) + response = self.client.get(reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(rl1.pk,))) self.assertEqual(response.status_code, 403) - response = self.client.get(reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(2,))) + response = self.client.get(reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(rl2.pk,))) self.assertEqual(response.status_code, 200) self.client.get(reverse('admin:logout')) @@ -1548,12 +1716,12 @@ class AdminViewPermissionsTest(TestCase): for login_dict in [self.joepublic_login, self.no_username_login]: self.client.post(login_url, login_dict) response = self.client.get( - reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(1,)), follow=True + reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(rl1.pk,)), follow=True ) self.assertEqual(response.status_code, 200) self.assertContains(response, 'login-form') response = self.client.get( - reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(2,)), follow=True + reverse('admin:admin_views_rowlevelchangepermissionmodel_history', args=(rl2.pk,)), follow=True ) self.assertEqual(response.status_code, 200) self.assertContains(response, 'login-form') @@ -1762,17 +1930,21 @@ class AdminViewPermissionsTest(TestCase): class AdminViewsNoUrlTest(TestCase): """Regression test for #17333""" - fixtures = ['admin-views-users.xml'] + @classmethod + def setUpTestData(cls): + cls.u3 = User.objects.create( + id=102, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='changeuser', + first_name='Change', last_name='User', email='cuser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) - def setUp(self): opts = Report._meta # User who can change Reports - change_user = User.objects.get(username='changeuser') - change_user.user_permissions.add(get_perm(Report, - get_permission_codename('change', opts))) + cls.u3.user_permissions.add(get_perm(Report, get_permission_codename('change', opts))) # login POST dict - self.changeuser_login = { + cls.changeuser_login = { REDIRECT_FIELD_NAME: reverse('admin:index'), 'username': 'changeuser', 'password': 'secret', @@ -1792,7 +1964,69 @@ class AdminViewsNoUrlTest(TestCase): @override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'], ROOT_URLCONF="admin_views.urls") class AdminViewDeletedObjectsTest(TestCase): - fixtures = ['admin-views-users.xml', 'deleted-objects.xml'] + + @classmethod + def setUpTestData(cls): + cls.u1 = User.objects.create( + id=100, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=True, username='super', + first_name='Super', last_name='User', email='super@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u2 = User.objects.create( + id=101, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='adduser', + first_name='Add', last_name='User', email='auser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u3 = User.objects.create( + id=102, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='changeuser', + first_name='Change', last_name='User', email='cuser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u4 = User.objects.create( + id=103, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='deleteuser', + first_name='Delete', last_name='User', email='duser@example.com', + is_staff=True, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u5 = User.objects.create( + id=104, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='joepublic', + first_name='Joe', last_name='Public', email='joepublic@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.u6 = User.objects.create( + id=106, password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', + last_login=datetime.datetime(2007, 5, 30, 13, 20, 10), is_superuser=False, username='nostaff', + first_name='No', last_name='Staff', email='nostaff@example.com', + is_staff=False, is_active=True, date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10) + ) + cls.s1 = Section.objects.create(name='Test section') + cls.a1 = Article.objects.create( + content='

    Middle content

    ', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a2 = Article.objects.create( + content='

    Oldest content

    ', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.a3 = Article.objects.create( + content='

    Newest content

    ', date=datetime.datetime(2009, 3, 18, 11, 54, 58), section=cls.s1 + ) + cls.p1 = PrePopulatedPost.objects.create(title='A Long Title', published=True, slug='a-long-title') + + cls.v1 = Villain.objects.create(name='Adam') + cls.v2 = Villain.objects.create(name='Sue') + cls.sv1 = SuperVillain.objects.create(name='Bob') + cls.pl1 = Plot.objects.create(name='World Domination', team_leader=cls.v1, contact=cls.v2) + cls.pl2 = Plot.objects.create(name='World Peace', team_leader=cls.v2, contact=cls.v2) + cls.pl3 = Plot.objects.create(name='Corn Conspiracy', team_leader=cls.v1, contact=cls.v1) + cls.pd1 = PlotDetails.objects.create(details='almost finished', plot=cls.pl1) + cls.sh1 = SecretHideout.objects.create(location='underground bunker', villain=cls.v1) + cls.sh2 = SecretHideout.objects.create(location='floating castle', villain=cls.sv1) + cls.ssh1 = SuperSecretHideout.objects.create(location='super floating castle!', supervillain=cls.sv1) + cls.cy1 = CyclicOne.objects.create(name='I am recursive', two_id=1) + cls.cy2 = CyclicTwo.objects.create(name='I am recursive too', one_id=1) def setUp(self): self.client.login(username='super', password='secret') @@ -1804,10 +2038,10 @@ class AdminViewDeletedObjectsTest(TestCase): """ pattern = re.compile(force_bytes( r'
  • Plot: World Domination\s*