summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/admin_changelist/fixtures/users.json20
-rw-r--r--tests/admin_changelist/tests.py11
-rw-r--r--tests/admin_custom_urls/fixtures/actions.json44
-rw-r--r--tests/admin_custom_urls/fixtures/users.json20
-rw-r--r--tests/admin_custom_urls/tests.py35
-rw-r--r--tests/admin_docs/fixtures/data.xml17
-rw-r--r--tests/admin_docs/tests.py24
-rw-r--r--tests/admin_inlines/fixtures/admin-views-users.xml17
-rw-r--r--tests/admin_inlines/tests.py27
-rw-r--r--tests/admin_views/fixtures/admin-views-actions.xml15
-rw-r--r--tests/admin_views/fixtures/admin-views-books.xml45
-rw-r--r--tests/admin_views/fixtures/admin-views-colors.xml19
-rw-r--r--tests/admin_views/fixtures/admin-views-fabrics.xml12
-rw-r--r--tests/admin_views/fixtures/admin-views-person.xml18
-rw-r--r--tests/admin_views/fixtures/admin-views-restaurants.xml63
-rw-r--r--tests/admin_views/fixtures/admin-views-unicode.xml63
-rw-r--r--tests/admin_views/fixtures/admin-views-users.xml110
-rw-r--r--tests/admin_views/fixtures/deleted-objects.xml53
-rw-r--r--tests/admin_views/fixtures/multiple-child-classes.json107
-rw-r--r--tests/admin_views/fixtures/string-primary-key.xml6
-rw-r--r--tests/admin_views/tests.py1179
-rw-r--r--tests/admin_widgets/fixtures/admin-widgets-users.xml43
-rw-r--r--tests/admin_widgets/tests.py82
-rw-r--r--tests/aggregation/fixtures/aggregation.json243
-rw-r--r--tests/aggregation/tests.py156
-rw-r--r--tests/aggregation_regress/fixtures/aggregation_regress.json257
-rw-r--r--tests/aggregation_regress/tests.py226
-rw-r--r--tests/annotations/fixtures/annotations.json243
-rw-r--r--tests/annotations/tests.py95
-rw-r--r--tests/auth_tests/fixtures/authtestdata.json110
-rw-r--r--tests/auth_tests/fixtures/context-processors-users.xml17
-rw-r--r--tests/auth_tests/fixtures/custom_user.json14
-rw-r--r--tests/auth_tests/test_context_processors.py13
-rw-r--r--tests/auth_tests/test_forms.py66
-rw-r--r--tests/auth_tests/test_models.py41
-rw-r--r--tests/auth_tests/test_signals.py22
-rw-r--r--tests/auth_tests/test_views.py53
-rw-r--r--tests/contenttypes_tests/fixtures/testdata.json68
-rw-r--r--tests/contenttypes_tests/tests.py30
-rw-r--r--tests/flatpages_tests/fixtures/example_site.json11
-rw-r--r--tests/flatpages_tests/fixtures/sample_flatpages.json63
-rw-r--r--tests/flatpages_tests/test_csrf.py30
-rw-r--r--tests/flatpages_tests/test_forms.py8
-rw-r--r--tests/flatpages_tests/test_middleware.py37
-rw-r--r--tests/flatpages_tests/test_templatetags.py30
-rw-r--r--tests/flatpages_tests/test_views.py37
-rw-r--r--tests/generic_inline_admin/fixtures/users.xml17
-rw-r--r--tests/generic_inline_admin/tests.py24
-rw-r--r--tests/generic_views/fixtures/generic-views-test-data.json54
-rw-r--r--tests/generic_views/test_dates.py56
-rw-r--r--tests/generic_views/test_detail.py89
-rw-r--r--tests/generic_views/test_list.py18
-rw-r--r--tests/generic_views/views.py2
-rw-r--r--tests/known_related_objects/fixtures/tournament.json76
-rw-r--r--tests/known_related_objects/tests.py55
-rw-r--r--tests/proxy_models/fixtures/myhorses.json42
-rw-r--r--tests/proxy_models/tests.py15
-rw-r--r--tests/raw_query/fixtures/raw_query_books.json110
-rw-r--r--tests/raw_query/tests.py17
-rw-r--r--tests/syndication_tests/fixtures/feeddata.json55
-rw-r--r--tests/syndication_tests/tests.py33
-rw-r--r--tests/test_client/fixtures/testdata.json56
-rw-r--r--tests/test_client/tests.py25
-rw-r--r--tests/test_client_regress/fixtures/testdata.json56
-rw-r--r--tests/test_client_regress/tests.py43
-rw-r--r--tests/timezones/fixtures/tz_users.xml17
-rw-r--r--tests/timezones/tests.py11
-rw-r--r--tests/view_tests/fixtures/testdata.json75
-rw-r--r--tests/view_tests/tests/test_defaults.py34
69 files changed, 2069 insertions, 2811 deletions
diff --git a/tests/admin_changelist/fixtures/users.json b/tests/admin_changelist/fixtures/users.json
deleted file mode 100644
index 72d86d70ad..0000000000
--- a/tests/admin_changelist/fixtures/users.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "pk": 100,
- "model": "auth.user",
- "fields": {
- "username": "super",
- "first_name": "Super",
- "last_name": "User",
- "is_active": true,
- "is_superuser": true,
- "is_staff": true,
- "last_login": "2007-05-30 13:20:10",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158",
- "email": "super@example.com",
- "date_joined": "2007-05-30 13:20:10"
- }
- }
-]
diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py
index 6d2e50a9d9..ea594b5fba 100644
--- a/tests/admin_changelist/tests.py
+++ b/tests/admin_changelist/tests.py
@@ -672,9 +672,18 @@ class AdminLogNodeTestCase(TestCase):
class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
available_apps = ['admin_changelist'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['users.json']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
+ @classmethod
+ def setUpTestData(cls):
+ # password = "secret"
+ User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime.datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10)
+ )
+
def test_add_row_selection(self):
"""
Ensure that the status line for selected rows gets updated correcly (#22038)
diff --git a/tests/admin_custom_urls/fixtures/actions.json b/tests/admin_custom_urls/fixtures/actions.json
deleted file mode 100644
index 7eda3a3ab0..0000000000
--- a/tests/admin_custom_urls/fixtures/actions.json
+++ /dev/null
@@ -1,44 +0,0 @@
-[
- {
- "pk": "delete",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "Remove things."
- }
- },
- {
- "pk": "rename",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "Gives things other names."
- }
- },
- {
- "pk": "add",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "Add things."
- }
- },
- {
- "pk": "path/to/file/",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "An action with '/' in its name."
- }
- },
- {
- "pk": "path/to/html/document.html",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "An action with a name similar to a HTML doc path."
- }
- },
- {
- "pk": "javascript:alert('Hello world');\">Click here</a>",
- "model": "admin_custom_urls.action",
- "fields": {
- "description": "An action with a name suspected of being a XSS attempt"
- }
- }
-]
diff --git a/tests/admin_custom_urls/fixtures/users.json b/tests/admin_custom_urls/fixtures/users.json
deleted file mode 100644
index 72d86d70ad..0000000000
--- a/tests/admin_custom_urls/fixtures/users.json
+++ /dev/null
@@ -1,20 +0,0 @@
-[
- {
- "pk": 100,
- "model": "auth.user",
- "fields": {
- "username": "super",
- "first_name": "Super",
- "last_name": "User",
- "is_active": true,
- "is_superuser": true,
- "is_staff": true,
- "last_login": "2007-05-30 13:20:10",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158",
- "email": "super@example.com",
- "date_joined": "2007-05-30 13:20:10"
- }
- }
-]
diff --git a/tests/admin_custom_urls/tests.py b/tests/admin_custom_urls/tests.py
index 5ef9f61f67..8177a144bb 100644
--- a/tests/admin_custom_urls/tests.py
+++ b/tests/admin_custom_urls/tests.py
@@ -1,6 +1,9 @@
from __future__ import unicode_literals
+import datetime
+
from django.contrib.admin.utils import quote
+from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.template.response import TemplateResponse
from django.test import TestCase, override_settings
@@ -17,7 +20,28 @@ class AdminCustomUrlsTest(TestCase):
* The ModelAdmin for Action customizes the add_view URL, it's
'<app name>/<model name>/!add/'
"""
- fixtures = ['users.json', 'actions.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ # password = "secret"
+ User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime.datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10)
+ )
+ Action.objects.create(name='delete', description='Remove things.')
+ Action.objects.create(name='rename', description='Gives things other names.')
+ Action.objects.create(name='add', description='Add things.')
+ Action.objects.create(name='path/to/file/', description="An action with '/' in its name.")
+ Action.objects.create(
+ name='path/to/html/document.html',
+ description='An action with a name similar to a HTML doc path.'
+ )
+ Action.objects.create(
+ name='javascript:alert(\'Hello world\');">Click here</a>',
+ description='An action with a name suspected of being a XSS attempt'
+ )
def setUp(self):
self.client.login(username='super', password='secret')
@@ -76,15 +100,6 @@ class AdminCustomUrlsTest(TestCase):
self.assertContains(response, 'Change action')
self.assertContains(response, 'value="path/to/html/document.html"')
-
-@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
- ROOT_URLCONF='admin_custom_urls.urls',)
-class CustomRedirects(TestCase):
- fixtures = ['users.json', 'actions.json']
-
- def setUp(self):
- self.client.login(username='super', password='secret')
-
def test_post_save_add_redirect(self):
"""
Ensures that ModelAdmin.response_post_save_add() controls the
diff --git a/tests/admin_docs/fixtures/data.xml b/tests/admin_docs/fixtures/data.xml
deleted file mode 100644
index aba8f4aace..0000000000
--- a/tests/admin_docs/fixtures/data.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/tests/admin_docs/tests.py b/tests/admin_docs/tests.py
index 60e35569d9..0881de20ee 100644
--- a/tests/admin_docs/tests.py
+++ b/tests/admin_docs/tests.py
@@ -1,3 +1,4 @@
+import datetime
import sys
import unittest
@@ -12,6 +13,19 @@ from django.test import TestCase, modify_settings, override_settings
from .models import Company, Person
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ # password = "secret"
+ User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime.datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10)
+ )
+
+
@override_settings(
PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_docs.urls')
@@ -39,8 +53,7 @@ class MiscTests(AdminDocsTestCase):
@unittest.skipUnless(utils.docutils_is_available, "no docutils installed.")
-class AdminDocViewTests(AdminDocsTestCase):
- fixtures = ['data.xml']
+class AdminDocViewTests(TestDataMixin, AdminDocsTestCase):
def setUp(self):
self.client.login(username='super', password='secret')
@@ -124,8 +137,7 @@ class AdminDocViewTests(AdminDocsTestCase):
utils.docutils_is_available = True
-class XViewMiddlewareTest(AdminDocsTestCase):
- fixtures = ['data.xml']
+class XViewMiddlewareTest(TestDataMixin, AdminDocsTestCase):
def test_xview_func(self):
user = User.objects.get(username='super')
@@ -201,13 +213,11 @@ class DefaultRoleTest(AdminDocsTestCase):
@unittest.skipUnless(utils.docutils_is_available, "no docutils installed.")
-class TestModelDetailView(AdminDocsTestCase):
+class TestModelDetailView(TestDataMixin, AdminDocsTestCase):
"""
Tests that various details render correctly
"""
- fixtures = ['data.xml']
-
def setUp(self):
self.client.login(username='super', password='secret')
self.response = self.client.get(
diff --git a/tests/admin_inlines/fixtures/admin-views-users.xml b/tests/admin_inlines/fixtures/admin-views-users.xml
deleted file mode 100644
index aba8f4aace..0000000000
--- a/tests/admin_inlines/fixtures/admin-views-users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py
index bad1508948..bb9905f87f 100644
--- a/tests/admin_inlines/tests.py
+++ b/tests/admin_inlines/tests.py
@@ -1,5 +1,6 @@
from __future__ import unicode_literals
+import datetime
import warnings
from django.contrib.admin import ModelAdmin, TabularInline
@@ -23,10 +24,22 @@ from .models import (
INLINE_CHANGELINK_HTML = 'class="inlinechangelink">Change</a>'
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ # password = "secret"
+ User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime.datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10)
+ )
+
+
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_inlines.urls")
-class TestInline(TestCase):
- fixtures = ['admin-views-users.xml']
+class TestInline(TestDataMixin, TestCase):
def setUp(self):
holder = Holder(dummy=13)
@@ -353,11 +366,9 @@ class TestInline(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_inlines.urls")
-class TestInlineMedia(TestCase):
- fixtures = ['admin-views-users.xml']
+class TestInlineMedia(TestDataMixin, TestCase):
def setUp(self):
-
result = self.client.login(username='super', password='secret')
self.assertEqual(result, True)
@@ -430,8 +441,7 @@ class TestInlineAdminForm(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_inlines.urls")
-class TestInlineProtectedOnDelete(TestCase):
- fixtures = ['admin-views-users.xml']
+class TestInlineProtectedOnDelete(TestDataMixin, TestCase):
def setUp(self):
result = self.client.login(username='super', password='secret')
@@ -657,10 +667,9 @@ class TestInlinePermissions(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_inlines.urls")
-class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class SeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_inlines'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-views-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
def test_add_stackeds(self):
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.subscriber">
- <field type="CharField" name="name">John Doe</field>
- <field type="CharField" name="email">john@example.org</field>
- </object>
- <object pk="2" model="admin_views.subscriber">
- <field type="CharField" name="name">Max Mustermann</field>
- <field type="CharField" name="email">max@example.org</field>
- </object>
- <object pk="1" model="admin_views.externalsubscriber">
- <field type="CharField" name="name">John Doe</field>
- <field type="CharField" name="email">john@example.org</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.book">
- <field type="CharField" name="name">Book 1</field>
- </object>
- <object pk="2" model="admin_views.book">
- <field type="CharField" name="name">Book 2</field>
- </object>
- <object pk="1" model="admin_views.promo">
- <field type="CharField" name="name">Promo 1</field>
- <field type="ForeignKey" name="book">1</field>
- </object>
- <object pk="2" model="admin_views.promo">
- <field type="CharField" name="name">Promo 2</field>
- <field type="ForeignKey" name="book">2</field>
- </object>
- <object pk="1" model="admin_views.chapter">
- <field type="CharField" name="title">Chapter 1</field>
- <field type="TextField" name="content">[ insert contents here ]</field>
- <field type="ForeignKey" name="book">1</field>
- </object>
- <object pk="2" model="admin_views.chapter">
- <field type="CharField" name="title">Chapter 2</field>
- <field type="TextField" name="content">[ insert contents here ]</field>
- <field type="ForeignKey" name="book">1</field>
- </object>
- <object pk="3" model="admin_views.chapter">
- <field type="CharField" name="title">Chapter 1</field>
- <field type="TextField" name="content">[ insert contents here ]</field>
- <field type="ForeignKey" name="book">2</field>
- </object>
- <object pk="4" model="admin_views.chapter">
- <field type="CharField" name="title">Chapter 2</field>
- <field type="TextField" name="content">[ insert contents here ]</field>
- <field type="ForeignKey" name="book">2</field>
- </object>
- <object pk="1" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">ChapterXtra1 1</field>
- <field type="ForeignKey" name="chap">1</field>
- </object>
- <object pk="2" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">ChapterXtra1 2</field>
- <field type="ForeignKey" name="chap">3</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.color">
- <field type="CharField" name="value">Red</field>
- <field type="BooleanField" name="warm">1</field>
- </object>
- <object pk="2" model="admin_views.color">
- <field type="CharField" name="value">Orange</field>
- <field type="BooleanField" name="warm">1</field>
- </object>
- <object pk="3" model="admin_views.color">
- <field type="CharField" name="value">Blue</field>
- <field type="BooleanField" name="warm">0</field>
- </object>
- <object pk="4" model="admin_views.color">
- <field type="CharField" name="value">Green</field>
- <field type="BooleanField" name="warm">0</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.fabric">
- <field type="CharField" name="surface">x</field>
- </object>
- <object pk="2" model="admin_views.fabric">
- <field type="CharField" name="surface">y</field>
- </object>
- <object pk="3" model="admin_views.fabric">
- <field type="CharField" name="surface">plain</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.person">
- <field type="CharField" name="name">John Mauchly</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">True</field>
- </object>
- <object pk="2" model="admin_views.person">
- <field type="CharField" name="name">Grace Hopper</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">False</field>
- </object>
- <object pk="3" model="admin_views.person">
- <field type="CharField" name="name">Guido van Rossum</field>
- <field type="IntegerField" name="gender">1</field>
- <field type="BooleanField" name="alive">True</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.state">
- <field type="CharField" name="name">New York</field>
- </object>
- <object pk="2" model="admin_views.state">
- <field type="CharField" name="name">Illinois</field>
- </object>
- <object pk="3" model="admin_views.state">
- <field type="CharField" name="name">California</field>
- </object>
- <object pk="1" model="admin_views.city">
- <field to="admin_views.state" name="state" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">New York</field>
- </object>
- <object pk="2" model="admin_views.city">
- <field to="admin_views.state" name="state" rel="ManyToOneRel">2</field>
- <field type="CharField" name="name">Chicago</field>
- </object>
- <object pk="3" model="admin_views.city">
- <field to="admin_views.state" name="state" rel="ManyToOneRel">3</field>
- <field type="CharField" name="name">San Francisco</field>
- </object>
- <object pk="1" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">Italian Pizza</field>
- </object>
- <object pk="2" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">Boulevard</field>
- </object>
- <object pk="3" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">2</field>
- <field type="CharField" name="name">Chinese Dinner</field>
- </object>
- <object pk="4" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">2</field>
- <field type="CharField" name="name">Angels</field>
- </object>
- <object pk="5" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">2</field>
- <field type="CharField" name="name">Take Away</field>
- </object>
- <object pk="6" model="admin_views.restaurant">
- <field to="admin_views.city" name="city" rel="ManyToOneRel">3</field>
- <field type="CharField" name="name">The Unknown Restaurant</field>
- </object>
- <object pk="1" model="admin_views.worker">
- <field to="admin_views.restaurant" name="work_at" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">Mario</field>
- <field type="CharField" name="surname">Rossi</field>
- </object>
- <object pk="2" model="admin_views.worker">
- <field to="admin_views.restaurant" name="work_at" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">Antonio</field>
- <field type="CharField" name="surname">Bianchi</field>
- </object>
- <object pk="3" model="admin_views.worker">
- <field to="admin_views.restaurant" name="work_at" rel="ManyToOneRel">1</field>
- <field type="CharField" name="name">John</field>
- <field type="CharField" name="surname">Doe</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="1" model="admin_views.book">
- <field type="CharField" name="name">LƦrdommer</field>
- </object>
- <object pk="1" model="admin_views.promo">
- <field type="CharField" name="name">&lt;Promo for LƦrdommer&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="1" model="admin_views.chapter">
- <field type="CharField" name="title">Norske bostaver æøÄ skaper problemer</field>
- <field type="TextField" name="content">&lt;p&gt;SvƦrt frustrerende med UnicodeDecodeErro&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapter">
- <field type="CharField" name="title">KjƦrlighet</field>
- <field type="TextField" name="content">&lt;p&gt;La kjƦrligheten til de lidende seire.&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="3" model="admin_views.chapter">
- <field type="CharField" name="title">KjƦrlighet</field>
- <field type="TextField" name="content">&lt;p&gt;Noe innhold&lt;/p&gt;</field>
- <field to="admin_views.book" name="book" rel="ManyToOneRel">1</field>
- </object>
- <object pk="1" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) Norske bostaver æøÄ skaper problemer&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) KjƦrlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">2</field>
- </object>
- <object pk="3" model="admin_views.chapterxtra1">
- <field type="CharField" name="xtra">&lt;Xtra(1) KjƦrlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">3</field>
- </object>
- <object pk="1" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) Norske bostaver æøÄ skaper problemer&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) KjƦrlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">2</field>
- </object>
- <object pk="3" model="admin_views.chapterxtra2">
- <field type="CharField" name="xtra">&lt;Xtra(2) KjƦrlighet&gt;</field>
- <field to="admin_views.chapter" name="chap" rel="OneToOneRel">3</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="101" model="auth.user">
- <field type="CharField" name="username">adduser</field>
- <field type="CharField" name="first_name">Add</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">auser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="102" model="auth.user">
- <field type="CharField" name="username">changeuser</field>
- <field type="CharField" name="first_name">Change</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">cuser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="103" model="auth.user">
- <field type="CharField" name="username">deleteuser</field>
- <field type="CharField" name="first_name">Delete</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">duser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="104" model="auth.user">
- <field type="CharField" name="username">joepublic</field>
- <field type="CharField" name="first_name">Joe</field>
- <field type="CharField" name="last_name">Public</field>
- <field type="CharField" name="email">joepublic@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">False</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="106" model="auth.user">
- <field type="CharField" name="username">nostaff</field>
- <field type="CharField" name="first_name">No</field>
- <field type="CharField" name="last_name">Staff</field>
- <field type="CharField" name="email">nostaff@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">False</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="1" model="admin_views.section">
- <field type="CharField" name="name">Test section</field>
- </object>
- <object pk="1" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Middle content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2008-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
- <object pk="2" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Oldest content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2000-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
- <object pk="3" model="admin_views.article">
- <field type="TextField" name="content">&lt;p&gt;Newest content&lt;/p&gt;</field>
- <field type="DateTimeField" name="date">2009-03-18 11:54:58</field>
- <field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
- </object>
- <object pk="1" model="admin_views.prepopulatedpost">
- <field type="TextField" name="title">A Long Title</field>
- <field type="BooleanField" name="published">True</field>
- <field type="SlugField" name="slug">a-long-title</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.villain">
- <field type="CharField" name="name">Adam</field>
- </object>
- <object pk="2" model="admin_views.villain">
- <field type="CharField" name="name">Sue</field>
- </object>
- <object pk="3" model="admin_views.villain">
- <field type="CharField" name="name">Bob</field>
- </object>
- <object pk="3" model="admin_views.supervillain">
- </object>
- <object pk="1" model="admin_views.plot">
- <field type="CharField" name="name">World Domination</field>
- <field type="ForeignKey" name="team_leader">1</field>
- <field type="ForeignKey" name="contact">2</field>
- </object>
- <object pk="2" model="admin_views.plot">
- <field type="CharField" name="name">World Peace</field>
- <field type="ForeignKey" name="team_leader">2</field>
- <field type="ForeignKey" name="contact">2</field>
- </object>
- <object pk="1" model="admin_views.plotdetails">
- <field type="CharField" name="details">almost finished</field>
- <field type="ForeignKey" name="plot">1</field>
- </object>
- <object pk="1" model="admin_views.secrethideout">
- <field type="CharField" name="location">underground bunker</field>
- <field type="ForeignKey" name="villain">1</field>
- </object>
- <object pk="2" model="admin_views.secrethideout">
- <field type="CharField" name="location">floating castle</field>
- <field type="ForeignKey" name="villain">3</field>
- </object>
- <object pk="1" model="admin_views.supersecrethideout">
- <field type="CharField" name="location">super floating castle!</field>
- <field type="ForeignKey" name="supervillain">3</field>
- </object>
- <object pk="1" model="admin_views.cyclicone">
- <field type="CharField" name="name">I am recursive</field>
- <field type="ForeignKey" name="two">1</field>
- </object>
- <object pk="1" model="admin_views.cyclictwo">
- <field type="CharField" name="name">I am recursive too</field>
- <field type="ForeignKey" name="one">1</field>
- </object>
- <object pk="3" model="admin_views.plot">
- <field type="CharField" name="name">Corn Conspiracy</field>
- <field type="ForeignKey" name="team_leader">1</field>
- <field type="ForeignKey" name="contact">1</field>
- </object>
-</django-objects>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="1" model="admin_views.modelwithstringprimarykey">
- <field type="CharField" name="string_pk"><![CDATA[abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`]]></field>
- </object>
-</django-objects>
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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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": "&lt;p&gt;Middle content&lt;/p&gt;",
+ "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": "&lt;p&gt;Oldest content&lt;/p&gt;",
+ "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": "&lt;p&gt;Newest content&lt;/p&gt;",
+ "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": "&lt;p&gt;Middle content&lt;/p&gt;",
- "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": "&lt;p&gt;Oldest content&lt;/p&gt;",
- "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": "&lt;p&gt;Newest content&lt;/p&gt;",
- "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, '<a href="%s">Horizontal</a>' % 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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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': '<p>great article</p>',
'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': '<p>edited article</p>',
'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, '<p>edited article</p>')
+ self.assertEqual(Article.objects.get(pk=self.a1.pk).content, '<p>edited article</p>')
# 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, "<h2>Summary</h2>")
self.assertContains(response, "<li>Articles: 3</li>")
# 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, "<h2>Summary</h2>")
self.assertContains(response, "<li>Articles: 1</li>")
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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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'<li>Plot: <a href="%s">World Domination</a>\s*<ul>\s*<li>Plot details: <a href="%s">almost finished</a>' % (
- reverse('admin:admin_views_plot_change', args=(1,)),
- reverse('admin:admin_views_plotdetails_change', args=(1,)))
+ reverse('admin:admin_views_plot_change', args=(self.pl1.pk,)),
+ reverse('admin:admin_views_plotdetails_change', args=(self.pd1.pk,)))
))
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v1.pk,)))
six.assertRegex(self, response.content, pattern)
def test_cyclic(self):
@@ -1817,12 +2051,12 @@ class AdminViewDeletedObjectsTest(TestCase):
"""
one = '<li>Cyclic one: <a href="%s">I am recursive</a>' % (
- reverse('admin:admin_views_cyclicone_change', args=(1,)),
+ reverse('admin:admin_views_cyclicone_change', args=(self.cy1.pk,)),
)
two = '<li>Cyclic two: <a href="%s">I am recursive too</a>' % (
- reverse('admin:admin_views_cyclictwo_change', args=(1,)),
+ reverse('admin:admin_views_cyclictwo_change', args=(self.cy2.pk,)),
)
- response = self.client.get(reverse('admin:admin_views_cyclicone_delete', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_cyclicone_delete', args=(self.cy1.pk,)))
self.assertContains(response, one, 1)
self.assertContains(response, two, 1)
@@ -1836,7 +2070,7 @@ class AdminViewDeletedObjectsTest(TestCase):
self.assertTrue(self.client.login(username='deleteuser',
password='secret'))
- response = self.client.get(reverse('admin:admin_views_plot_delete', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_plot_delete', args=(self.pl1.pk,)))
self.assertContains(response, "your account doesn't have permission to delete the following types of objects")
self.assertContains(response, "<li>plot details</li>")
@@ -1858,7 +2092,7 @@ class AdminViewDeletedObjectsTest(TestCase):
def test_not_registered(self):
should_contain = """<li>Secret hideout: underground bunker"""
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v1.pk,)))
self.assertContains(response, should_contain, 1)
def test_multiple_fkeys_to_same_model(self):
@@ -1869,11 +2103,11 @@ class AdminViewDeletedObjectsTest(TestCase):
"""
should_contain = '<li>Plot: <a href="%s">World Domination</a>' % reverse(
- 'admin:admin_views_plot_change', args=(1,)
+ 'admin:admin_views_plot_change', args=(self.pl1.pk,)
)
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v1.pk,)))
self.assertContains(response, should_contain)
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(2,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v2.pk,)))
self.assertContains(response, should_contain)
def test_multiple_fkeys_to_same_instance(self):
@@ -1884,9 +2118,9 @@ class AdminViewDeletedObjectsTest(TestCase):
"""
should_contain = '<li>Plot: <a href="%s">World Peace</a></li>' % reverse(
- 'admin:admin_views_plot_change', args=(2,)
+ 'admin:admin_views_plot_change', args=(self.pl2.pk,)
)
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(2,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v2.pk,)))
self.assertContains(response, should_contain, 1)
def test_inheritance(self):
@@ -1897,15 +2131,15 @@ class AdminViewDeletedObjectsTest(TestCase):
"""
should_contain = [
- '<li>Villain: <a href="%s">Bob</a>' % reverse('admin:admin_views_villain_change', args=(3,)),
- '<li>Super villain: <a href="%s">Bob</a>' % reverse('admin:admin_views_supervillain_change', args=(3,)),
+ '<li>Villain: <a href="%s">Bob</a>' % reverse('admin:admin_views_villain_change', args=(self.sv1.pk,)),
+ '<li>Super villain: <a href="%s">Bob</a>' % reverse('admin:admin_views_supervillain_change', args=(self.sv1.pk,)),
'<li>Secret hideout: floating castle',
'<li>Super secret hideout: super floating castle!',
]
- response = self.client.get(reverse('admin:admin_views_villain_delete', args=(3,)))
+ response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.sv1.pk,)))
for should in should_contain:
self.assertContains(response, should, 1)
- response = self.client.get(reverse('admin:admin_views_supervillain_delete', args=(3,)))
+ response = self.client.get(reverse('admin:admin_views_supervillain_delete', args=(self.sv1.pk,)))
for should in should_contain:
self.assertContains(response, should, 1)
@@ -1915,42 +2149,98 @@ class AdminViewDeletedObjectsTest(TestCase):
those objects should be listed for deletion.
"""
- plot = Plot.objects.get(pk=3)
+ plot = self.pl3
tag = FunkyTag.objects.create(content_object=plot, name='hott')
should_contain = '<li>Funky tag: <a href="%s">hott' % reverse(
'admin:admin_views_funkytag_change', args=(tag.id,))
- response = self.client.get(reverse('admin:admin_views_plot_delete', args=(3,)))
+ response = self.client.get(reverse('admin:admin_views_plot_delete', args=(plot.pk,)))
self.assertContains(response, should_contain)
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class TestGenericRelations(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.v1 = Villain.objects.create(name='Adam')
+ cls.pl3 = Plot.objects.create(name='Corn Conspiracy', team_leader=cls.v1, contact=cls.v1)
def setUp(self):
self.client.login(username='super', password='secret')
def test_generic_content_object_in_list_display(self):
- plot = Plot.objects.get(pk=3)
- FunkyTag.objects.create(content_object=plot, name='hott')
+ FunkyTag.objects.create(content_object=self.pl3, name='hott')
response = self.client.get(reverse('admin:admin_views_funkytag_changelist'))
- self.assertContains(response, "%s</td>" % plot)
+ self.assertContains(response, "%s</td>" % self.pl3)
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminViewStringPrimaryKeyTest(TestCase):
- fixtures = ['admin-views-users.xml', 'string-primary-key.xml']
- def __init__(self, *args):
- super(AdminViewStringPrimaryKeyTest, self).__init__(*args)
- self.pk = """abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
+ @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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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.pk = """abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
+ cls.m1 = ModelWithStringPrimaryKey.objects.create(string_pk=cls.pk)
+ content_type_pk = ContentType.objects.get_for_model(ModelWithStringPrimaryKey).pk
+ LogEntry.objects.log_action(100, content_type_pk, cls.pk, cls.pk, 2, change_message='Changed something')
def setUp(self):
self.client.login(username='super', password='secret')
- content_type_pk = ContentType.objects.get_for_model(ModelWithStringPrimaryKey).pk
- LogEntry.objects.log_action(100, content_type_pk, self.pk, self.pk, 2, change_message='Changed something')
def test_get_history_view(self):
"""
@@ -2112,7 +2402,15 @@ class SecureViewTests(TestCase):
"""
Test behavior of a view protected by the staff_member_required decorator.
"""
- 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 test_secure_view_shows_login_if_not_logged_in(self):
"""
@@ -2138,7 +2436,30 @@ class SecureViewTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminViewUnicodeTest(TestCase):
- fixtures = ['admin-views-unicode.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.b1 = Book.objects.create(name='LƦrdommer')
+ cls.p1 = Promo.objects.create(name='<Promo for LƦrdommer>', book=cls.b1)
+ cls.chap1 = Chapter.objects.create(
+ title='Norske bostaver æøÄ skaper problemer', content='<p>Svært frustrerende med UnicodeDecodeErro</p>',
+ book=cls.b1
+ )
+ cls.chap2 = Chapter.objects.create(
+ title='KjƦrlighet', content='<p>La kjƦrligheten til de lidende seire.</p>', book=cls.b1)
+ cls.chap3 = Chapter.objects.create(title='KjƦrlighet', content='<p>Noe innhold</p>', book=cls.b1)
+ cls.chap4 = ChapterXtra1.objects.create(chap=cls.chap1, xtra='<Xtra(1) Norske bostaver æøÄ skaper problemer>')
+ cls.chap5 = ChapterXtra1.objects.create(chap=cls.chap2, xtra='<Xtra(1) KjƦrlighet>')
+ cls.chap6 = ChapterXtra1.objects.create(chap=cls.chap3, xtra='<Xtra(1) KjƦrlighet>')
+ cls.chap7 = ChapterXtra2.objects.create(chap=cls.chap1, xtra='<Xtra(2) Norske bostaver æøÄ skaper problemer>')
+ cls.chap8 = ChapterXtra2.objects.create(chap=cls.chap2, xtra='<Xtra(2) KjƦrlighet>')
+ cls.chap9 = ChapterXtra2.objects.create(chap=cls.chap3, xtra='<Xtra(2) KjƦrlighet>')
def setUp(self):
self.client.login(username='super', password='secret')
@@ -2153,13 +2474,13 @@ class AdminViewUnicodeTest(TestCase):
"chapter_set-TOTAL_FORMS": "6",
"chapter_set-INITIAL_FORMS": "3",
"chapter_set-MAX_NUM_FORMS": "0",
- "chapter_set-0-id": "1",
+ "chapter_set-0-id": self.chap1.pk,
"chapter_set-0-title": "Norske bostaver æøÄ skaper problemer",
"chapter_set-0-content": "&lt;p&gt;SvƦrt frustrerende med UnicodeDecodeError&lt;/p&gt;",
- "chapter_set-1-id": "2",
+ "chapter_set-1-id": self.chap2.id,
"chapter_set-1-title": "KjƦrlighet.",
"chapter_set-1-content": "&lt;p&gt;La kjƦrligheten til de lidende seire.&lt;/p&gt;",
- "chapter_set-2-id": "3",
+ "chapter_set-2-id": self.chap3.id,
"chapter_set-2-title": "Need a title.",
"chapter_set-2-content": "&lt;p&gt;Newest content&lt;/p&gt;",
"chapter_set-3-id": "",
@@ -2173,7 +2494,7 @@ class AdminViewUnicodeTest(TestCase):
"chapter_set-5-content": "",
}
- response = self.client.post(reverse('admin:admin_views_book_change', args=(1,)), post_data)
+ response = self.client.post(reverse('admin:admin_views_book_change', args=(self.b1.pk,)), post_data)
self.assertEqual(response.status_code, 302) # redirect somewhere
def test_unicode_delete(self):
@@ -2181,7 +2502,7 @@ class AdminViewUnicodeTest(TestCase):
Ensure that the delete_view handles non-ASCII characters
"""
delete_dict = {'post': 'yes'}
- delete_url = reverse('admin:admin_views_book_delete', args=(1,))
+ delete_url = reverse('admin:admin_views_book_delete', args=(self.b1.pk,))
response = self.client.get(delete_url)
self.assertEqual(response.status_code, 200)
response = self.client.post(delete_url, delete_dict)
@@ -2191,7 +2512,59 @@ class AdminViewUnicodeTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminViewListEditable(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.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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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.per1 = Person.objects.create(name='John Mauchly', gender=1, alive=True)
+ cls.per2 = Person.objects.create(name='Grace Hopper', gender=1, alive=False)
+ cls.per3 = Person.objects.create(name='Guido van Rossum', gender=1, alive=True)
def setUp(self):
self.client.login(username='super', password='secret')
@@ -2235,14 +2608,14 @@ class AdminViewListEditable(TestCase):
"form-MAX_NUM_FORMS": "0",
"form-0-gender": "1",
- "form-0-id": "1",
+ "form-0-id": "%s" % self.per1.pk,
"form-1-gender": "2",
- "form-1-id": "2",
+ "form-1-id": "%s" % self.per2.pk,
"form-2-alive": "checked",
"form-2-gender": "1",
- "form-2-id": "3",
+ "form-2-id": "%s" % self.per3.pk,
"_save": "Save",
}
@@ -2257,14 +2630,14 @@ class AdminViewListEditable(TestCase):
"form-MAX_NUM_FORMS": "0",
"form-0-gender": "1",
- "form-0-id": "1",
+ "form-0-id": "%s" % self.per1.pk,
"form-1-gender": "2",
- "form-1-id": "2",
+ "form-1-id": "%s" % self.per2.pk,
"form-2-alive": "checked",
"form-2-gender": "1",
- "form-2-id": "3",
+ "form-2-id": "%s" % self.per3.pk,
"_save": "Save",
}
@@ -2279,11 +2652,11 @@ class AdminViewListEditable(TestCase):
"form-INITIAL_FORMS": "2",
"form-MAX_NUM_FORMS": "0",
- "form-0-id": "1",
+ "form-0-id": "%s" % self.per1.pk,
"form-0-gender": "1",
"form-0-alive": "checked",
- "form-1-id": "3",
+ "form-1-id": "%s" % self.per3.pk,
"form-1-gender": "1",
"form-1-alive": "checked",
@@ -2299,7 +2672,7 @@ class AdminViewListEditable(TestCase):
"form-INITIAL_FORMS": "1",
"form-MAX_NUM_FORMS": "0",
- "form-0-id": "1",
+ "form-0-id": "%s" % self.per1.pk,
"form-0-gender": "1",
"_save": "Save",
@@ -2388,7 +2761,7 @@ class AdminViewListEditable(TestCase):
"form-INITIAL_FORMS": "1",
"form-MAX_NUM_FORMS": "0",
- "form-0-id": "2",
+ "form-0-id": "%s" % self.per2.pk,
"form-0-alive": "1",
"form-0-gender": "2",
@@ -2406,7 +2779,7 @@ class AdminViewListEditable(TestCase):
"form-INITIAL_FORMS": "1",
"form-MAX_NUM_FORMS": "0",
- "form-0-id": "2",
+ "form-0-id": "%s" % self.per2.pk,
"form-0-alive": "1",
"form-0-gender": "2",
@@ -2514,14 +2887,14 @@ class AdminViewListEditable(TestCase):
"form-MAX_NUM_FORMS": "0",
"form-0-gender": "1",
- "form-0-id": "1",
+ "form-0-id": "%s" % self.per1.pk,
"form-1-gender": "2",
- "form-1-id": "2",
+ "form-1-id": "%s" % self.per2.pk,
"form-2-alive": "checked",
"form-2-gender": "1",
- "form-2-id": "3",
+ "form-2-id": "%s" % self.per3.pk,
"_save": "Save",
"_selected_action": ['1'],
@@ -2577,8 +2950,70 @@ class AdminViewListEditable(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminSearchTest(TestCase):
- fixtures = ['admin-views-users', 'multiple-child-classes',
- 'admin-views-person']
+
+ @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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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.per1 = Person.objects.create(name='John Mauchly', gender=1, alive=True)
+ cls.per2 = Person.objects.create(name='Grace Hopper', gender=1, alive=False)
+ cls.per3 = Person.objects.create(name='Guido van Rossum', gender=1, alive=True)
+
+ cls.t1 = Recommender.objects.create()
+ cls.t2 = Recommendation.objects.create(recommender=cls.t1)
+ cls.t3 = Recommender.objects.create()
+ cls.t4 = Recommendation.objects.create(recommender=cls.t3)
+
+ cls.tt1 = TitleTranslation.objects.create(title=cls.t1, text='Bar')
+ cls.tt2 = TitleTranslation.objects.create(title=cls.t2, text='Foo')
+ cls.tt3 = TitleTranslation.objects.create(title=cls.t3, text='Few')
+ cls.tt4 = TitleTranslation.objects.create(title=cls.t4, text='Bas')
def setUp(self):
self.client.login(username='super', password='secret')
@@ -2663,7 +3098,15 @@ class AdminSearchTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminInheritedInlinesTest(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')
@@ -2748,7 +3191,17 @@ class AdminInheritedInlinesTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminActionsTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-actions.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.s1 = ExternalSubscriber.objects.create(name='John Doe', email='john@example.org')
+ cls.s2 = Subscriber.objects.create(name='Max Mustermann', email='max@example.org')
def setUp(self):
self.client.login(username='super', password='secret')
@@ -3025,7 +3478,15 @@ action)</option>
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class TestCustomChangeList(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):
result = self.client.login(username='super', password='secret')
@@ -3050,7 +3511,15 @@ class TestCustomChangeList(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class TestInlineNotEditable(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):
result = self.client.login(username='super', password='secret')
@@ -3067,7 +3536,15 @@ class TestInlineNotEditable(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminCustomQuerysetTest(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')
@@ -3317,7 +3794,15 @@ class AdminCustomQuerysetTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminInlineFileUploadTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-actions.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')
@@ -3361,7 +3846,15 @@ class AdminInlineFileUploadTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminInlineTests(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.post_data = {
@@ -3679,7 +4172,16 @@ class AdminInlineTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class NeverCacheTests(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.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.s1 = Section.objects.create(name='Test section')
def setUp(self):
self.client.login(username='super', password='secret')
@@ -3706,17 +4208,17 @@ class NeverCacheTests(TestCase):
def test_model_view(self):
"Check the never-cache status of a model edit page"
- 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.assertEqual(get_max_age(response), 0)
def test_model_history(self):
"Check the never-cache status of a model history page"
- response = self.client.get(reverse('admin:admin_views_section_history', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_section_history', args=(self.s1.pk,)))
self.assertEqual(get_max_age(response), 0)
def test_model_delete(self):
"Check the never-cache status of a model delete page"
- 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.assertEqual(get_max_age(response), 0)
def test_login(self):
@@ -3750,7 +4252,16 @@ class NeverCacheTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class PrePopulatedTest(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)
+ )
+ 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')
@@ -3763,7 +4274,7 @@ class PrePopulatedTest(TestCase):
self.assertContains(response, "id: '#id_prepopulatedsubpost_set-0-subslug',")
def test_prepopulated_off(self):
- response = self.client.get(reverse('admin:admin_views_prepopulatedpost_change', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_prepopulatedpost_change', args=(self.p1.pk,)))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "A Long Title")
self.assertNotContains(response, "id: '#id_slug'")
@@ -3785,9 +4296,18 @@ class PrePopulatedTest(TestCase):
class SeleniumAdminViewsFirefoxTests(AdminSeleniumWebDriverTestCase):
available_apps = ['admin_views'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-views-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
+ @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.p1 = PrePopulatedPost.objects.create(title='A Long Title', published=True, slug='a-long-title')
+
def test_prepopulated_fields(self):
"""
Ensure that the JavaScript-automated prepopulated fields work with the
@@ -4012,7 +4532,15 @@ class SeleniumAdminViewsIETests(SeleniumAdminViewsFirefoxTests):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class ReadonlyTest(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')
@@ -4120,7 +4648,15 @@ class ReadonlyTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class LimitChoicesToInAdminTest(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')
@@ -4144,7 +4680,15 @@ class LimitChoicesToInAdminTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class RawIdFieldsTest(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')
@@ -4224,7 +4768,60 @@ class UserAdminTest(TestCase):
"""
Tests user CRUD functionality.
"""
- 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)
+ )
+ 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='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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.per1 = Person.objects.create(name='John Mauchly', gender=1, alive=True)
+ cls.per2 = Person.objects.create(name='Grace Hopper', gender=1, alive=False)
+ cls.per3 = Person.objects.create(name='Guido van Rossum', gender=1, alive=True)
def setUp(self):
self.client.login(username='super', password='secret')
@@ -4236,7 +4833,7 @@ class UserAdminTest(TestCase):
'password1': 'newpassword',
'password2': 'newpassword',
})
- new_user = User.objects.order_by('-id')[0]
+ new_user = User.objects.get(username='newuser')
self.assertRedirects(response, reverse('admin:auth_user_change', args=(new_user.pk,)))
self.assertEqual(User.objects.count(), user_count + 1)
self.assertTrue(new_user.has_usable_password())
@@ -4249,7 +4846,7 @@ class UserAdminTest(TestCase):
'password2': 'newpassword',
'_continue': '1',
})
- new_user = User.objects.order_by('-id')[0]
+ new_user = User.objects.get(username='newuser')
self.assertRedirects(response, reverse('admin:auth_user_change', args=(new_user.pk,)))
self.assertEqual(User.objects.count(), user_count + 1)
self.assertTrue(new_user.has_usable_password())
@@ -4368,7 +4965,15 @@ class GroupAdminTest(TestCase):
"""
Tests group CRUD functionality.
"""
- 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')
@@ -4397,7 +5002,26 @@ class GroupAdminTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class CSSTest(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)
+ )
+ cls.s1 = Section.objects.create(name='Test section')
+ cls.a1 = Article.objects.create(
+ content='<p>Middle content</p>', date=datetime.datetime(2008, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a2 = Article.objects.create(
+ content='<p>Oldest content</p>', date=datetime.datetime(2000, 3, 18, 11, 54, 58), section=cls.s1
+ )
+ cls.a3 = Article.objects.create(
+ content='<p>Newest content</p>', 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')
@@ -4464,7 +5088,7 @@ class CSSTest(TestCase):
template
"""
response = self.client.get(
- reverse('admin:admin_views_section_delete', args=(1,)))
+ reverse('admin:admin_views_section_delete', args=(self.s1.pk,)))
self.assertEqual(response.status_code, 200)
self.assertContains(response,
'<body class=" app-admin_views model-section ')
@@ -4520,7 +5144,15 @@ except ImportError:
ROOT_URLCONF="admin_views.urls")
@modify_settings(INSTALLED_APPS={'append': ['django.contrib.admindocs', 'django.contrib.flatpages']})
class AdminDocsTest(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')
@@ -4575,7 +5207,15 @@ class AdminDocsTest(TestCase):
USE_I18N=False,
)
class ValidXHTMLTests(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')
@@ -4590,7 +5230,15 @@ class ValidXHTMLTests(TestCase):
ROOT_URLCONF="admin_views.urls",
USE_THOUSAND_SEPARATOR=True, USE_L10N=True)
class DateHierarchyTests(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')
@@ -4716,7 +5364,15 @@ class AdminCustomSaveRelatedTests(TestCase):
Ensure that one can easily customize the way related objects are saved.
Refs #16115.
"""
- 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')
@@ -4781,7 +5437,15 @@ class AdminCustomSaveRelatedTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminViewLogoutTest(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')
@@ -4807,7 +5471,15 @@ class AdminViewLogoutTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminUserMessageTest(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')
@@ -4862,9 +5534,23 @@ class AdminUserMessageTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminKeepChangeListFiltersTests(TestCase):
- fixtures = ['admin-views-users.xml']
admin_site = site
+ @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.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)
+ )
+
def setUp(self):
self.client.login(username='super', password='secret')
@@ -4892,7 +5578,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
def test_assert_url_equal(self):
# Test equality.
- change_user_url = reverse('admin:auth_user_change', args=(105,))
+ change_user_url = reverse('admin:auth_user_change', args=(self.u5.pk,))
self.assertURLEqual(
'http://testserver{}?_changelist_filters=is_staff__exact%3D0%26is_superuser__exact%3D0'.format(change_user_url),
'http://testserver{}?_changelist_filters=is_staff__exact%3D0%26is_superuser__exact%3D0'.format(change_user_url)
@@ -4938,7 +5624,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
})
def get_sample_user_id(self):
- return 104
+ return self.u5.pk
def get_changelist_url(self):
return '%s?%s' % (
@@ -4987,7 +5673,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
# Check the `change_view` link has the correct querystring.
detail_link = re.search(
- '<a href="(.*?)">joepublic</a>',
+ '<a href="(.*?)">{}</a>'.format(self.u5.username),
force_text(response.content)
)
self.assertURLEqual(detail_link.group(1), self.get_change_url())
@@ -5080,7 +5766,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
self.assertEqual(response.status_code, 302)
self.assertURLEqual(
response.url,
- self.get_change_url(User.objects.latest('pk').pk)
+ self.get_change_url(User.objects.get(username='dummy').pk)
)
post_data.pop('_save')
@@ -5091,7 +5777,7 @@ class AdminKeepChangeListFiltersTests(TestCase):
self.assertEqual(response.status_code, 302)
self.assertURLEqual(
response.url,
- self.get_change_url(User.objects.latest('pk').pk)
+ self.get_change_url(User.objects.get(username='dummy2').pk)
)
post_data.pop('_continue')
@@ -5148,7 +5834,14 @@ class NamespacedAdminKeepChangeListFiltersTests(AdminKeepChangeListFiltersTests)
class TestLabelVisibility(TestCase):
""" #11277 -Labels of hidden fields in admin were not hidden. """
- 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')
@@ -5187,7 +5880,31 @@ class TestLabelVisibility(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class AdminViewOnSiteTests(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-restaurants.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.s1 = State.objects.create(name='New York')
+ cls.s2 = State.objects.create(name='Illinois')
+ cls.s3 = State.objects.create(name='California')
+ cls.c1 = City.objects.create(state=cls.s1, name='New York')
+ cls.c2 = City.objects.create(state=cls.s2, name='Chicago')
+ cls.c3 = City.objects.create(state=cls.s3, name='San Francisco')
+ cls.r1 = Restaurant.objects.create(city=cls.c1, name='Italian Pizza')
+ cls.r2 = Restaurant.objects.create(city=cls.c1, name='Boulevard')
+ cls.r3 = Restaurant.objects.create(city=cls.c2, name='Chinese Dinner')
+ cls.r4 = Restaurant.objects.create(city=cls.c2, name='Angels')
+ cls.r5 = Restaurant.objects.create(city=cls.c2, name='Take Away')
+ cls.r6 = Restaurant.objects.create(city=cls.c3, name='The Unknown Restaurant')
+ cls.w1 = Worker.objects.create(work_at=cls.r1, name='Mario', surname='Rossi')
+ cls.w2 = Worker.objects.create(work_at=cls.r1, name='Antonio', surname='Bianchi')
+ cls.w3 = Worker.objects.create(work_at=cls.r1, name='John', surname='Doe')
def setUp(self):
self.client.login(username='super', password='secret')
@@ -5275,21 +5992,20 @@ class AdminViewOnSiteTests(TestCase):
def test_false(self):
"Ensure that the 'View on site' button is not displayed if view_on_site is False"
- response = self.client.get(reverse('admin:admin_views_restaurant_change', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_restaurant_change', args=(self.r1.pk,)))
content_type_pk = ContentType.objects.get_for_model(Restaurant).pk
self.assertNotContains(response, reverse('admin:view_on_site', args=(content_type_pk, 1)))
def test_true(self):
"Ensure that the default behavior is followed if view_on_site is True"
- response = self.client.get(reverse('admin:admin_views_city_change', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_city_change', args=(self.c1.pk,)))
content_type_pk = ContentType.objects.get_for_model(City).pk
- self.assertContains(response, reverse('admin:view_on_site', args=(content_type_pk, 1)))
+ self.assertContains(response, reverse('admin:view_on_site', args=(content_type_pk, self.c1.pk)))
def test_callable(self):
"Ensure that the right link is displayed if view_on_site is a callable"
- response = self.client.get(reverse('admin:admin_views_worker_change', args=(1,)))
- worker = Worker.objects.get(pk=1)
- self.assertContains(response, '"/worker/%s/%s/"' % (worker.surname, worker.name))
+ response = self.client.get(reverse('admin:admin_views_worker_change', args=(self.w1.pk,)))
+ self.assertContains(response, '"/worker/%s/%s/"' % (self.w1.surname, self.w1.name))
def test_missing_get_absolute_url(self):
"Ensure None is returned if model doesn't have get_absolute_url"
@@ -5300,28 +6016,51 @@ class AdminViewOnSiteTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="admin_views.urls")
class InlineAdminViewOnSiteTest(TestCase):
- fixtures = ['admin-views-users.xml', 'admin-views-restaurants.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.s1 = State.objects.create(name='New York')
+ cls.s2 = State.objects.create(name='Illinois')
+ cls.s3 = State.objects.create(name='California')
+ cls.c1 = City.objects.create(state=cls.s1, name='New York')
+ cls.c2 = City.objects.create(state=cls.s2, name='Chicago')
+ cls.c3 = City.objects.create(state=cls.s3, name='San Francisco')
+ cls.r1 = Restaurant.objects.create(city=cls.c1, name='Italian Pizza')
+ cls.r2 = Restaurant.objects.create(city=cls.c1, name='Boulevard')
+ cls.r3 = Restaurant.objects.create(city=cls.c2, name='Chinese Dinner')
+ cls.r4 = Restaurant.objects.create(city=cls.c2, name='Angels')
+ cls.r5 = Restaurant.objects.create(city=cls.c2, name='Take Away')
+ cls.r6 = Restaurant.objects.create(city=cls.c3, name='The Unknown Restaurant')
+ cls.w1 = Worker.objects.create(work_at=cls.r1, name='Mario', surname='Rossi')
+ cls.w2 = Worker.objects.create(work_at=cls.r1, name='Antonio', surname='Bianchi')
+ cls.w3 = Worker.objects.create(work_at=cls.r1, name='John', surname='Doe')
def setUp(self):
self.client.login(username='super', password='secret')
def test_false(self):
"Ensure that the 'View on site' button is not displayed if view_on_site is False"
- response = self.client.get(reverse('admin:admin_views_state_change', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_state_change', args=(self.s1.pk,)))
content_type_pk = ContentType.objects.get_for_model(City).pk
- self.assertNotContains(response, reverse('admin:view_on_site', args=(content_type_pk, 1)))
+ self.assertNotContains(response, reverse('admin:view_on_site', args=(content_type_pk, self.c1.pk)))
def test_true(self):
"Ensure that the 'View on site' button is displayed if view_on_site is True"
- response = self.client.get(reverse('admin:admin_views_city_change', args=(1,)))
+ response = self.client.get(reverse('admin:admin_views_city_change', args=(self.c1.pk,)))
content_type_pk = ContentType.objects.get_for_model(Restaurant).pk
- self.assertContains(response, reverse('admin:view_on_site', args=(content_type_pk, 1)))
+ self.assertContains(response, reverse('admin:view_on_site', args=(content_type_pk, self.r1.pk)))
def test_callable(self):
"Ensure that the right link is displayed if view_on_site is a callable"
- response = self.client.get(reverse('admin:admin_views_restaurant_change', args=(1,)))
- worker = Worker.objects.get(pk=1)
- self.assertContains(response, '"/worker_inline/%s/%s/"' % (worker.surname, worker.name))
+ response = self.client.get(reverse('admin:admin_views_restaurant_change', args=(self.r1.pk,)))
+ self.assertContains(response, '"/worker_inline/%s/%s/"' % (self.w1.surname, self.w1.name))
@override_settings(ROOT_URLCONF="admin_views.urls")
@@ -5352,7 +6091,15 @@ class GetFormsetsWithInlinesArgumentTest(TestCase):
The GetFormsetsArgumentCheckingAdmin ModelAdmin throws an exception
if obj is not None during add_view or obj is None during change_view.
"""
- 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')
diff --git a/tests/admin_widgets/fixtures/admin-widgets-users.xml b/tests/admin_widgets/fixtures/admin-widgets-users.xml
deleted file mode 100644
index f677215c6d..0000000000
--- a/tests/admin_widgets/fixtures/admin-widgets-users.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
- <object pk="101" model="auth.user">
- <field type="CharField" name="username">testser</field>
- <field type="CharField" name="first_name">Add</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">auser@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">False</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-
- <object pk="1" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">100</field>
- <field type="CharField" name="make">Volkswagon</field>
- <field type="CharField" name="model">Passat</field>
- </object>
- <object pk="2" model="admin_widgets.car">
- <field to="auth.user" name="owner" rel="ManyToOneRel">101</field>
- <field type="CharField" name="make">BMW</field>
- <field type="CharField" name="model">M3</field>
- </object>
-
-</django-objects> \ No newline at end of file
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index 17d0ed44c0..39f1292e67 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -12,6 +12,7 @@ from django.conf import settings
from django.contrib import admin
from django.contrib.admin import widgets
from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase
+from django.contrib.auth.models import User
from django.core.files.storage import default_storage
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.urlresolvers import reverse
@@ -32,6 +33,26 @@ admin_static_prefix = lambda: {
}
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime(2007, 5, 30, 13, 20, 10)
+ )
+ cls.u2 = User.objects.create(
+ pk=101, username='testser', first_name='Add', last_name='User', email='auser@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=False,
+ is_staff=True, last_login=datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime(2007, 5, 30, 13, 20, 10)
+ )
+ models.Car.objects.create(id=1, owner=cls.u1, make='Volkswagon', model='Passat')
+ models.Car.objects.create(id=2, owner=cls.u2, make='BMW', model='M3')
+
+
class AdminFormfieldForDBFieldTests(TestCase):
"""
Tests for correct behavior of ModelAdmin.formfield_for_dbfield
@@ -167,8 +188,7 @@ class AdminFormfieldForDBFieldTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
+class AdminFormfieldForDBFieldWithRequestTests(TestDataMixin, DjangoTestCase):
def test_filter_choices_by_request_user(self):
"""
@@ -182,8 +202,7 @@ class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class AdminForeignKeyWidgetChangeList(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
+class AdminForeignKeyWidgetChangeList(TestDataMixin, DjangoTestCase):
def setUp(self):
self.client.login(username="super", password="secret")
@@ -195,8 +214,7 @@ class AdminForeignKeyWidgetChangeList(DjangoTestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class AdminForeignKeyRawIdWidget(DjangoTestCase):
- fixtures = ["admin-widgets-users.xml"]
+class AdminForeignKeyRawIdWidget(TestDataMixin, DjangoTestCase):
def setUp(self):
self.client.login(username="super", password="secret")
@@ -352,12 +370,13 @@ class AdminURLWidgetTest(DjangoTestCase):
PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls',
)
-class AdminFileWidgetTests(DjangoTestCase):
- fixtures = ['admin-widgets-users.xml']
+class AdminFileWidgetTests(TestDataMixin, DjangoTestCase):
- def setUp(self):
+ @classmethod
+ def setUpTestData(cls):
+ super(AdminFileWidgetTests, cls).setUpTestData()
band = models.Band.objects.create(name='Linkin Park')
- self.album = band.album_set.create(
+ cls.album = band.album_set.create(
name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg'
)
@@ -572,10 +591,9 @@ class RelatedFieldWidgetWrapperTests(DjangoTestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class DateTimePickerSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class DateTimePickerSeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-widgets-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
def test_show_hide_date_time_picker_widgets(self):
@@ -750,9 +768,8 @@ class DateTimePickerSeleniumIETests(DateTimePickerSeleniumFirefoxTests):
@override_settings(TIME_ZONE='Asia/Singapore')
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class DateTimePickerShortcutsSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class DateTimePickerShortcutsSeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-widgets-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
def test_date_time_picker_shortcuts(self):
@@ -818,23 +835,23 @@ class DateTimePickerShortcutsSeleniumIETests(DateTimePickerShortcutsSeleniumFire
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class HorizontalVerticalFilterSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class HorizontalVerticalFilterSeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-widgets-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
- def setUp(self):
- self.lisa = models.Student.objects.create(name='Lisa')
- self.john = models.Student.objects.create(name='John')
- self.bob = models.Student.objects.create(name='Bob')
- self.peter = models.Student.objects.create(name='Peter')
- self.jenny = models.Student.objects.create(name='Jenny')
- self.jason = models.Student.objects.create(name='Jason')
- self.cliff = models.Student.objects.create(name='Cliff')
- self.arthur = models.Student.objects.create(name='Arthur')
- self.school = models.School.objects.create(name='School of Awesome')
- super(HorizontalVerticalFilterSeleniumFirefoxTests, self).setUp()
+ @classmethod
+ def setUpTestData(cls):
+ super(HorizontalVerticalFilterSeleniumFirefoxTests, cls).setUpTestData()
+ cls.lisa = models.Student.objects.create(name='Lisa')
+ cls.john = models.Student.objects.create(name='John')
+ cls.bob = models.Student.objects.create(name='Bob')
+ cls.peter = models.Student.objects.create(name='Peter')
+ cls.jenny = models.Student.objects.create(name='Jenny')
+ cls.jason = models.Student.objects.create(name='Jason')
+ cls.cliff = models.Student.objects.create(name='Cliff')
+ cls.arthur = models.Student.objects.create(name='Arthur')
+ cls.school = models.School.objects.create(name='School of Awesome')
def assertActiveButtons(self, mode, field_name, choose, remove,
choose_all=None, remove_all=None):
@@ -1073,15 +1090,15 @@ class HorizontalVerticalFilterSeleniumIETests(HorizontalVerticalFilterSeleniumFi
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class AdminRawIdWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class AdminRawIdWidgetSeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-widgets-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
- def setUp(self):
+ @classmethod
+ def setUpTestData(cls):
+ super(AdminRawIdWidgetSeleniumFirefoxTests, cls).setUpTestData()
models.Band.objects.create(id=42, name='Bogey Blues')
models.Band.objects.create(id=98, name='Green Potatoes')
- super(AdminRawIdWidgetSeleniumFirefoxTests, self).setUp()
def test_ForeignKey(self):
self.admin_login(username='super', password='secret', login_url='/')
@@ -1164,9 +1181,8 @@ class AdminRawIdWidgetSeleniumIETests(AdminRawIdWidgetSeleniumFirefoxTests):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='admin_widgets.urls')
-class RelatedFieldWidgetSeleniumFirefoxTests(AdminSeleniumWebDriverTestCase):
+class RelatedFieldWidgetSeleniumFirefoxTests(TestDataMixin, AdminSeleniumWebDriverTestCase):
available_apps = ['admin_widgets'] + AdminSeleniumWebDriverTestCase.available_apps
- fixtures = ['admin-widgets-users.xml']
webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver'
def test_ForeignKey_using_to_field(self):
diff --git a/tests/aggregation/fixtures/aggregation.json b/tests/aggregation/fixtures/aggregation.json
deleted file mode 100644
index a0021001e7..0000000000
--- a/tests/aggregation/fixtures/aggregation.json
+++ /dev/null
@@ -1,243 +0,0 @@
-[
- {
- "pk": 1,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Apress",
- "num_awards": 3
- }
- },
- {
- "pk": 2,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Sams",
- "num_awards": 1
- }
- },
- {
- "pk": 3,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Prentice Hall",
- "num_awards": 7
- }
- },
- {
- "pk": 4,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Morgan Kaufmann",
- "num_awards": 9
- }
- },
- {
- "pk": 5,
- "model": "aggregation.publisher",
- "fields": {
- "name": "Jonno's House of Books",
- "num_awards": 0
- }
- },
- {
- "pk": 1,
- "model": "aggregation.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059725",
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "price": "30.00",
- "rating": 4.5,
- "authors": [1, 2],
- "contact": 1,
- "pages": 447,
- "pubdate": "2007-12-6"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.book",
- "fields": {
- "publisher": 2,
- "isbn": "067232959",
- "name": "Sams Teach Yourself Django in 24 Hours",
- "price": "23.09",
- "rating": 3.0,
- "authors": [3],
- "contact": 3,
- "pages": 528,
- "pubdate": "2008-3-3"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059996",
- "name": "Practical Django Projects",
- "price": "29.69",
- "rating": 4.0,
- "authors": [4],
- "contact": 4,
- "pages": 300,
- "pubdate": "2008-6-23"
- }
- },
- {
- "pk": 4,
- "model": "aggregation.book",
- "fields": {
- "publisher": 3,
- "isbn": "013235613",
- "name": "Python Web Development with Django",
- "price": "29.69",
- "rating": 4.0,
- "authors": [5, 6, 7],
- "contact": 5,
- "pages": 350,
- "pubdate": "2008-11-3"
- }
- },
- {
- "pk": 5,
- "model": "aggregation.book",
- "fields": {
- "publisher": 3,
- "isbn": "013790395",
- "name": "Artificial Intelligence: A Modern Approach",
- "price": "82.80",
- "rating": 4.0,
- "authors": [8, 9],
- "contact": 8,
- "pages": 1132,
- "pubdate": "1995-1-15"
- }
- },
- {
- "pk": 6,
- "model": "aggregation.book",
- "fields": {
- "publisher": 4,
- "isbn": "155860191",
- "name": "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "price": "75.00",
- "rating": 5.0,
- "authors": [8],
- "contact": 8,
- "pages": 946,
- "pubdate": "1991-10-15"
- }
- },
- {
- "pk": 1,
- "model": "aggregation.store",
- "fields": {
- "books": [1, 2, 3, 4, 5, 6],
- "name": "Amazon.com",
- "original_opening": "1994-4-23 9:17:42",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.store",
- "fields": {
- "books": [1, 3, 5, 6],
- "name": "Books.com",
- "original_opening": "2001-3-15 11:23:37",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.store",
- "fields": {
- "books": [3, 4, 6],
- "name": "Mamma and Pappa's Books",
- "original_opening": "1945-4-25 16:24:14",
- "friday_night_closing": "21:30:00"
- }
- },
- {
- "pk": 1,
- "model": "aggregation.author",
- "fields": {
- "age": 34,
- "friends": [2, 4],
- "name": "Adrian Holovaty"
- }
- },
- {
- "pk": 2,
- "model": "aggregation.author",
- "fields": {
- "age": 35,
- "friends": [1, 7],
- "name": "Jacob Kaplan-Moss"
- }
- },
- {
- "pk": 3,
- "model": "aggregation.author",
- "fields": {
- "age": 45,
- "friends": [],
- "name": "Brad Dayley"
- }
- },
- {
- "pk": 4,
- "model": "aggregation.author",
- "fields": {
- "age": 29,
- "friends": [1],
- "name": "James Bennett"
- }
- },
- {
- "pk": 5,
- "model": "aggregation.author",
- "fields": {
- "age": 37,
- "friends": [6, 7],
- "name": "Jeffrey Forcier"
- }
- },
- {
- "pk": 6,
- "model": "aggregation.author",
- "fields": {
- "age": 29,
- "friends": [5, 7],
- "name": "Paul Bissex"
- }
- },
- {
- "pk": 7,
- "model": "aggregation.author",
- "fields": {
- "age": 25,
- "friends": [2, 5, 6],
- "name": "Wesley J. Chun"
- }
- },
- {
- "pk": 8,
- "model": "aggregation.author",
- "fields": {
- "age": 57,
- "friends": [9],
- "name": "Peter Norvig"
- }
- },
- {
- "pk": 9,
- "model": "aggregation.author",
- "fields": {
- "age": 46,
- "friends": [8],
- "name": "Stuart Russell"
- }
- }
-]
diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py
index bf4097205e..424b7a7ccc 100644
--- a/tests/aggregation/tests.py
+++ b/tests/aggregation/tests.py
@@ -18,8 +18,89 @@ from django.utils.deprecation import RemovedInDjango20Warning
from .models import Author, Book, Publisher, Store
-class BaseAggregateTestCase(TestCase):
- fixtures = ["aggregation.json"]
+class AggregateTestCase(TestCase):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.a1 = Author.objects.create(name='Adrian Holovaty', age=34)
+ cls.a2 = Author.objects.create(name='Jacob Kaplan-Moss', age=35)
+ cls.a3 = Author.objects.create(name='Brad Dayley', age=45)
+ cls.a4 = Author.objects.create(name='James Bennett', age=29)
+ cls.a5 = Author.objects.create(name='Jeffrey Forcier', age=37)
+ cls.a6 = Author.objects.create(name='Paul Bissex', age=29)
+ cls.a7 = Author.objects.create(name='Wesley J. Chun', age=25)
+ cls.a8 = Author.objects.create(name='Peter Norvig', age=57)
+ cls.a9 = Author.objects.create(name='Stuart Russell', age=46)
+ cls.a1.friends.add(cls.a2, cls.a4)
+ cls.a2.friends.add(cls.a1, cls.a7)
+ cls.a4.friends.add(cls.a1)
+ cls.a5.friends.add(cls.a6, cls.a7)
+ cls.a6.friends.add(cls.a5, cls.a7)
+ cls.a7.friends.add(cls.a2, cls.a5, cls.a6)
+ cls.a8.friends.add(cls.a9)
+ cls.a9.friends.add(cls.a8)
+
+ cls.p1 = Publisher.objects.create(name='Apress', num_awards=3)
+ cls.p2 = Publisher.objects.create(name='Sams', num_awards=1)
+ cls.p3 = Publisher.objects.create(name='Prentice Hall', num_awards=7)
+ cls.p4 = Publisher.objects.create(name='Morgan Kaufmann', num_awards=9)
+ cls.p5 = Publisher.objects.create(name="Jonno's House of Books", num_awards=0)
+
+ cls.b1 = Book.objects.create(
+ isbn='159059725', name='The Definitive Guide to Django: Web Development Done Right',
+ pages=447, rating=4.5, price=Decimal('30.00'), contact=cls.a1, publisher=cls.p1,
+ pubdate=datetime.date(2007, 12, 6)
+ )
+ cls.b2 = Book.objects.create(
+ isbn='067232959', name='Sams Teach Yourself Django in 24 Hours',
+ pages=528, rating=3.0, price=Decimal('23.09'), contact=cls.a3, publisher=cls.p2,
+ pubdate=datetime.date(2008, 3, 3)
+ )
+ cls.b3 = Book.objects.create(
+ isbn='159059996', name='Practical Django Projects',
+ pages=300, rating=4.0, price=Decimal('29.69'), contact=cls.a4, publisher=cls.p1,
+ pubdate=datetime.date(2008, 6, 23)
+ )
+ cls.b4 = Book.objects.create(
+ isbn='013235613', name='Python Web Development with Django',
+ pages=350, rating=4.0, price=Decimal('29.69'), contact=cls.a5, publisher=cls.p3,
+ pubdate=datetime.date(2008, 11, 3)
+ )
+ cls.b5 = Book.objects.create(
+ isbn='013790395', name='Artificial Intelligence: A Modern Approach',
+ pages=1132, rating=4.0, price=Decimal('82.80'), contact=cls.a8, publisher=cls.p3,
+ pubdate=datetime.date(1995, 1, 15)
+ )
+ cls.b6 = Book.objects.create(
+ isbn='155860191', name='Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
+ pages=946, rating=5.0, price=Decimal('75.00'), contact=cls.a8, publisher=cls.p4,
+ pubdate=datetime.date(1991, 10, 15)
+ )
+ cls.b1.authors.add(cls.a1, cls.a2)
+ cls.b2.authors.add(cls.a3)
+ cls.b3.authors.add(cls.a4)
+ cls.b4.authors.add(cls.a5, cls.a6, cls.a7)
+ cls.b5.authors.add(cls.a8, cls.a9)
+ cls.b6.authors.add(cls.a8)
+
+ s1 = Store.objects.create(
+ name='Amazon.com',
+ original_opening=datetime.datetime(1994, 4, 23, 9, 17, 42),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s2 = Store.objects.create(
+ name='Books.com',
+ original_opening=datetime.datetime(2001, 3, 15, 11, 23, 37),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s3 = Store.objects.create(
+ name="Mamma and Pappa's Books",
+ original_opening=datetime.datetime(1945, 4, 25, 16, 24, 14),
+ friday_night_closing=datetime.time(21, 30)
+ )
+ s1.books.add(cls.b1, cls.b2, cls.b3, cls.b4, cls.b5, cls.b6)
+ s2.books.add(cls.b1, cls.b3, cls.b5, cls.b6)
+ s3.books.add(cls.b3, cls.b4, cls.b6)
def test_empty_aggregate(self):
self.assertEqual(Author.objects.all().aggregate(), {})
@@ -86,7 +167,7 @@ class BaseAggregateTestCase(TestCase):
)
books = Book.objects.annotate(mean_age=Avg("authors__age"))
- b = books.get(pk=1)
+ b = books.get(pk=self.b1.pk)
self.assertEqual(
b.name,
'The Definitive Guide to Django: Web Development Done Right'
@@ -95,7 +176,7 @@ class BaseAggregateTestCase(TestCase):
def test_annotate_defer(self):
qs = Book.objects.annotate(
- page_sum=Sum("pages")).defer('name').filter(pk=1)
+ page_sum=Sum("pages")).defer('name').filter(pk=self.b1.pk)
rows = [
(1, "159059725", 447, "The Definitive Guide to Django: Web Development Done Right")
@@ -107,7 +188,7 @@ class BaseAggregateTestCase(TestCase):
def test_annotate_defer_select_related(self):
qs = Book.objects.select_related('contact').annotate(
- page_sum=Sum("pages")).defer('name').filter(pk=1)
+ page_sum=Sum("pages")).defer('name').filter(pk=self.b1.pk)
rows = [
(1, "159059725", 447, "Adrian Holovaty",
@@ -200,7 +281,7 @@ class BaseAggregateTestCase(TestCase):
)
def test_annotate_values(self):
- books = list(Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values())
+ books = list(Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values())
self.assertEqual(
books, [
{
@@ -218,7 +299,7 @@ class BaseAggregateTestCase(TestCase):
]
)
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg('authors__age')).values('pk', 'isbn', 'mean_age')
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg('authors__age')).values('pk', 'isbn', 'mean_age')
self.assertEqual(
list(books), [
{
@@ -229,7 +310,7 @@ class BaseAggregateTestCase(TestCase):
]
)
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values("name")
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values("name")
self.assertEqual(
list(books), [
{
@@ -238,7 +319,7 @@ class BaseAggregateTestCase(TestCase):
]
)
- books = Book.objects.filter(pk=1).values().annotate(mean_age=Avg('authors__age'))
+ books = Book.objects.filter(pk=self.b1.pk).values().annotate(mean_age=Avg('authors__age'))
self.assertEqual(
list(books), [
{
@@ -470,7 +551,7 @@ class BaseAggregateTestCase(TestCase):
self.assertEqual(len(publishers), 0)
def test_annotation(self):
- vals = Author.objects.filter(pk=1).aggregate(Count("friends__id"))
+ vals = Author.objects.filter(pk=self.a1.pk).aggregate(Count("friends__id"))
self.assertEqual(vals, {"friends__id__count": 2})
books = Book.objects.annotate(num_authors=Count("authors__name")).filter(num_authors__exact=2).order_by("pk")
@@ -565,28 +646,28 @@ class BaseAggregateTestCase(TestCase):
)
def test_annotate_values_list(self):
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("pk", "isbn", "mean_age")
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values_list("pk", "isbn", "mean_age")
self.assertEqual(
list(books), [
(1, "159059725", 34.5),
]
)
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("isbn")
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values_list("isbn")
self.assertEqual(
list(books), [
('159059725',)
]
)
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("mean_age")
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values_list("mean_age")
self.assertEqual(
list(books), [
(34.5,)
]
)
- books = Book.objects.filter(pk=1).annotate(mean_age=Avg("authors__age")).values_list("mean_age", flat=True)
+ books = Book.objects.filter(pk=self.b1.pk).annotate(mean_age=Avg("authors__age")).values_list("mean_age", flat=True)
self.assertEqual(list(books), [34.5])
books = Book.objects.values_list("price").annotate(count=Count("price")).order_by("-count", "price")
@@ -697,25 +778,21 @@ class BaseAggregateTestCase(TestCase):
book = Book.objects.aggregate(price_sum=Sum('price'))
self.assertEqual(book['price_sum'], Decimal("99999.80"))
-
-class ComplexAggregateTestCase(TestCase):
- fixtures = ["aggregation.json"]
-
def test_nonaggregate_aggregation_throws(self):
with six.assertRaisesRegex(self, TypeError, 'fail is not an aggregate expression'):
Book.objects.aggregate(fail=F('price'))
def test_nonfield_annotation(self):
- book = Book.objects.annotate(val=Max(Value(2, output_field=IntegerField())))[0]
+ book = Book.objects.annotate(val=Max(Value(2, output_field=IntegerField()))).first()
self.assertEqual(book.val, 2)
- book = Book.objects.annotate(val=Max(Value(2), output_field=IntegerField()))[0]
+ book = Book.objects.annotate(val=Max(Value(2), output_field=IntegerField())).first()
self.assertEqual(book.val, 2)
- book = Book.objects.annotate(val=Max(2, output_field=IntegerField()))[0]
+ book = Book.objects.annotate(val=Max(2, output_field=IntegerField())).first()
self.assertEqual(book.val, 2)
def test_missing_output_field_raises_error(self):
with six.assertRaisesRegex(self, FieldError, 'Cannot resolve expression type, unknown output_field'):
- Book.objects.annotate(val=Max(2))[0]
+ Book.objects.annotate(val=Max(2)).first()
def test_annotation_expressions(self):
authors = Author.objects.annotate(combined_ages=Sum(F('age') + F('friends__age'))).order_by('name')
@@ -754,18 +831,18 @@ class ComplexAggregateTestCase(TestCase):
def test_combine_different_types(self):
with six.assertRaisesRegex(self, FieldError, 'Expression contains mixed types. You must set output_field'):
- Book.objects.annotate(sums=Sum('rating') + Sum('pages') + Sum('price')).get(pk=4)
+ Book.objects.annotate(sums=Sum('rating') + Sum('pages') + Sum('price')).get(pk=self.b4.pk)
b1 = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
- output_field=IntegerField())).get(pk=4)
+ output_field=IntegerField())).get(pk=self.b4.pk)
self.assertEqual(b1.sums, 383)
b2 = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
- output_field=FloatField())).get(pk=4)
+ output_field=FloatField())).get(pk=self.b4.pk)
self.assertEqual(b2.sums, 383.69)
b3 = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
- output_field=DecimalField())).get(pk=4)
+ output_field=DecimalField())).get(pk=self.b4.pk)
self.assertEqual(b3.sums, Approximate(Decimal("383.69"), places=2))
def test_complex_aggregations_require_kwarg(self):
@@ -805,14 +882,15 @@ class ComplexAggregateTestCase(TestCase):
def test_values_annotation_with_expression(self):
# ensure the F() is promoted to the group by clause
qs = Author.objects.values('name').annotate(another_age=Sum('age') + F('age'))
- a = qs.get(pk=1)
+ a = qs.get(name="Adrian Holovaty")
self.assertEqual(a['another_age'], 68)
qs = qs.annotate(friend_count=Count('friends'))
- a = qs.get(pk=1)
+ a = qs.get(name="Adrian Holovaty")
self.assertEqual(a['friend_count'], 2)
- qs = qs.annotate(combined_age=Sum('age') + F('friends__age')).filter(pk=1).order_by('-combined_age')
+ qs = qs.annotate(combined_age=Sum('age') + F('friends__age')).filter(
+ name="Adrian Holovaty").order_by('-combined_age')
self.assertEqual(
list(qs), [
{
@@ -860,11 +938,11 @@ class ComplexAggregateTestCase(TestCase):
age_alias=F('age')
).annotate(
sum_age=Sum('age_alias')
- ).get(pk=1)
+ ).get(name="Adrian Holovaty")
other_author = Author.objects.annotate(
sum_age=Sum('age')
- ).get(pk=1)
+ ).get(name="Adrian Holovaty")
self.assertEqual(author.sum_age, other_author.sum_age)
@@ -885,7 +963,7 @@ class ComplexAggregateTestCase(TestCase):
qs = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
output_field=IntegerField()))
self.assertEqual(str(qs.query).count('sum('), 1)
- b1 = qs.get(pk=4)
+ b1 = qs.get(pk=self.b4.pk)
self.assertEqual(b1.sums, 383)
# test changing the dict and delegating
@@ -897,7 +975,7 @@ class ComplexAggregateTestCase(TestCase):
qs = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
output_field=IntegerField()))
self.assertEqual(str(qs.query).count('sum('), 1)
- b1 = qs.get(pk=4)
+ b1 = qs.get(pk=self.b4.pk)
self.assertEqual(b1.sums, 383)
# test overriding all parts of the template
@@ -910,7 +988,7 @@ class ComplexAggregateTestCase(TestCase):
qs = Book.objects.annotate(sums=Sum(F('rating') + F('pages') + F('price'),
output_field=IntegerField()))
self.assertEqual(str(qs.query).count('MAX('), 1)
- b1 = qs.get(pk=4)
+ b1 = qs.get(pk=self.b4.pk)
self.assertEqual(b1.sums, 2)
finally:
delattr(Sum, 'as_' + connection.vendor)
@@ -938,16 +1016,16 @@ class ComplexAggregateTestCase(TestCase):
qs = Publisher.objects.annotate(
price_or_median=Greatest(Avg('book__rating'), Avg('book__price'))
- ).filter(price_or_median__gte=F('num_awards')).order_by('pk')
+ ).filter(price_or_median__gte=F('num_awards')).order_by('num_awards')
self.assertQuerysetEqual(
- qs, [1, 2, 3, 4], lambda v: v.pk)
+ qs, [1, 3, 7, 9], lambda v: v.num_awards)
qs2 = Publisher.objects.annotate(
rating_or_num_awards=Greatest(Avg('book__rating'), F('num_awards'),
output_field=FloatField())
- ).filter(rating_or_num_awards__gt=F('num_awards')).order_by('pk')
+ ).filter(rating_or_num_awards__gt=F('num_awards')).order_by('num_awards')
self.assertQuerysetEqual(
- qs2, [1, 2], lambda v: v.pk)
+ qs2, [1, 3], lambda v: v.num_awards)
@ignore_warnings(category=RemovedInDjango20Warning)
def test_backwards_compatibility(self):
@@ -966,5 +1044,5 @@ class ComplexAggregateTestCase(TestCase):
query.annotations[alias] = aggregate
qs = Author.objects.values('name').annotate(another_age=NewSum('age') + F('age'))
- a = qs.get(pk=1)
+ a = qs.get(name="Adrian Holovaty")
self.assertEqual(a['another_age'], 68)
diff --git a/tests/aggregation_regress/fixtures/aggregation_regress.json b/tests/aggregation_regress/fixtures/aggregation_regress.json
deleted file mode 100644
index 597ac041f7..0000000000
--- a/tests/aggregation_regress/fixtures/aggregation_regress.json
+++ /dev/null
@@ -1,257 +0,0 @@
-[
- {
- "pk": 1,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Apress",
- "num_awards": 3
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Sams",
- "num_awards": 1
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Prentice Hall",
- "num_awards": 7
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Morgan Kaufmann",
- "num_awards": 9
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.publisher",
- "fields": {
- "name": "Jonno's House of Books",
- "num_awards": 0
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059725",
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "price": "30.00",
- "rating": 4.5,
- "authors": [1, 2],
- "contact": 1,
- "pages": 447,
- "pubdate": "2007-12-6"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 2,
- "isbn": "067232959",
- "name": "Sams Teach Yourself Django in 24 Hours",
- "price": "23.09",
- "rating": 3.0,
- "authors": [3],
- "contact": 3,
- "pages": 528,
- "pubdate": "2008-3-3"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059996",
- "name": "Practical Django Projects",
- "price": "29.69",
- "rating": 4.0,
- "authors": [4],
- "contact": 4,
- "pages": 300,
- "pubdate": "2008-6-23"
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 3,
- "isbn": "013235613",
- "name": "Python Web Development with Django",
- "price": "29.69",
- "rating": 4.0,
- "authors": [5, 6, 7],
- "contact": 5,
- "pages": 350,
- "pubdate": "2008-11-3"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 3,
- "isbn": "013790395",
- "name": "Artificial Intelligence: A Modern Approach",
- "price": "82.80",
- "rating": 4.0,
- "authors": [8, 9],
- "contact": 8,
- "pages": 1132,
- "pubdate": "1995-1-15"
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.book",
- "fields": {
- "publisher": 4,
- "isbn": "155860191",
- "name": "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "price": "75.00",
- "rating": 5.0,
- "authors": [8],
- "contact": 8,
- "pages": 946,
- "pubdate": "1991-10-15"
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [1, 2, 3, 4, 5, 6],
- "name": "Amazon.com",
- "original_opening": "1994-4-23 9:17:42",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [1, 3, 5, 6],
- "name": "Books.com",
- "original_opening": "2001-3-15 11:23:37",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.store",
- "fields": {
- "books": [3, 4, 6],
- "name": "Mamma and Pappa's Books",
- "original_opening": "1945-4-25 16:24:14",
- "friday_night_closing": "21:30:00"
- }
- },
- {
- "pk": 1,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 34,
- "friends": [2, 4],
- "name": "Adrian Holovaty"
- }
- },
- {
- "pk": 2,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 35,
- "friends": [1, 7],
- "name": "Jacob Kaplan-Moss"
- }
- },
- {
- "pk": 3,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 45,
- "friends": [],
- "name": "Brad Dayley"
- }
- },
- {
- "pk": 4,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 29,
- "friends": [1],
- "name": "James Bennett"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 37,
- "friends": [6, 7],
- "name": "Jeffrey Forcier"
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 29,
- "friends": [5, 7],
- "name": "Paul Bissex"
- }
- },
- {
- "pk": 7,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 25,
- "friends": [2, 5, 6],
- "name": "Wesley J. Chun"
- }
- },
- {
- "pk": 8,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 57,
- "friends": [9],
- "name": "Peter Norvig"
- }
- },
- {
- "pk": 9,
- "model": "aggregation_regress.author",
- "fields": {
- "age": 46,
- "friends": [8],
- "name": "Stuart Russell"
- }
- },
- {
- "pk": 5,
- "model": "aggregation_regress.hardbackbook",
- "fields": {
- "weight": 4.5
- }
- },
- {
- "pk": 6,
- "model": "aggregation_regress.hardbackbook",
- "fields": {
- "weight": 3.7
- }
- }
-]
diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py
index 530f2e7894..a0038945fa 100644
--- a/tests/aggregation_regress/tests.py
+++ b/tests/aggregation_regress/tests.py
@@ -14,12 +14,91 @@ from django.utils import six
from .models import (
Alfa, Author, Book, Bravo, Charlie, Clues, Entries, HardbackBook, ItemTag,
- Publisher, WithManualPK,
+ Publisher, Store, WithManualPK,
)
class AggregationTests(TestCase):
- fixtures = ["aggregation_regress.json"]
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.a1 = Author.objects.create(name='Adrian Holovaty', age=34)
+ cls.a2 = Author.objects.create(name='Jacob Kaplan-Moss', age=35)
+ cls.a3 = Author.objects.create(name='Brad Dayley', age=45)
+ cls.a4 = Author.objects.create(name='James Bennett', age=29)
+ cls.a5 = Author.objects.create(name='Jeffrey Forcier', age=37)
+ cls.a6 = Author.objects.create(name='Paul Bissex', age=29)
+ cls.a7 = Author.objects.create(name='Wesley J. Chun', age=25)
+ cls.a8 = Author.objects.create(name='Peter Norvig', age=57)
+ cls.a9 = Author.objects.create(name='Stuart Russell', age=46)
+ cls.a1.friends.add(cls.a2, cls.a4)
+ cls.a2.friends.add(cls.a1, cls.a7)
+ cls.a4.friends.add(cls.a1)
+ cls.a5.friends.add(cls.a6, cls.a7)
+ cls.a6.friends.add(cls.a5, cls.a7)
+ cls.a7.friends.add(cls.a2, cls.a5, cls.a6)
+ cls.a8.friends.add(cls.a9)
+ cls.a9.friends.add(cls.a8)
+
+ cls.p1 = Publisher.objects.create(name='Apress', num_awards=3)
+ cls.p2 = Publisher.objects.create(name='Sams', num_awards=1)
+ cls.p3 = Publisher.objects.create(name='Prentice Hall', num_awards=7)
+ cls.p4 = Publisher.objects.create(name='Morgan Kaufmann', num_awards=9)
+ cls.p5 = Publisher.objects.create(name="Jonno's House of Books", num_awards=0)
+
+ cls.b1 = Book.objects.create(
+ isbn='159059725', name='The Definitive Guide to Django: Web Development Done Right',
+ pages=447, rating=4.5, price=Decimal('30.00'), contact=cls.a1, publisher=cls.p1,
+ pubdate=datetime.date(2007, 12, 6)
+ )
+ cls.b2 = Book.objects.create(
+ isbn='067232959', name='Sams Teach Yourself Django in 24 Hours',
+ pages=528, rating=3.0, price=Decimal('23.09'), contact=cls.a3, publisher=cls.p2,
+ pubdate=datetime.date(2008, 3, 3)
+ )
+ cls.b3 = Book.objects.create(
+ isbn='159059996', name='Practical Django Projects',
+ pages=300, rating=4.0, price=Decimal('29.69'), contact=cls.a4, publisher=cls.p1,
+ pubdate=datetime.date(2008, 6, 23)
+ )
+ cls.b4 = Book.objects.create(
+ isbn='013235613', name='Python Web Development with Django',
+ pages=350, rating=4.0, price=Decimal('29.69'), contact=cls.a5, publisher=cls.p3,
+ pubdate=datetime.date(2008, 11, 3)
+ )
+ cls.b5 = HardbackBook.objects.create(
+ isbn='013790395', name='Artificial Intelligence: A Modern Approach',
+ pages=1132, rating=4.0, price=Decimal('82.80'), contact=cls.a8, publisher=cls.p3,
+ pubdate=datetime.date(1995, 1, 15), weight=4.5)
+ cls.b6 = HardbackBook.objects.create(
+ isbn='155860191', name='Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
+ pages=946, rating=5.0, price=Decimal('75.00'), contact=cls.a8, publisher=cls.p4,
+ pubdate=datetime.date(1991, 10, 15), weight=3.7)
+ cls.b1.authors.add(cls.a1, cls.a2)
+ cls.b2.authors.add(cls.a3)
+ cls.b3.authors.add(cls.a4)
+ cls.b4.authors.add(cls.a5, cls.a6, cls.a7)
+ cls.b5.authors.add(cls.a8, cls.a9)
+ cls.b6.authors.add(cls.a8)
+
+ s1 = Store.objects.create(
+ name='Amazon.com',
+ original_opening=datetime.datetime(1994, 4, 23, 9, 17, 42),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s2 = Store.objects.create(
+ name='Books.com',
+ original_opening=datetime.datetime(2001, 3, 15, 11, 23, 37),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s3 = Store.objects.create(
+ name="Mamma and Pappa's Books",
+ original_opening=datetime.datetime(1945, 4, 25, 16, 24, 14),
+ friday_night_closing=datetime.time(21, 30)
+ )
+ s1.books.add(cls.b1, cls.b2, cls.b3, cls.b4, cls.b5, cls.b6)
+ s2.books.add(cls.b1, cls.b3, cls.b5, cls.b6)
+ s3.books.add(cls.b3, cls.b4, cls.b6)
def assertObjectAttrs(self, obj, **kwargs):
for attr, value in six.iteritems(kwargs):
@@ -121,84 +200,90 @@ class AggregationTests(TestCase):
def test_annotation(self):
# Annotations get combined with extra select clauses
- obj = Book.objects.annotate(mean_auth_age=Avg("authors__age")).extra(select={"manufacture_cost": "price * .5"}).get(pk=2)
- self.assertObjectAttrs(obj,
- contact_id=3,
- id=2,
+ obj = Book.objects.annotate(mean_auth_age=Avg("authors__age")).extra(
+ select={"manufacture_cost": "price * .5"}).get(pk=self.b2.pk)
+ self.assertObjectAttrs(
+ obj,
+ contact_id=self.a3.id,
isbn='067232959',
mean_auth_age=45.0,
name='Sams Teach Yourself Django in 24 Hours',
pages=528,
price=Decimal("23.09"),
pubdate=datetime.date(2008, 3, 3),
- publisher_id=2,
+ publisher_id=self.p2.id,
rating=3.0
)
# Different DB backends return different types for the extra select computation
self.assertIn(obj.manufacture_cost, (11.545, Decimal('11.545')))
# Order of the annotate/extra in the query doesn't matter
- obj = Book.objects.extra(select={'manufacture_cost': 'price * .5'}).annotate(mean_auth_age=Avg('authors__age')).get(pk=2)
- self.assertObjectAttrs(obj,
- contact_id=3,
- id=2,
+ obj = Book.objects.extra(select={'manufacture_cost': 'price * .5'}).annotate(
+ mean_auth_age=Avg('authors__age')).get(pk=self.b2.pk)
+ self.assertObjectAttrs(
+ obj,
+ contact_id=self.a3.id,
isbn='067232959',
mean_auth_age=45.0,
name='Sams Teach Yourself Django in 24 Hours',
pages=528,
price=Decimal("23.09"),
pubdate=datetime.date(2008, 3, 3),
- publisher_id=2,
+ publisher_id=self.p2.id,
rating=3.0
)
# Different DB backends return different types for the extra select computation
self.assertIn(obj.manufacture_cost, (11.545, Decimal('11.545')))
# Values queries can be combined with annotate and extra
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'manufacture_cost': 'price * .5'}).values().get(pk=2)
+ obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(
+ select={'manufacture_cost': 'price * .5'}).values().get(pk=self.b2.pk)
manufacture_cost = obj['manufacture_cost']
self.assertIn(manufacture_cost, (11.545, Decimal('11.545')))
del obj['manufacture_cost']
self.assertEqual(obj, {
- "contact_id": 3,
- "id": 2,
- "isbn": "067232959",
- "mean_auth_age": 45.0,
- "name": "Sams Teach Yourself Django in 24 Hours",
- "pages": 528,
- "price": Decimal("23.09"),
- "pubdate": datetime.date(2008, 3, 3),
- "publisher_id": 2,
- "rating": 3.0,
+ 'id': self.b2.id,
+ 'contact_id': self.a3.id,
+ 'isbn': '067232959',
+ 'mean_auth_age': 45.0,
+ 'name': 'Sams Teach Yourself Django in 24 Hours',
+ 'pages': 528,
+ 'price': Decimal('23.09'),
+ 'pubdate': datetime.date(2008, 3, 3),
+ 'publisher_id': self.p2.id,
+ 'rating': 3.0,
})
# The order of the (empty) values, annotate and extra clauses doesn't
# matter
- obj = Book.objects.values().annotate(mean_auth_age=Avg('authors__age')).extra(select={'manufacture_cost': 'price * .5'}).get(pk=2)
+ obj = Book.objects.values().annotate(mean_auth_age=Avg('authors__age')).extra(
+ select={'manufacture_cost': 'price * .5'}).get(pk=self.b2.pk)
manufacture_cost = obj['manufacture_cost']
self.assertIn(manufacture_cost, (11.545, Decimal('11.545')))
del obj['manufacture_cost']
self.assertEqual(obj, {
- 'contact_id': 3,
- 'id': 2,
+ 'id': self.b2.id,
+ 'contact_id': self.a3.id,
'isbn': '067232959',
'mean_auth_age': 45.0,
'name': 'Sams Teach Yourself Django in 24 Hours',
'pages': 528,
- 'price': Decimal("23.09"),
+ 'price': Decimal('23.09'),
'pubdate': datetime.date(2008, 3, 3),
- 'publisher_id': 2,
+ 'publisher_id': self.p2.id,
'rating': 3.0
})
# If the annotation precedes the values clause, it won't be included
# unless it is explicitly named
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page': 'price / pages'}).values('name').get(pk=1)
+ obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(
+ select={'price_per_page': 'price / pages'}).values('name').get(pk=self.b1.pk)
self.assertEqual(obj, {
"name": 'The Definitive Guide to Django: Web Development Done Right',
})
- obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page': 'price / pages'}).values('name', 'mean_auth_age').get(pk=1)
+ obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(
+ select={'price_per_page': 'price / pages'}).values('name', 'mean_auth_age').get(pk=self.b1.pk)
self.assertEqual(obj, {
'mean_auth_age': 34.5,
'name': 'The Definitive Guide to Django: Web Development Done Right',
@@ -216,7 +301,8 @@ class AggregationTests(TestCase):
# The annotations are added to values output if values() precedes
# annotate()
- obj = Book.objects.values('name').annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page': 'price / pages'}).get(pk=1)
+ obj = Book.objects.values('name').annotate(mean_auth_age=Avg('authors__age')).extra(
+ select={'price_per_page': 'price / pages'}).get(pk=self.b1.pk)
self.assertEqual(obj, {
'mean_auth_age': 34.5,
'name': 'The Definitive Guide to Django: Web Development Done Right',
@@ -307,17 +393,18 @@ class AggregationTests(TestCase):
)
# Regression for #10064: select_related() plays nice with aggregates
- obj = Book.objects.select_related('publisher').annotate(num_authors=Count('authors')).values()[0]
+ obj = Book.objects.select_related('publisher').annotate(
+ num_authors=Count('authors')).values().get(isbn='013790395')
self.assertEqual(obj, {
- 'contact_id': 8,
- 'id': 5,
+ 'contact_id': self.a8.id,
+ 'id': self.b5.id,
'isbn': '013790395',
'name': 'Artificial Intelligence: A Modern Approach',
'num_authors': 2,
'pages': 1132,
'price': Decimal("82.8"),
'pubdate': datetime.date(1995, 1, 15),
- 'publisher_id': 3,
+ 'publisher_id': self.p3.id,
'rating': 4.0,
})
@@ -420,10 +507,10 @@ class AggregationTests(TestCase):
{'max_authors': None, 'max_rating': None, 'num_authors': 0, 'avg_authors': None, 'max_price': None}
)
- qs = Publisher.objects.filter(pk=5).annotate(num_authors=Count('book__authors'), avg_authors=Avg('book__authors'), max_authors=Max('book__authors'), max_price=Max('book__price'), max_rating=Max('book__rating')).values()
+ qs = Publisher.objects.filter(name="Jonno's House of Books").annotate(num_authors=Count('book__authors'), avg_authors=Avg('book__authors'), max_authors=Max('book__authors'), max_price=Max('book__price'), max_rating=Max('book__rating')).values()
self.assertQuerysetEqual(
qs, [
- {'max_authors': None, 'name': "Jonno's House of Books", 'num_awards': 0, 'max_price': None, 'num_authors': 0, 'max_rating': None, 'id': 5, 'avg_authors': None}
+ {'max_authors': None, 'name': "Jonno's House of Books", 'num_awards': 0, 'max_price': None, 'num_authors': 0, 'max_rating': None, 'id': self.p5.id, 'avg_authors': None}
],
lambda p: p
)
@@ -461,10 +548,10 @@ class AggregationTests(TestCase):
qs = Book.objects.extra(select={'pub': 'publisher_id'}).values('pub').annotate(Count('id')).order_by('pub')
self.assertQuerysetEqual(
qs, [
- {'pub': 1, 'id__count': 2},
- {'pub': 2, 'id__count': 1},
- {'pub': 3, 'id__count': 2},
- {'pub': 4, 'id__count': 1}
+ {'pub': self.b1.id, 'id__count': 2},
+ {'pub': self.b2.id, 'id__count': 1},
+ {'pub': self.b3.id, 'id__count': 2},
+ {'pub': self.b4.id, 'id__count': 1}
],
lambda b: b
)
@@ -472,10 +559,10 @@ class AggregationTests(TestCase):
qs = Book.objects.extra(select={'pub': 'publisher_id', 'foo': 'pages'}).values('pub').annotate(Count('id')).order_by('pub')
self.assertQuerysetEqual(
qs, [
- {'pub': 1, 'id__count': 2},
- {'pub': 2, 'id__count': 1},
- {'pub': 3, 'id__count': 2},
- {'pub': 4, 'id__count': 1}
+ {'pub': self.p1.id, 'id__count': 2},
+ {'pub': self.p2.id, 'id__count': 1},
+ {'pub': self.p3.id, 'id__count': 2},
+ {'pub': self.p4.id, 'id__count': 1}
],
lambda b: b
)
@@ -796,12 +883,15 @@ class AggregationTests(TestCase):
rating_sum=Sum("book__rating"),
book_count=Count("book")
).filter(
- Q(pk__lt=F("book_count")) | Q(rating_sum=None)
- ).order_by("pk")
+ Q(rating_sum__gt=F("book_count")) | Q(rating_sum=None)
+ ).order_by("num_awards")
self.assertQuerysetEqual(
qs, [
- "Apress",
"Jonno's House of Books",
+ "Sams",
+ "Apress",
+ "Prentice Hall",
+ "Morgan Kaufmann"
],
attrgetter("name")
)
@@ -1129,6 +1219,19 @@ class AggregationTests(TestCase):
'select__avg': Approximate(1.666, places=2),
})
+ def test_annotate_on_relation(self):
+ book = Book.objects.annotate(avg_price=Avg('price'), publisher_name=F('publisher__name')).get(pk=self.b1.pk)
+ self.assertEqual(book.avg_price, 30.00)
+ self.assertEqual(book.publisher_name, "Apress")
+
+ def test_aggregate_on_relation(self):
+ # A query with an existing annotation aggregation on a relation should
+ # succeed.
+ qs = Book.objects.annotate(avg_price=Avg('price')).aggregate(
+ publisher_awards=Sum('publisher__num_awards')
+ )
+ self.assertEqual(qs['publisher_awards'], 30)
+
class JoinPromotionTests(TestCase):
def test_ticket_21150(self):
@@ -1162,30 +1265,3 @@ class JoinPromotionTests(TestCase):
def test_non_nullable_fk_not_promoted(self):
qs = Book.objects.annotate(Count('contact__name'))
self.assertIn(' INNER JOIN ', str(qs.query))
-
-
-class AggregationOnRelationTest(TestCase):
- def setUp(self):
- self.a = Author.objects.create(name='Anssi', age=33)
- self.p = Publisher.objects.create(name='Manning', num_awards=3)
- Book.objects.create(isbn='asdf', name='Foo', pages=10, rating=0.1, price="0.0",
- contact=self.a, publisher=self.p, pubdate=datetime.date.today())
-
- def test_annotate_on_relation(self):
- qs = Book.objects.annotate(avg_price=Avg('price'), publisher_name=F('publisher__name'))
- self.assertEqual(qs[0].avg_price, 0.0)
- self.assertEqual(qs[0].publisher_name, "Manning")
-
- def test_aggregate_on_relation(self):
- # A query with an existing annotation aggregation on a relation should
- # succeed.
- qs = Book.objects.annotate(avg_price=Avg('price')).aggregate(
- publisher_awards=Sum('publisher__num_awards')
- )
- self.assertEqual(qs['publisher_awards'], 3)
- Book.objects.create(isbn='asdf', name='Foo', pages=10, rating=0.1, price="0.0",
- contact=self.a, publisher=self.p, pubdate=datetime.date.today())
- qs = Book.objects.annotate(avg_price=Avg('price')).aggregate(
- publisher_awards=Sum('publisher__num_awards')
- )
- self.assertEqual(qs['publisher_awards'], 6)
diff --git a/tests/annotations/fixtures/annotations.json b/tests/annotations/fixtures/annotations.json
deleted file mode 100644
index 09c9b8346b..0000000000
--- a/tests/annotations/fixtures/annotations.json
+++ /dev/null
@@ -1,243 +0,0 @@
-[
- {
- "pk": 1,
- "model": "annotations.publisher",
- "fields": {
- "name": "Apress",
- "num_awards": 3
- }
- },
- {
- "pk": 2,
- "model": "annotations.publisher",
- "fields": {
- "name": "Sams",
- "num_awards": 1
- }
- },
- {
- "pk": 3,
- "model": "annotations.publisher",
- "fields": {
- "name": "Prentice Hall",
- "num_awards": 7
- }
- },
- {
- "pk": 4,
- "model": "annotations.publisher",
- "fields": {
- "name": "Morgan Kaufmann",
- "num_awards": 9
- }
- },
- {
- "pk": 5,
- "model": "annotations.publisher",
- "fields": {
- "name": "Jonno's House of Books",
- "num_awards": 0
- }
- },
- {
- "pk": 1,
- "model": "annotations.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059725",
- "name": "The Definitive Guide to Django: Web Development Done Right",
- "price": "30.00",
- "rating": 4.5,
- "authors": [1, 2],
- "contact": 1,
- "pages": 447,
- "pubdate": "2007-12-6"
- }
- },
- {
- "pk": 2,
- "model": "annotations.book",
- "fields": {
- "publisher": 2,
- "isbn": "067232959",
- "name": "Sams Teach Yourself Django in 24 Hours",
- "price": "23.09",
- "rating": 3.0,
- "authors": [3],
- "contact": 3,
- "pages": 528,
- "pubdate": "2008-3-3"
- }
- },
- {
- "pk": 3,
- "model": "annotations.book",
- "fields": {
- "publisher": 1,
- "isbn": "159059996",
- "name": "Practical Django Projects",
- "price": "29.69",
- "rating": 4.0,
- "authors": [4],
- "contact": 4,
- "pages": 300,
- "pubdate": "2008-6-23"
- }
- },
- {
- "pk": 4,
- "model": "annotations.book",
- "fields": {
- "publisher": 3,
- "isbn": "013235613",
- "name": "Python Web Development with Django",
- "price": "29.69",
- "rating": 4.0,
- "authors": [5, 6, 7],
- "contact": 5,
- "pages": 350,
- "pubdate": "2008-11-3"
- }
- },
- {
- "pk": 5,
- "model": "annotations.book",
- "fields": {
- "publisher": 3,
- "isbn": "013790395",
- "name": "Artificial Intelligence: A Modern Approach",
- "price": "82.80",
- "rating": 4.0,
- "authors": [8, 9],
- "contact": 8,
- "pages": 1132,
- "pubdate": "1995-1-15"
- }
- },
- {
- "pk": 6,
- "model": "annotations.book",
- "fields": {
- "publisher": 4,
- "isbn": "155860191",
- "name": "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp",
- "price": "75.00",
- "rating": 5.0,
- "authors": [8],
- "contact": 8,
- "pages": 946,
- "pubdate": "1991-10-15"
- }
- },
- {
- "pk": 1,
- "model": "annotations.store",
- "fields": {
- "books": [1, 2, 3, 4, 5, 6],
- "name": "Amazon.com",
- "original_opening": "1994-4-23 9:17:42",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 2,
- "model": "annotations.store",
- "fields": {
- "books": [1, 3, 5, 6],
- "name": "Books.com",
- "original_opening": "2001-3-15 11:23:37",
- "friday_night_closing": "23:59:59"
- }
- },
- {
- "pk": 3,
- "model": "annotations.store",
- "fields": {
- "books": [3, 4, 6],
- "name": "Mamma and Pappa's Books",
- "original_opening": "1945-4-25 16:24:14",
- "friday_night_closing": "21:30:00"
- }
- },
- {
- "pk": 1,
- "model": "annotations.author",
- "fields": {
- "age": 34,
- "friends": [2, 4],
- "name": "Adrian Holovaty"
- }
- },
- {
- "pk": 2,
- "model": "annotations.author",
- "fields": {
- "age": 35,
- "friends": [1, 7],
- "name": "Jacob Kaplan-Moss"
- }
- },
- {
- "pk": 3,
- "model": "annotations.author",
- "fields": {
- "age": 45,
- "friends": [],
- "name": "Brad Dayley"
- }
- },
- {
- "pk": 4,
- "model": "annotations.author",
- "fields": {
- "age": 29,
- "friends": [1],
- "name": "James Bennett"
- }
- },
- {
- "pk": 5,
- "model": "annotations.author",
- "fields": {
- "age": 37,
- "friends": [6, 7],
- "name": "Jeffrey Forcier"
- }
- },
- {
- "pk": 6,
- "model": "annotations.author",
- "fields": {
- "age": 29,
- "friends": [5, 7],
- "name": "Paul Bissex"
- }
- },
- {
- "pk": 7,
- "model": "annotations.author",
- "fields": {
- "age": 25,
- "friends": [2, 5, 6],
- "name": "Wesley J. Chun"
- }
- },
- {
- "pk": 8,
- "model": "annotations.author",
- "fields": {
- "age": 57,
- "friends": [9],
- "name": "Peter Norvig"
- }
- },
- {
- "pk": 9,
- "model": "annotations.author",
- "fields": {
- "age": 46,
- "friends": [8],
- "name": "Stuart Russell"
- }
- }
-]
diff --git a/tests/annotations/tests.py b/tests/annotations/tests.py
index 2bf441716b..2fc42147eb 100644
--- a/tests/annotations/tests.py
+++ b/tests/annotations/tests.py
@@ -10,7 +10,9 @@ from django.db.models import (
from django.test import TestCase
from django.utils import six
-from .models import Author, Book, Company, DepartmentStore, Employee, Store
+from .models import (
+ Author, Book, Company, DepartmentStore, Employee, Publisher, Store,
+)
def cxOracle_513_py3_bug(func):
@@ -33,7 +35,88 @@ def cxOracle_513_py3_bug(func):
class NonAggregateAnnotationTestCase(TestCase):
- fixtures = ["annotations.json"]
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.a1 = Author.objects.create(name='Adrian Holovaty', age=34)
+ cls.a2 = Author.objects.create(name='Jacob Kaplan-Moss', age=35)
+ cls.a3 = Author.objects.create(name='Brad Dayley', age=45)
+ cls.a4 = Author.objects.create(name='James Bennett', age=29)
+ cls.a5 = Author.objects.create(name='Jeffrey Forcier', age=37)
+ cls.a6 = Author.objects.create(name='Paul Bissex', age=29)
+ cls.a7 = Author.objects.create(name='Wesley J. Chun', age=25)
+ cls.a8 = Author.objects.create(name='Peter Norvig', age=57)
+ cls.a9 = Author.objects.create(name='Stuart Russell', age=46)
+ cls.a1.friends.add(cls.a2, cls.a4)
+ cls.a2.friends.add(cls.a1, cls.a7)
+ cls.a4.friends.add(cls.a1)
+ cls.a5.friends.add(cls.a6, cls.a7)
+ cls.a6.friends.add(cls.a5, cls.a7)
+ cls.a7.friends.add(cls.a2, cls.a5, cls.a6)
+ cls.a8.friends.add(cls.a9)
+ cls.a9.friends.add(cls.a8)
+
+ cls.p1 = Publisher.objects.create(name='Apress', num_awards=3)
+ cls.p2 = Publisher.objects.create(name='Sams', num_awards=1)
+ cls.p3 = Publisher.objects.create(name='Prentice Hall', num_awards=7)
+ cls.p4 = Publisher.objects.create(name='Morgan Kaufmann', num_awards=9)
+ cls.p5 = Publisher.objects.create(name="Jonno's House of Books", num_awards=0)
+
+ cls.b1 = Book.objects.create(
+ isbn='159059725', name='The Definitive Guide to Django: Web Development Done Right',
+ pages=447, rating=4.5, price=Decimal('30.00'), contact=cls.a1, publisher=cls.p1,
+ pubdate=datetime.date(2007, 12, 6)
+ )
+ cls.b2 = Book.objects.create(
+ isbn='067232959', name='Sams Teach Yourself Django in 24 Hours',
+ pages=528, rating=3.0, price=Decimal('23.09'), contact=cls.a3, publisher=cls.p2,
+ pubdate=datetime.date(2008, 3, 3)
+ )
+ cls.b3 = Book.objects.create(
+ isbn='159059996', name='Practical Django Projects',
+ pages=300, rating=4.0, price=Decimal('29.69'), contact=cls.a4, publisher=cls.p1,
+ pubdate=datetime.date(2008, 6, 23)
+ )
+ cls.b4 = Book.objects.create(
+ isbn='013235613', name='Python Web Development with Django',
+ pages=350, rating=4.0, price=Decimal('29.69'), contact=cls.a5, publisher=cls.p3,
+ pubdate=datetime.date(2008, 11, 3)
+ )
+ cls.b5 = Book.objects.create(
+ isbn='013790395', name='Artificial Intelligence: A Modern Approach',
+ pages=1132, rating=4.0, price=Decimal('82.80'), contact=cls.a8, publisher=cls.p3,
+ pubdate=datetime.date(1995, 1, 15)
+ )
+ cls.b6 = Book.objects.create(
+ isbn='155860191', name='Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
+ pages=946, rating=5.0, price=Decimal('75.00'), contact=cls.a8, publisher=cls.p4,
+ pubdate=datetime.date(1991, 10, 15)
+ )
+ cls.b1.authors.add(cls.a1, cls.a2)
+ cls.b2.authors.add(cls.a3)
+ cls.b3.authors.add(cls.a4)
+ cls.b4.authors.add(cls.a5, cls.a6, cls.a7)
+ cls.b5.authors.add(cls.a8, cls.a9)
+ cls.b6.authors.add(cls.a8)
+
+ s1 = Store.objects.create(
+ name='Amazon.com',
+ original_opening=datetime.datetime(1994, 4, 23, 9, 17, 42),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s2 = Store.objects.create(
+ name='Books.com',
+ original_opening=datetime.datetime(2001, 3, 15, 11, 23, 37),
+ friday_night_closing=datetime.time(23, 59, 59)
+ )
+ s3 = Store.objects.create(
+ name="Mamma and Pappa's Books",
+ original_opening=datetime.datetime(1945, 4, 25, 16, 24, 14),
+ friday_night_closing=datetime.time(21, 30)
+ )
+ s1.books.add(cls.b1, cls.b2, cls.b3, cls.b4, cls.b5, cls.b6)
+ s2.books.add(cls.b1, cls.b3, cls.b5, cls.b6)
+ s3.books.add(cls.b3, cls.b4, cls.b6)
def test_basic_annotation(self):
books = Book.objects.annotate(
@@ -100,13 +183,13 @@ class NonAggregateAnnotationTestCase(TestCase):
).filter(sum_rating=F('nope')))
def test_update_with_annotation(self):
- book_preupdate = Book.objects.get(pk=2)
+ book_preupdate = Book.objects.get(pk=self.b2.pk)
Book.objects.annotate(other_rating=F('rating') - 1).update(rating=F('other_rating'))
- book_postupdate = Book.objects.get(pk=2)
+ book_postupdate = Book.objects.get(pk=self.b2.pk)
self.assertEqual(book_preupdate.rating - 1, book_postupdate.rating)
def test_annotation_with_m2m(self):
- books = Book.objects.annotate(author_age=F('authors__age')).filter(pk=1).order_by('author_age')
+ books = Book.objects.annotate(author_age=F('authors__age')).filter(pk=self.b1.pk).order_by('author_age')
self.assertEqual(books[0].author_age, 34)
self.assertEqual(books[1].author_age, 35)
@@ -132,7 +215,7 @@ class NonAggregateAnnotationTestCase(TestCase):
"""
# annotate references a field in values()
qs = Book.objects.values('rating').annotate(other_rating=F('rating') - 1)
- book = qs.get(pk=1)
+ book = qs.get(pk=self.b1.pk)
self.assertEqual(book['rating'] - 1, book['other_rating'])
# filter refs the annotated value
diff --git a/tests/auth_tests/fixtures/authtestdata.json b/tests/auth_tests/fixtures/authtestdata.json
deleted file mode 100644
index 931328899b..0000000000
--- a/tests/auth_tests/fixtures/authtestdata.json
+++ /dev/null
@@ -1,110 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient2@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "staffmember@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "4",
- "model": "auth.user",
- "fields": {
- "username": "empty_password",
- "first_name": "Empty",
- "last_name": "Password",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "",
- "email": "empty_password@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "5",
- "model": "auth.user",
- "fields": {
- "username": "unmanageable_password",
- "first_name": "Unmanageable",
- "last_name": "Password",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "$",
- "email": "unmanageable_password@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "6",
- "model": "auth.user",
- "fields": {
- "username": "unknown_password",
- "first_name": "Unknown",
- "last_name": "Password",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "foo$bar",
- "email": "unknown_password@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-]
diff --git a/tests/auth_tests/fixtures/context-processors-users.xml b/tests/auth_tests/fixtures/context-processors-users.xml
deleted file mode 100644
index aba8f4aace..0000000000
--- a/tests/auth_tests/fixtures/context-processors-users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/tests/auth_tests/fixtures/custom_user.json b/tests/auth_tests/fixtures/custom_user.json
deleted file mode 100644
index 770bea6541..0000000000
--- a/tests/auth_tests/fixtures/custom_user.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.customuser",
- "fields": {
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "last_login": "2006-12-17 07:03:31",
- "email": "staffmember@example.com",
- "is_active": true,
- "is_admin": false,
- "date_of_birth": "1976-11-08"
- }
- }
-] \ No newline at end of file
diff --git a/tests/auth_tests/test_context_processors.py b/tests/auth_tests/test_context_processors.py
index 26d73f2841..5f91fd1e0a 100644
--- a/tests/auth_tests/test_context_processors.py
+++ b/tests/auth_tests/test_context_processors.py
@@ -1,3 +1,5 @@
+import datetime
+
from django.contrib.auth import authenticate
from django.contrib.auth.context_processors import PermLookupDict, PermWrapper
from django.contrib.auth.models import Permission, User
@@ -67,7 +69,16 @@ class AuthContextProcessorTests(TestCase):
"""
Tests for the ``django.contrib.auth.context_processors.auth`` processor
"""
- fixtures = ['context-processors-users.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)
+ )
@override_settings(MIDDLEWARE_CLASSES=AUTH_MIDDLEWARE_CLASSES)
def test_session_not_accessed(self):
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py
index 5d6ca82fe1..28dca7b3a1 100644
--- a/tests/auth_tests/test_forms.py
+++ b/tests/auth_tests/test_forms.py
@@ -1,5 +1,6 @@
from __future__ import unicode_literals
+import datetime
import re
from django import forms
@@ -22,10 +23,49 @@ from django.utils.translation import ugettext as _
from .settings import AUTH_TEMPLATES
-@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
-class UserCreationFormTest(TestCase):
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u2 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='inactive',
+ first_name='Inactive', last_name='User', email='testclient2@example.com', is_staff=False, is_active=False,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='staffmember@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u4 = User.objects.create(
+ password='', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='empty_password', first_name='Empty', last_name='Password', email='empty_password@example.com',
+ is_staff=False, is_active=True, date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u5 = User.objects.create(
+ password='$', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unmanageable_password', first_name='Unmanageable', last_name='Password',
+ email='unmanageable_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u6 = User.objects.create(
+ password='foo$bar', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unknown_password', first_name='Unknown', last_name='Password',
+ email='unknown_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+
- fixtures = ['authtestdata.json']
+@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
+class UserCreationFormTest(TestDataMixin, TestCase):
def test_user_already_exists(self):
data = {
@@ -90,9 +130,7 @@ class UserCreationFormTest(TestCase):
@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
-class AuthenticationFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
+class AuthenticationFormTest(TestDataMixin, TestCase):
def test_invalid_username(self):
# The user submits an invalid username.
@@ -202,9 +240,7 @@ class AuthenticationFormTest(TestCase):
@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
-class SetPasswordFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
+class SetPasswordFormTest(TestDataMixin, TestCase):
def test_password_verification(self):
# The two new passwords do not match.
@@ -229,9 +265,7 @@ class SetPasswordFormTest(TestCase):
@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
-class PasswordChangeFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
+class PasswordChangeFormTest(TestDataMixin, TestCase):
def test_incorrect_password(self):
user = User.objects.get(username='testclient')
@@ -277,9 +311,7 @@ class PasswordChangeFormTest(TestCase):
@override_settings(USE_TZ=False, PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'])
-class UserChangeFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
+class UserChangeFormTest(TestDataMixin, TestCase):
def test_username_validity(self):
user = User.objects.get(username='testclient')
@@ -359,9 +391,7 @@ class UserChangeFormTest(TestCase):
TEMPLATES=AUTH_TEMPLATES,
USE_TZ=False,
)
-class PasswordResetFormTest(TestCase):
-
- fixtures = ['authtestdata.json']
+class PasswordResetFormTest(TestDataMixin, TestCase):
@classmethod
def setUpClass(cls):
diff --git a/tests/auth_tests/test_models.py b/tests/auth_tests/test_models.py
index 5dff9c16b0..62c38ed578 100644
--- a/tests/auth_tests/test_models.py
+++ b/tests/auth_tests/test_models.py
@@ -1,3 +1,5 @@
+import datetime
+
from django.contrib.auth import get_user_model
from django.contrib.auth.models import (
AbstractUser, Group, Permission, User, UserManager,
@@ -10,7 +12,44 @@ from django.test import TestCase, override_settings
@override_settings(USE_TZ=False)
class NaturalKeysTestCase(TestCase):
- fixtures = ['authtestdata.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u2 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='inactive',
+ first_name='Inactive', last_name='User', email='testclient2@example.com', is_staff=False, is_active=False,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='staffmember@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u4 = User.objects.create(
+ password='', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='empty_password', first_name='Empty', last_name='Password', email='empty_password@example.com',
+ is_staff=False, is_active=True, date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u5 = User.objects.create(
+ password='$', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unmanageable_password', first_name='Unmanageable', last_name='Password',
+ email='unmanageable_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u6 = User.objects.create(
+ password='foo$bar', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unknown_password', first_name='Unknown', last_name='Password',
+ email='unknown_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
def test_user_natural_key(self):
staff_user = User.objects.get(username='staff')
diff --git a/tests/auth_tests/test_signals.py b/tests/auth_tests/test_signals.py
index 893dbad605..e81c202211 100644
--- a/tests/auth_tests/test_signals.py
+++ b/tests/auth_tests/test_signals.py
@@ -1,3 +1,5 @@
+import datetime
+
from django.contrib.auth import signals
from django.contrib.auth.models import User
from django.test import TestCase, override_settings
@@ -8,7 +10,21 @@ from django.test.client import RequestFactory
PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='auth_tests.urls')
class SignalTestCase(TestCase):
- fixtures = ['authtestdata.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='staffmember@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
def listener_login(self, user, **kwargs):
self.logged_in.append(user)
@@ -66,13 +82,13 @@ class SignalTestCase(TestCase):
def test_update_last_login(self):
"""Ensure that only `last_login` is updated in `update_last_login`"""
- user = User.objects.get(pk=3)
+ user = self.u3
old_last_login = user.last_login
user.username = "This username shouldn't get saved"
request = RequestFactory().get('/login')
signals.user_logged_in.send(sender=user.__class__, request=request,
user=user)
- user = User.objects.get(pk=3)
+ user = User.objects.get(pk=self.u3.pk)
self.assertEqual(user.username, 'staff')
self.assertNotEqual(user.last_login, old_last_login)
diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py
index d6f3b8eca6..a6571a7cca 100644
--- a/tests/auth_tests/test_views.py
+++ b/tests/auth_tests/test_views.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import datetime
import itertools
import re
from importlib import import_module
@@ -13,6 +14,7 @@ from django.contrib.auth.forms import (
AuthenticationForm, PasswordChangeForm, SetPasswordForm,
)
from django.contrib.auth.models import User
+from django.contrib.auth.tests.custom_user import CustomUser
from django.contrib.auth.views import login as login_view, redirect_to_login
from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.sites.requests import RequestSite
@@ -49,7 +51,44 @@ class AuthViewsTestCase(TestCase):
"""
Helper base class for all the follow test cases.
"""
- fixtures = ['authtestdata.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u2 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='inactive',
+ first_name='Inactive', last_name='User', email='testclient2@example.com', is_staff=False, is_active=False,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='staffmember@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u4 = User.objects.create(
+ password='', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='empty_password', first_name='Empty', last_name='Password', email='empty_password@example.com',
+ is_staff=False, is_active=True, date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u5 = User.objects.create(
+ password='$', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unmanageable_password', first_name='Unmanageable', last_name='Password',
+ email='unmanageable_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u6 = User.objects.create(
+ password='foo$bar', last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False,
+ username='unknown_password', first_name='Unknown', last_name='Password',
+ email='unknown_password@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
def login(self, username='testclient', password='password'):
response = self.client.post('/login/', {
@@ -333,9 +372,16 @@ class PasswordResetTest(AuthViewsTestCase):
@override_settings(AUTH_USER_MODEL='auth.CustomUser')
class CustomUserPasswordResetTest(AuthViewsTestCase):
- fixtures = ['custom_user.json']
user_email = 'staffmember@example.com'
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = CustomUser.custom_objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), email='staffmember@example.com', is_active=True,
+ is_admin=False, date_of_birth=datetime.date(1976, 11, 8)
+ )
+
def _test_confirm_start(self):
# Start by creating the email
response = self.client.post('/password_reset/', {'email': self.user_email})
@@ -363,7 +409,6 @@ class CustomUserPasswordResetTest(AuthViewsTestCase):
@override_settings(AUTH_USER_MODEL='auth.UUIDUser')
class UUIDUserPasswordResetTest(CustomUserPasswordResetTest):
- fixtures = None
def _test_confirm_start(self):
# instead of fixture
@@ -846,7 +891,7 @@ class ChangelistTests(AuthViewsTestCase):
# Make me a superuser before logging in.
User.objects.filter(username='testclient').update(is_staff=True, is_superuser=True)
self.login()
- self.admin = User.objects.get(pk=1)
+ self.admin = User.objects.get(pk=self.u1.pk)
def get_user_data(self, user):
return {
diff --git a/tests/contenttypes_tests/fixtures/testdata.json b/tests/contenttypes_tests/fixtures/testdata.json
deleted file mode 100644
index 114b1e262f..0000000000
--- a/tests/contenttypes_tests/fixtures/testdata.json
+++ /dev/null
@@ -1,68 +0,0 @@
-[
- {
- "pk": 1,
- "model": "contenttypes_tests.author",
- "fields": {
- "name": "Boris"
- }
- },
- {
- "pk": 1,
- "model": "contenttypes_tests.article",
- "fields": {
- "author": 1,
- "title": "Old Article",
- "slug": "old_article",
- "date_created": "2001-01-01 21:22:23"
- }
- },
- {
- "pk": 2,
- "model": "contenttypes_tests.article",
- "fields": {
- "author": 1,
- "title": "Current Article",
- "slug": "current_article",
- "date_created": "2007-09-17 21:22:23"
- }
- },
- {
- "pk": 3,
- "model": "contenttypes_tests.article",
- "fields": {
- "author": 1,
- "title": "Future Article",
- "slug": "future_article",
- "date_created": "3000-01-01 21:22:23"
- }
- },
- {
- "pk": 1,
- "model": "contenttypes_tests.schemeincludedurl",
- "fields": {
- "url": "http://test_scheme_included_http/"
- }
- },
- {
- "pk": 2,
- "model": "contenttypes_tests.schemeincludedurl",
- "fields": {
- "url": "https://test_scheme_included_https/"
- }
- },
- {
- "pk": 3,
- "model": "contenttypes_tests.schemeincludedurl",
- "fields": {
- "url": "//test_default_scheme_kept/"
- }
- },
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "testserver",
- "name": "testserver"
- }
- }
-]
diff --git a/tests/contenttypes_tests/tests.py b/tests/contenttypes_tests/tests.py
index a791f8df3c..3ae4774033 100644
--- a/tests/contenttypes_tests/tests.py
+++ b/tests/contenttypes_tests/tests.py
@@ -1,12 +1,15 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import datetime
+
from django.apps.registry import Apps, apps
from django.contrib.contenttypes import management
from django.contrib.contenttypes.fields import (
GenericForeignKey, GenericRelation,
)
from django.contrib.contenttypes.models import ContentType
+from django.contrib.sites.models import Site
from django.core import checks
from django.db import connections, models
from django.test import TestCase, override_settings
@@ -18,7 +21,29 @@ from .models import Article, Author, SchemeIncludedURL
@override_settings(ROOT_URLCONF='contenttypes_tests.urls')
class ContentTypesViewsTests(TestCase):
- fixtures = ['testdata.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='testserver', name='testserver')
+ cls.site1.save()
+ cls.author1 = Author.objects.create(name='Boris')
+ cls.article1 = Article.objects.create(
+ title='Old Article', slug='old_article', author=cls.author1,
+ date_created=datetime.datetime(2001, 1, 1, 21, 22, 23)
+ )
+ cls.article2 = Article.objects.create(
+ title='Current Article', slug='current_article', author=cls.author1,
+ date_created=datetime.datetime(2007, 9, 17, 21, 22, 23)
+ )
+ cls.article3 = Article.objects.create(
+ title='Future Article', slug='future_article', author=cls.author1,
+ date_created=datetime.datetime(3000, 1, 1, 21, 22, 23)
+ )
+ cls.scheme1 = SchemeIncludedURL.objects.create(url='http://test_scheme_included_http/')
+ cls.scheme2 = SchemeIncludedURL.objects.create(url='https://test_scheme_included_https/')
+ cls.scheme3 = SchemeIncludedURL.objects.create(url='//test_default_scheme_kept/')
def test_shortcut_with_absolute_url(self):
"Can view a shortcut for an Author object that has a get_absolute_url method"
@@ -31,8 +56,7 @@ class ContentTypesViewsTests(TestCase):
def test_shortcut_with_absolute_url_including_scheme(self):
"""
Can view a shortcut when object's get_absolute_url returns a full URL
- the tested URLs are in fixtures/testdata.json :
- "http://...", "https://..." and "//..."
+ the tested URLs are: "http://...", "https://..." and "//..."
"""
for obj in SchemeIncludedURL.objects.all():
short_url = '/shortcut/%s/%s/' % (ContentType.objects.get_for_model(SchemeIncludedURL).id, obj.pk)
diff --git a/tests/flatpages_tests/fixtures/example_site.json b/tests/flatpages_tests/fixtures/example_site.json
deleted file mode 100644
index 71aa84de12..0000000000
--- a/tests/flatpages_tests/fixtures/example_site.json
+++ /dev/null
@@ -1,11 +0,0 @@
-[
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "example.com",
- "name": "example.com"
- }
- }
-]
-
diff --git a/tests/flatpages_tests/fixtures/sample_flatpages.json b/tests/flatpages_tests/fixtures/sample_flatpages.json
deleted file mode 100644
index 885af1eb60..0000000000
--- a/tests/flatpages_tests/fixtures/sample_flatpages.json
+++ /dev/null
@@ -1,63 +0,0 @@
-[
- {
- "pk": 1,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": false,
- "title": "A Flatpage",
- "url": "/flatpage/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it flat!",
- "enable_comments": false
- }
- },
- {
- "pk": 2,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": false,
- "title": "A Nested Flatpage",
- "url": "/location/flatpage/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it flat and deep!",
- "enable_comments": false
- }
- },
-
- {
- "pk": 101,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": true,
- "title": "Sekrit Flatpage",
- "url": "/sekrit/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it sekrit!",
- "enable_comments": false
- }
- },
- {
- "pk": 102,
- "model": "flatpages.flatpage",
- "fields": {
- "registration_required": true,
- "title": "Sekrit Nested Flatpage",
- "url": "/location/sekrit/",
- "template_name": "",
- "sites": [
- 1
- ],
- "content": "Isn't it sekrit and deep!",
- "enable_comments": false
- }
- }
-] \ No newline at end of file
diff --git a/tests/flatpages_tests/test_csrf.py b/tests/flatpages_tests/test_csrf.py
index a3dd8d2cdd..5ce77dbe79 100644
--- a/tests/flatpages_tests/test_csrf.py
+++ b/tests/flatpages_tests/test_csrf.py
@@ -1,4 +1,6 @@
from django.contrib.auth.models import User
+from django.contrib.flatpages.models import FlatPage
+from django.contrib.sites.models import Site
from django.test import Client, TestCase, modify_settings, override_settings
from .settings import FLATPAGES_TEMPLATES
@@ -21,7 +23,33 @@ from .settings import FLATPAGES_TEMPLATES
SITE_ID=1,
)
class FlatpageCSRFTests(TestCase):
- fixtures = ['sample_flatpages', 'example_site']
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='example.com', name='example.com')
+ cls.site1.save()
+ cls.fp1 = FlatPage.objects.create(
+ url='/flatpage/', title='A Flatpage', content="Isn't it flat!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp2 = FlatPage.objects.create(
+ url='/location/flatpage/', title='A Nested Flatpage', content="Isn't it flat and deep!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp3 = FlatPage.objects.create(
+ url='/sekrit/', title='Sekrit Flatpage', content="Isn't it sekrit!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp4 = FlatPage.objects.create(
+ url='/location/sekrit/', title='Sekrit Nested Flatpage', content="Isn't it sekrit and deep!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp1.sites.add(cls.site1)
+ cls.fp2.sites.add(cls.site1)
+ cls.fp3.sites.add(cls.site1)
+ cls.fp4.sites.add(cls.site1)
def setUp(self):
self.client = Client(enforce_csrf_checks=True)
diff --git a/tests/flatpages_tests/test_forms.py b/tests/flatpages_tests/test_forms.py
index 8f05d8562b..6e6721494b 100644
--- a/tests/flatpages_tests/test_forms.py
+++ b/tests/flatpages_tests/test_forms.py
@@ -11,7 +11,13 @@ from django.utils import translation
@modify_settings(INSTALLED_APPS={'append': ['django.contrib.flatpages', ]})
@override_settings(SITE_ID=1)
class FlatpageAdminFormTests(TestCase):
- fixtures = ['example_site']
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='example.com', name='example.com')
+ cls.site1.save()
def setUp(self):
# Site fields cache needs to be cleared after flatpages is added to
diff --git a/tests/flatpages_tests/test_middleware.py b/tests/flatpages_tests/test_middleware.py
index 26267036b2..c6b040775e 100644
--- a/tests/flatpages_tests/test_middleware.py
+++ b/tests/flatpages_tests/test_middleware.py
@@ -1,11 +1,42 @@
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.flatpages.models import FlatPage
+from django.contrib.sites.models import Site
from django.test import TestCase, modify_settings, override_settings
from .settings import FLATPAGES_TEMPLATES
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='example.com', name='example.com')
+ cls.site1.save()
+ cls.fp1 = FlatPage.objects.create(
+ url='/flatpage/', title='A Flatpage', content="Isn't it flat!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp2 = FlatPage.objects.create(
+ url='/location/flatpage/', title='A Nested Flatpage', content="Isn't it flat and deep!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp3 = FlatPage.objects.create(
+ url='/sekrit/', title='Sekrit Flatpage', content="Isn't it sekrit!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp4 = FlatPage.objects.create(
+ url='/location/sekrit/', title='Sekrit Nested Flatpage', content="Isn't it sekrit and deep!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp1.sites.add(cls.site1)
+ cls.fp2.sites.add(cls.site1)
+ cls.fp3.sites.add(cls.site1)
+ cls.fp4.sites.add(cls.site1)
+
+
@modify_settings(INSTALLED_APPS={'append': 'django.contrib.flatpages'})
@override_settings(
LOGIN_URL='/accounts/login/',
@@ -21,8 +52,7 @@ from .settings import FLATPAGES_TEMPLATES
TEMPLATES=FLATPAGES_TEMPLATES,
SITE_ID=1,
)
-class FlatpageMiddlewareTests(TestCase):
- fixtures = ['sample_flatpages', 'example_site']
+class FlatpageMiddlewareTests(TestDataMixin, TestCase):
def test_view_flatpage(self):
"A flatpage can be served through a view, even when the middleware is in use"
@@ -98,8 +128,7 @@ class FlatpageMiddlewareTests(TestCase):
TEMPLATES=FLATPAGES_TEMPLATES,
SITE_ID=1,
)
-class FlatpageMiddlewareAppendSlashTests(TestCase):
- fixtures = ['sample_flatpages', 'example_site']
+class FlatpageMiddlewareAppendSlashTests(TestDataMixin, TestCase):
def test_redirect_view_flatpage(self):
"A flatpage can be served through a view and should add a slash"
diff --git a/tests/flatpages_tests/test_templatetags.py b/tests/flatpages_tests/test_templatetags.py
index a0dd961c35..994491e1a0 100644
--- a/tests/flatpages_tests/test_templatetags.py
+++ b/tests/flatpages_tests/test_templatetags.py
@@ -1,4 +1,6 @@
from django.contrib.auth.models import AnonymousUser, User
+from django.contrib.flatpages.models import FlatPage
+from django.contrib.sites.models import Site
from django.template import Context, Template, TemplateSyntaxError
from django.test import TestCase, modify_settings, override_settings
@@ -20,7 +22,33 @@ from .settings import FLATPAGES_TEMPLATES
SITE_ID=1,
)
class FlatpageTemplateTagTests(TestCase):
- fixtures = ['sample_flatpages']
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='example.com', name='example.com')
+ cls.site1.save()
+ cls.fp1 = FlatPage.objects.create(
+ url='/flatpage/', title='A Flatpage', content="Isn't it flat!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp2 = FlatPage.objects.create(
+ url='/location/flatpage/', title='A Nested Flatpage', content="Isn't it flat and deep!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp3 = FlatPage.objects.create(
+ url='/sekrit/', title='Sekrit Flatpage', content="Isn't it sekrit!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp4 = FlatPage.objects.create(
+ url='/location/sekrit/', title='Sekrit Nested Flatpage', content="Isn't it sekrit and deep!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp1.sites.add(cls.site1)
+ cls.fp2.sites.add(cls.site1)
+ cls.fp3.sites.add(cls.site1)
+ cls.fp4.sites.add(cls.site1)
def test_get_flatpages_tag(self):
"The flatpage template tag retrieves unregistered prefixed flatpages by default"
diff --git a/tests/flatpages_tests/test_views.py b/tests/flatpages_tests/test_views.py
index 7582a7284a..4e9e38768b 100644
--- a/tests/flatpages_tests/test_views.py
+++ b/tests/flatpages_tests/test_views.py
@@ -1,11 +1,42 @@
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.flatpages.models import FlatPage
+from django.contrib.sites.models import Site
from django.test import TestCase, modify_settings, override_settings
from .settings import FLATPAGES_TEMPLATES
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ # don't use the manager because we want to ensure the site exists
+ # with pk=1, regardless of whether or not it already exists.
+ cls.site1 = Site(pk=1, domain='example.com', name='example.com')
+ cls.site1.save()
+ cls.fp1 = FlatPage.objects.create(
+ url='/flatpage/', title='A Flatpage', content="Isn't it flat!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp2 = FlatPage.objects.create(
+ url='/location/flatpage/', title='A Nested Flatpage', content="Isn't it flat and deep!",
+ enable_comments=False, template_name='', registration_required=False
+ )
+ cls.fp3 = FlatPage.objects.create(
+ url='/sekrit/', title='Sekrit Flatpage', content="Isn't it sekrit!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp4 = FlatPage.objects.create(
+ url='/location/sekrit/', title='Sekrit Nested Flatpage', content="Isn't it sekrit and deep!",
+ enable_comments=False, template_name='', registration_required=True
+ )
+ cls.fp1.sites.add(cls.site1)
+ cls.fp2.sites.add(cls.site1)
+ cls.fp3.sites.add(cls.site1)
+ cls.fp4.sites.add(cls.site1)
+
+
@modify_settings(INSTALLED_APPS={'append': 'django.contrib.flatpages'})
@override_settings(
LOGIN_URL='/accounts/login/',
@@ -21,8 +52,7 @@ from .settings import FLATPAGES_TEMPLATES
TEMPLATES=FLATPAGES_TEMPLATES,
SITE_ID=1,
)
-class FlatpageViewTests(TestCase):
- fixtures = ['sample_flatpages', 'example_site']
+class FlatpageViewTests(TestDataMixin, TestCase):
def test_view_flatpage(self):
"A flatpage can be served through a view"
@@ -87,8 +117,7 @@ class FlatpageViewTests(TestCase):
TEMPLATES=FLATPAGES_TEMPLATES,
SITE_ID=1,
)
-class FlatpageViewAppendSlashTests(TestCase):
- fixtures = ['sample_flatpages', 'example_site']
+class FlatpageViewAppendSlashTests(TestDataMixin, TestCase):
def test_redirect_view_flatpage(self):
"A flatpage can be served through a view and should add a slash"
diff --git a/tests/generic_inline_admin/fixtures/users.xml b/tests/generic_inline_admin/fixtures/users.xml
deleted file mode 100644
index 6cf441f01e..0000000000
--- a/tests/generic_inline_admin/fixtures/users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2007-05-30 13:20:10</field>
- <field type="DateTimeField" name="date_joined">2007-05-30 13:20:10</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects> \ No newline at end of file
diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py
index 91883e1170..834cd80c5d 100644
--- a/tests/generic_inline_admin/tests.py
+++ b/tests/generic_inline_admin/tests.py
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import datetime
+
from django.contrib import admin
from django.contrib.admin.sites import AdminSite
from django.contrib.auth.models import User
@@ -15,6 +17,19 @@ from .admin import MediaInline, MediaPermanentInline, site as admin_site
from .models import Category, Episode, EpisodePermanent, Media
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ # password = "secret"
+ User.objects.create(
+ pk=100, username='super', first_name='Super', last_name='User', email='super@example.com',
+ password='sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158', is_active=True, is_superuser=True,
+ is_staff=True, last_login=datetime.datetime(2007, 5, 30, 13, 20, 10),
+ date_joined=datetime.datetime(2007, 5, 30, 13, 20, 10)
+ )
+
+
# Set DEBUG to True to ensure {% include %} will raise exceptions.
# That is how inlines are rendered and #9498 will bubble up if it is an issue.
@override_settings(
@@ -22,8 +37,7 @@ from .models import Category, Episode, EpisodePermanent, Media
PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="generic_inline_admin.urls",
)
-class GenericAdminViewTest(TestCase):
- fixtures = ['users.xml']
+class GenericAdminViewTest(TestDataMixin, TestCase):
def setUp(self):
self.client.login(username='super', password='secret')
@@ -129,8 +143,7 @@ class GenericAdminViewTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="generic_inline_admin.urls")
-class GenericInlineAdminParametersTest(TestCase):
- fixtures = ['users.xml']
+class GenericInlineAdminParametersTest(TestDataMixin, TestCase):
def setUp(self):
self.client.login(username='super', password='secret')
@@ -276,8 +289,7 @@ class GenericInlineAdminParametersTest(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF="generic_inline_admin.urls")
-class GenericInlineAdminWithUniqueTogetherTest(TestCase):
- fixtures = ['users.xml']
+class GenericInlineAdminWithUniqueTogetherTest(TestDataMixin, TestCase):
def setUp(self):
self.client.login(username='super', password='secret')
diff --git a/tests/generic_views/fixtures/generic-views-test-data.json b/tests/generic_views/fixtures/generic-views-test-data.json
deleted file mode 100644
index dfffbbf8d8..0000000000
--- a/tests/generic_views/fixtures/generic-views-test-data.json
+++ /dev/null
@@ -1,54 +0,0 @@
-[
- {
- "model": "generic_views.artist",
- "pk": 1,
- "fields": {
- "name": "Rene Magritte"
- }
- },
- {
- "model": "generic_views.author",
- "pk": 1,
- "fields": {
- "name": "Roberto BolaƱo",
- "slug": "roberto-bolano"
- }
- },
- {
- "model": "generic_views.author",
- "pk": 2,
- "fields": {
- "name": "Scott Rosenberg",
- "slug": "scott-rosenberg"
- }
- },
- {
- "model": "generic_views.book",
- "pk": 1,
- "fields": {
- "name": "2066",
- "slug": "2066",
- "pages": "800",
- "authors": [1],
- "pubdate": "2008-10-01"
- }
- },
- {
- "model": "generic_views.book",
- "pk": 2,
- "fields": {
- "name": "Dreaming in Code",
- "slug": "dreaming-in-code",
- "pages": "300",
- "pubdate": "2006-05-01"
- }
- },
- {
- "model": "generic_views.page",
- "pk": 1,
- "fields": {
- "template": "generic_views/page_template.html",
- "content": "I was once bitten by a moose."
- }
- }
-] \ No newline at end of file
diff --git a/tests/generic_views/test_dates.py b/tests/generic_views/test_dates.py
index d354d42149..52e35ecb77 100644
--- a/tests/generic_views/test_dates.py
+++ b/tests/generic_views/test_dates.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
@@ -7,7 +8,7 @@ from django.test import TestCase, override_settings, skipUnlessDBFeature
from django.test.utils import requires_tz_support
from django.utils import timezone
-from .models import Book, BookSigning
+from .models import Artist, Author, Book, BookSigning, Page
def _make_books(n, base_date):
@@ -19,9 +20,25 @@ def _make_books(n, base_date):
pubdate=base_date - datetime.timedelta(days=i))
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.artist1 = Artist.objects.create(name='Rene Magritte')
+ cls.author1 = Author.objects.create(name='Roberto BolaƱo', slug='roberto-bolano')
+ cls.author2 = Author.objects.create(name='Scott Rosenberg', slug='scott-rosenberg')
+ cls.book1 = Book.objects.create(name='2066', slug='2066', pages=800, pubdate=datetime.date(2008, 10, 1))
+ cls.book1.authors.add(cls.author1)
+ cls.book2 = Book.objects.create(
+ name='Dreaming in Code', slug='dreaming-in-code', pages=300, pubdate=datetime.date(2006, 5, 1)
+ )
+ cls.page1 = Page.objects.create(
+ content='I was once bitten by a moose.', template='generic_views/page_template.html'
+ )
+
+
@override_settings(ROOT_URLCONF='generic_views.urls')
-class ArchiveIndexViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class ArchiveIndexViewTests(TestDataMixin, TestCase):
def test_archive_view(self):
res = self.client.get('/dates/books/')
@@ -138,8 +155,7 @@ class ArchiveIndexViewTests(TestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class YearArchiveViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class YearArchiveViewTests(TestDataMixin, TestCase):
def test_year_view(self):
res = self.client.get('/dates/books/2008/')
@@ -243,8 +259,7 @@ class YearArchiveViewTests(TestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class MonthArchiveViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class MonthArchiveViewTests(TestDataMixin, TestCase):
def test_month_view(self):
res = self.client.get('/dates/books/2008/oct/')
@@ -370,8 +385,7 @@ class MonthArchiveViewTests(TestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class WeekArchiveViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class WeekArchiveViewTests(TestDataMixin, TestCase):
def test_week_view(self):
res = self.client.get('/dates/books/2008/week/39/')
@@ -467,8 +481,7 @@ class WeekArchiveViewTests(TestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class DayArchiveViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class DayArchiveViewTests(TestDataMixin, TestCase):
def test_day_view(self):
res = self.client.get('/dates/books/2008/oct/01/')
@@ -585,14 +598,13 @@ class DayArchiveViewTests(TestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class DateDetailViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+class DateDetailViewTests(TestDataMixin, TestCase):
def test_date_detail_by_pk(self):
- res = self.client.get('/dates/books/2008/oct/01/1/')
+ res = self.client.get('/dates/books/2008/oct/01/%s/' % self.book1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Book.objects.get(pk=1))
- self.assertEqual(res.context['book'], Book.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.book1)
+ self.assertEqual(res.context['book'], self.book1)
self.assertTemplateUsed(res, 'generic_views/book_detail.html')
def test_date_detail_by_slug(self):
@@ -601,9 +613,9 @@ class DateDetailViewTests(TestCase):
self.assertEqual(res.context['book'], Book.objects.get(slug='dreaming-in-code'))
def test_date_detail_custom_month_format(self):
- res = self.client.get('/dates/books/2008/10/01/1/')
+ res = self.client.get('/dates/books/2008/10/01/%s/' % self.book1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['book'], Book.objects.get(pk=1))
+ self.assertEqual(res.context['book'], self.book1)
def test_date_detail_allow_future(self):
future = (datetime.date.today() + datetime.timedelta(days=60))
@@ -628,14 +640,14 @@ class DateDetailViewTests(TestCase):
Refs #16918.
"""
res = self.client.get(
- '/dates/books/get_object_custom_queryset/2006/may/01/2/')
+ '/dates/books/get_object_custom_queryset/2006/may/01/%s/' % self.book2.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Book.objects.get(pk=2))
- self.assertEqual(res.context['book'], Book.objects.get(pk=2))
+ self.assertEqual(res.context['object'], self.book2)
+ self.assertEqual(res.context['book'], self.book2)
self.assertTemplateUsed(res, 'generic_views/book_detail.html')
res = self.client.get(
- '/dates/books/get_object_custom_queryset/2008/oct/01/1/')
+ '/dates/books/get_object_custom_queryset/2008/oct/01/9999999/')
self.assertEqual(res.status_code, 404)
def test_get_object_custom_queryset_numqueries(self):
diff --git a/tests/generic_views/test_detail.py b/tests/generic_views/test_detail.py
index 1c8f951ca4..9f3933f1fa 100644
--- a/tests/generic_views/test_detail.py
+++ b/tests/generic_views/test_detail.py
@@ -1,15 +1,31 @@
+# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import datetime
+
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
from django.test import TestCase, override_settings
from django.views.generic.base import View
-from .models import Artist, Author, Page
+from .models import Artist, Author, Book, Page
@override_settings(ROOT_URLCONF='generic_views.urls')
class DetailViewTest(TestCase):
- fixtures = ['generic-views-test-data.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.artist1 = Artist.objects.create(name='Rene Magritte')
+ cls.author1 = Author.objects.create(name='Roberto BolaƱo', slug='roberto-bolano')
+ cls.author2 = Author.objects.create(name='Scott Rosenberg', slug='scott-rosenberg')
+ cls.book1 = Book.objects.create(name='2066', slug='2066', pages=800, pubdate=datetime.date(2008, 10, 1))
+ cls.book1.authors.add(cls.author1)
+ cls.book2 = Book.objects.create(
+ name='Dreaming in Code', slug='dreaming-in-code', pages=300, pubdate=datetime.date(2006, 5, 1)
+ )
+ cls.page1 = Page.objects.create(
+ content='I was once bitten by a moose.', template='generic_views/page_template.html'
+ )
def test_simple_object(self):
res = self.client.get('/detail/obj/')
@@ -19,10 +35,10 @@ class DetailViewTest(TestCase):
self.assertTemplateUsed(res, 'generic_views/detail.html')
def test_detail_by_pk(self):
- res = self.client.get('/detail/author/1/')
+ res = self.client.get('/detail/author/%s/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
- self.assertEqual(res.context['author'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_missing_object(self):
@@ -33,10 +49,10 @@ class DetailViewTest(TestCase):
self.assertRaises(ObjectDoesNotExist, self.client.get, '/detail/doesnotexist/1/')
def test_detail_by_custom_pk(self):
- res = self.client.get('/detail/author/bycustompk/1/')
+ res = self.client.get('/detail/author/bycustompk/%s/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
- self.assertEqual(res.context['author'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_by_slug(self):
@@ -54,73 +70,70 @@ class DetailViewTest(TestCase):
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_by_pk_ignore_slug(self):
- author = Author.objects.get(pk=1)
- res = self.client.get('/detail/author/bypkignoreslug/1-roberto-bolano/')
+ res = self.client.get('/detail/author/bypkignoreslug/%s-roberto-bolano/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], author)
- self.assertEqual(res.context['author'], author)
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_by_pk_ignore_slug_mismatch(self):
- author = Author.objects.get(pk=1)
- res = self.client.get('/detail/author/bypkignoreslug/1-scott-rosenberg/')
+ res = self.client.get('/detail/author/bypkignoreslug/%s-scott-rosenberg/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], author)
- self.assertEqual(res.context['author'], author)
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_by_pk_and_slug(self):
- author = Author.objects.get(pk=1)
- res = self.client.get('/detail/author/bypkandslug/1-roberto-bolano/')
+ res = self.client.get('/detail/author/bypkandslug/%s-roberto-bolano/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], author)
- self.assertEqual(res.context['author'], author)
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_detail_by_pk_and_slug_mismatch_404(self):
- res = self.client.get('/detail/author/bypkandslug/1-scott-rosenberg/')
+ res = self.client.get('/detail/author/bypkandslug/%s-scott-rosenberg/' % self.author1.pk)
self.assertEqual(res.status_code, 404)
def test_verbose_name(self):
- res = self.client.get('/detail/artist/1/')
+ res = self.client.get('/detail/artist/%s/' % self.artist1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Artist.objects.get(pk=1))
- self.assertEqual(res.context['artist'], Artist.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.artist1)
+ self.assertEqual(res.context['artist'], self.artist1)
self.assertTemplateUsed(res, 'generic_views/artist_detail.html')
def test_template_name(self):
- res = self.client.get('/detail/author/1/template_name/')
+ res = self.client.get('/detail/author/%s/template_name/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
- self.assertEqual(res.context['author'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/about.html')
def test_template_name_suffix(self):
- res = self.client.get('/detail/author/1/template_name_suffix/')
+ res = self.client.get('/detail/author/%s/template_name_suffix/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
- self.assertEqual(res.context['author'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['author'], self.author1)
self.assertTemplateUsed(res, 'generic_views/author_view.html')
def test_template_name_field(self):
- res = self.client.get('/detail/page/1/field/')
+ res = self.client.get('/detail/page/%s/field/' % self.page1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Page.objects.get(pk=1))
- self.assertEqual(res.context['page'], Page.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.page1)
+ self.assertEqual(res.context['page'], self.page1)
self.assertTemplateUsed(res, 'generic_views/page_template.html')
def test_context_object_name(self):
- res = self.client.get('/detail/author/1/context_object_name/')
+ res = self.client.get('/detail/author/%s/context_object_name/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
- self.assertEqual(res.context['thingy'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
+ self.assertEqual(res.context['thingy'], self.author1)
self.assertNotIn('author', res.context)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
def test_duplicated_context_object_name(self):
- res = self.client.get('/detail/author/1/dupe_context_object_name/')
+ res = self.client.get('/detail/author/%s/dupe_context_object_name/' % self.author1.pk)
self.assertEqual(res.status_code, 200)
- self.assertEqual(res.context['object'], Author.objects.get(pk=1))
+ self.assertEqual(res.context['object'], self.author1)
self.assertNotIn('author', res.context)
self.assertTemplateUsed(res, 'generic_views/author_detail.html')
diff --git a/tests/generic_views/test_list.py b/tests/generic_views/test_list.py
index b9274242c9..e6ce7cb539 100644
--- a/tests/generic_views/test_list.py
+++ b/tests/generic_views/test_list.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
@@ -7,12 +8,25 @@ from django.test import TestCase, override_settings
from django.utils.encoding import force_str
from django.views.generic.base import View
-from .models import Artist, Author, Book
+from .models import Artist, Author, Book, Page
@override_settings(ROOT_URLCONF='generic_views.urls')
class ListViewTests(TestCase):
- fixtures = ['generic-views-test-data.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.artist1 = Artist.objects.create(name='Rene Magritte')
+ cls.author1 = Author.objects.create(name='Roberto BolaƱo', slug='roberto-bolano')
+ cls.author2 = Author.objects.create(name='Scott Rosenberg', slug='scott-rosenberg')
+ cls.book1 = Book.objects.create(name='2066', slug='2066', pages=800, pubdate=datetime.date(2008, 10, 1))
+ cls.book1.authors.add(cls.author1)
+ cls.book2 = Book.objects.create(
+ name='Dreaming in Code', slug='dreaming-in-code', pages=300, pubdate=datetime.date(2006, 5, 1)
+ )
+ cls.page1 = Page.objects.create(
+ content='I was once bitten by a moose.', template='generic_views/page_template.html'
+ )
def test_items(self):
res = self.client.get('/list/dict/')
diff --git a/tests/generic_views/views.py b/tests/generic_views/views.py
index 6dcac21aa6..b40bbe92f0 100644
--- a/tests/generic_views/views.py
+++ b/tests/generic_views/views.py
@@ -218,7 +218,7 @@ class AuthorGetQuerySetFormView(generic.edit.ModelFormMixin):
class BookDetailGetObjectCustomQueryset(BookDetail):
def get_object(self, queryset=None):
return super(BookDetailGetObjectCustomQueryset, self).get_object(
- queryset=Book.objects.filter(pk=2))
+ queryset=Book.objects.filter(pk=self.kwargs['pk']))
class CustomMultipleObjectMixinView(generic.list.MultipleObjectMixin, generic.View):
diff --git a/tests/known_related_objects/fixtures/tournament.json b/tests/known_related_objects/fixtures/tournament.json
deleted file mode 100644
index bd4cbc17a7..0000000000
--- a/tests/known_related_objects/fixtures/tournament.json
+++ /dev/null
@@ -1,76 +0,0 @@
-[
- {
- "pk": 1,
- "model": "known_related_objects.tournament",
- "fields": {
- "name": "Tourney 1"
- }
- },
- {
- "pk": 2,
- "model": "known_related_objects.tournament",
- "fields": {
- "name": "Tourney 2"
- }
- },
- {
- "pk": 1,
- "model": "known_related_objects.organiser",
- "fields": {
- "name": "Organiser 1"
- }
- },
- {
- "pk": 1,
- "model": "known_related_objects.pool",
- "fields": {
- "tournament": 1,
- "organiser": 1,
- "name": "T1 Pool 1"
- }
- },
- {
- "pk": 2,
- "model": "known_related_objects.pool",
- "fields": {
- "tournament": 1,
- "organiser": 1,
- "name": "T1 Pool 2"
- }
- },
- {
- "pk": 3,
- "model": "known_related_objects.pool",
- "fields": {
- "tournament": 2,
- "organiser": 1,
- "name": "T2 Pool 1"
- }
- },
- {
- "pk": 4,
- "model": "known_related_objects.pool",
- "fields": {
- "tournament": 2,
- "organiser": 1,
- "name": "T2 Pool 2"
- }
- },
- {
- "pk": 1,
- "model": "known_related_objects.poolstyle",
- "fields": {
- "name": "T1 Pool 2 Style",
- "pool": 2
- }
- },
- {
- "pk": 2,
- "model": "known_related_objects.poolstyle",
- "fields": {
- "name": "T2 Pool 1 Style",
- "pool": 3
- }
- }
-]
-
diff --git a/tests/known_related_objects/tests.py b/tests/known_related_objects/tests.py
index 9712ee69ca..bb664a8102 100644
--- a/tests/known_related_objects/tests.py
+++ b/tests/known_related_objects/tests.py
@@ -6,17 +6,28 @@ from .models import Organiser, Pool, PoolStyle, Tournament
class ExistingRelatedInstancesTests(TestCase):
- fixtures = ['tournament.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.t1 = Tournament.objects.create(name='Tourney 1')
+ cls.t2 = Tournament.objects.create(name='Tourney 2')
+ cls.o1 = Organiser.objects.create(name='Organiser 1')
+ cls.p1 = Pool.objects.create(name='T1 Pool 1', tournament=cls.t1, organiser=cls.o1)
+ cls.p2 = Pool.objects.create(name='T1 Pool 2', tournament=cls.t1, organiser=cls.o1)
+ cls.p3 = Pool.objects.create(name='T2 Pool 1', tournament=cls.t2, organiser=cls.o1)
+ cls.p4 = Pool.objects.create(name='T2 Pool 2', tournament=cls.t2, organiser=cls.o1)
+ cls.ps1 = PoolStyle.objects.create(name='T1 Pool 2 Style', pool=cls.p2)
+ cls.ps2 = PoolStyle.objects.create(name='T2 Pool 1 Style', pool=cls.p3)
def test_foreign_key(self):
with self.assertNumQueries(2):
- tournament = Tournament.objects.get(pk=1)
+ tournament = Tournament.objects.get(pk=self.t1.pk)
pool = tournament.pool_set.all()[0]
self.assertIs(tournament, pool.tournament)
def test_foreign_key_prefetch_related(self):
with self.assertNumQueries(2):
- tournament = (Tournament.objects.prefetch_related('pool_set').get(pk=1))
+ tournament = (Tournament.objects.prefetch_related('pool_set').get(pk=self.t1.pk))
pool = tournament.pool_set.all()[0]
self.assertIs(tournament, pool.tournament)
@@ -29,54 +40,54 @@ class ExistingRelatedInstancesTests(TestCase):
self.assertIs(tournaments[1], pool2.tournament)
def test_queryset_or(self):
- tournament_1 = Tournament.objects.get(pk=1)
- tournament_2 = Tournament.objects.get(pk=2)
+ tournament_1 = self.t1
+ tournament_2 = self.t2
with self.assertNumQueries(1):
pools = tournament_1.pool_set.all() | tournament_2.pool_set.all()
related_objects = set(pool.tournament for pool in pools)
self.assertEqual(related_objects, {tournament_1, tournament_2})
def test_queryset_or_different_cached_items(self):
- tournament = Tournament.objects.get(pk=1)
- organiser = Organiser.objects.get(pk=1)
+ tournament = self.t1
+ organiser = self.o1
with self.assertNumQueries(1):
pools = tournament.pool_set.all() | organiser.pool_set.all()
- first = pools.filter(pk=1)[0]
+ first = pools.filter(pk=self.p1.pk)[0]
self.assertIs(first.tournament, tournament)
self.assertIs(first.organiser, organiser)
def test_queryset_or_only_one_with_precache(self):
- tournament_1 = Tournament.objects.get(pk=1)
- tournament_2 = Tournament.objects.get(pk=2)
- # 2 queries here as pool id 3 has tournament 2, which is not cached
+ tournament_1 = self.t1
+ tournament_2 = self.t2
+ # 2 queries here as pool 3 has tournament 2, which is not cached
with self.assertNumQueries(2):
- pools = tournament_1.pool_set.all() | Pool.objects.filter(pk=3)
+ pools = tournament_1.pool_set.all() | Pool.objects.filter(pk=self.p3.pk)
related_objects = set(pool.tournament for pool in pools)
self.assertEqual(related_objects, {tournament_1, tournament_2})
# and the other direction
with self.assertNumQueries(2):
- pools = Pool.objects.filter(pk=3) | tournament_1.pool_set.all()
+ pools = Pool.objects.filter(pk=self.p3.pk) | tournament_1.pool_set.all()
related_objects = set(pool.tournament for pool in pools)
self.assertEqual(related_objects, {tournament_1, tournament_2})
def test_queryset_and(self):
- tournament = Tournament.objects.get(pk=1)
- organiser = Organiser.objects.get(pk=1)
+ tournament = self.t1
+ organiser = self.o1
with self.assertNumQueries(1):
pools = tournament.pool_set.all() & organiser.pool_set.all()
- first = pools.filter(pk=1)[0]
+ first = pools.filter(pk=self.p1.pk)[0]
self.assertIs(first.tournament, tournament)
self.assertIs(first.organiser, organiser)
def test_one_to_one(self):
with self.assertNumQueries(2):
- style = PoolStyle.objects.get(pk=1)
+ style = PoolStyle.objects.get(pk=self.ps1.pk)
pool = style.pool
self.assertIs(style, pool.poolstyle)
def test_one_to_one_select_related(self):
with self.assertNumQueries(1):
- style = PoolStyle.objects.select_related('pool').get(pk=1)
+ style = PoolStyle.objects.select_related('pool').get(pk=self.ps1.pk)
pool = style.pool
self.assertIs(style, pool.poolstyle)
@@ -88,7 +99,7 @@ class ExistingRelatedInstancesTests(TestCase):
def test_one_to_one_prefetch_related(self):
with self.assertNumQueries(2):
- style = PoolStyle.objects.prefetch_related('pool').get(pk=1)
+ style = PoolStyle.objects.prefetch_related('pool').get(pk=self.ps1.pk)
pool = style.pool
self.assertIs(style, pool.poolstyle)
@@ -100,19 +111,19 @@ class ExistingRelatedInstancesTests(TestCase):
def test_reverse_one_to_one(self):
with self.assertNumQueries(2):
- pool = Pool.objects.get(pk=2)
+ pool = Pool.objects.get(pk=self.p2.pk)
style = pool.poolstyle
self.assertIs(pool, style.pool)
def test_reverse_one_to_one_select_related(self):
with self.assertNumQueries(1):
- pool = Pool.objects.select_related('poolstyle').get(pk=2)
+ pool = Pool.objects.select_related('poolstyle').get(pk=self.p2.pk)
style = pool.poolstyle
self.assertIs(pool, style.pool)
def test_reverse_one_to_one_prefetch_related(self):
with self.assertNumQueries(2):
- pool = Pool.objects.prefetch_related('poolstyle').get(pk=2)
+ pool = Pool.objects.prefetch_related('poolstyle').get(pk=self.p2.pk)
style = pool.poolstyle
self.assertIs(pool, style.pool)
diff --git a/tests/proxy_models/fixtures/myhorses.json b/tests/proxy_models/fixtures/myhorses.json
deleted file mode 100644
index 97e190a8a2..0000000000
--- a/tests/proxy_models/fixtures/myhorses.json
+++ /dev/null
@@ -1,42 +0,0 @@
-[
- {
- "pk": 100,
- "model": "auth.user",
- "fields": {
- "username": "super",
- "first_name": "Super",
- "last_name": "User",
- "is_active": true,
- "is_superuser": true,
- "is_staff": true,
- "last_login": "2007-05-30 13:20:10",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158",
- "email": "super@example.com",
- "date_joined": "2007-05-30 13:20:10"
- }
- },
- {
- "pk": 100,
- "model": "proxy_models.BaseUser",
- "fields": {
- "name": "Django Pony"
- }
- },
- {
- "pk": 100,
- "model": "proxy_models.TrackerUser",
- "fields": {
- "status": "emperor"
- }
- },
- {
- "pk": 100,
- "model": "proxy_models.Issue",
- "fields": {
- "summary": "Pony's Issue",
- "assignee": 100
- }
- }
-]
diff --git a/tests/proxy_models/tests.py b/tests/proxy_models/tests.py
index 0fd3887fe7..1aea80902e 100644
--- a/tests/proxy_models/tests.py
+++ b/tests/proxy_models/tests.py
@@ -1,7 +1,10 @@
from __future__ import unicode_literals
+import datetime
+
from django.apps import apps
from django.contrib import admin
+from django.contrib.auth.models import User as AuthUser
from django.contrib.contenttypes.models import ContentType
from django.core import checks, exceptions, management
from django.core.urlresolvers import reverse
@@ -394,7 +397,17 @@ class ProxyModelTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='proxy_models.urls',)
class ProxyModelAdminTests(TestCase):
- fixtures = ['myhorses']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = AuthUser.objects.create(
+ 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.tu1 = ProxyTrackerUser.objects.create(name='Django Pony', status='emperor')
+ cls.i1 = Issue.objects.create(summary="Pony's Issue", assignee=cls.tu1)
def test_cascade_delete_proxy_model_admin_warning(self):
"""
diff --git a/tests/raw_query/fixtures/raw_query_books.json b/tests/raw_query/fixtures/raw_query_books.json
deleted file mode 100644
index 35879aa5eb..0000000000
--- a/tests/raw_query/fixtures/raw_query_books.json
+++ /dev/null
@@ -1,110 +0,0 @@
-[
- {
- "pk": 1,
- "model": "raw_query.author",
- "fields": {
- "dob": "1950-09-20",
- "first_name": "Joe",
- "last_name": "Smith"
- }
- },
- {
- "pk": 2,
- "model": "raw_query.author",
- "fields": {
- "dob": "1920-04-02",
- "first_name": "Jill",
- "last_name": "Doe"
- }
- },
- {
- "pk": 3,
- "model": "raw_query.author",
- "fields": {
- "dob": "1986-01-25",
- "first_name": "Bob",
- "last_name": "Smith"
- }
- },
- {
- "pk": 4,
- "model": "raw_query.author",
- "fields": {
- "dob": "1932-05-10",
- "first_name": "Bill",
- "last_name": "Jones"
- }
- },
- {
- "pk": 1,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "The awesome book",
- "paperback": false,
- "opening_line": "It was a bright cold day in April and the clocks were striking thirteen."
- }
- },
- {
- "pk": 2,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "The horrible book",
- "paperback": true,
- "opening_line": "On an evening in the latter part of May a middle-aged man was walking homeward from Shaston to the village of Marlott, in the adjoining Vale of Blakemore, or Blackmoor."
- }
- },
- {
- "pk": 3,
- "model": "raw_query.book",
- "fields": {
- "author": 1,
- "title": "Another awesome book",
- "paperback": false,
- "opening_line": "A squat grey building of only thirty-four stories."
- }
- },
- {
- "pk": 4,
- "model": "raw_query.book",
- "fields": {
- "author": 3,
- "title": "Some other book",
- "paperback": true,
- "opening_line": "It was the day my grandmother exploded."
- }
- },
- {
- "pk": 1,
- "model": "raw_query.coffee",
- "fields": {
- "brand": "dunkin doughnuts"
- }
- },
- {
- "pk": 2,
- "model": "raw_query.coffee",
- "fields": {
- "brand": "starbucks"
- }
- },
- {
- "pk": 1,
- "model": "raw_query.reviewer",
- "fields": {
- "reviewed": [
- 2,
- 3,
- 4
- ]
- }
- },
- {
- "pk": 2,
- "model": "raw_query.reviewer",
- "fields": {
- "reviewed": []
- }
- }
-]
diff --git a/tests/raw_query/tests.py b/tests/raw_query/tests.py
index 5d2bf4becf..2027a32d2b 100644
--- a/tests/raw_query/tests.py
+++ b/tests/raw_query/tests.py
@@ -9,7 +9,22 @@ from .models import Author, Book, Coffee, FriendlyAuthor, Reviewer
class RawQueryTests(TestCase):
- fixtures = ['raw_query_books.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.a1 = Author.objects.create(first_name='Joe', last_name='Smith', dob=date(1950, 9, 20))
+ cls.a2 = Author.objects.create(first_name='Jill', last_name='Doe', dob=date(1920, 4, 2))
+ cls.a3 = Author.objects.create(first_name='Bob', last_name='Smith', dob=date(1986, 1, 25))
+ cls.a4 = Author.objects.create(first_name='Bill', last_name='Jones', dob=date(1932, 5, 10))
+ cls.b1 = Book.objects.create(title='The awesome book', author=cls.a1, paperback=False, opening_line='It was a bright cold day in April and the clocks were striking thirteen.')
+ cls.b2 = Book.objects.create(title='The horrible book', author=cls.a1, paperback=True, opening_line='On an evening in the latter part of May a middle-aged man was walking homeward from Shaston to the village of Marlott, in the adjoining Vale of Blakemore, or Blackmoor.')
+ cls.b3 = Book.objects.create(title='Another awesome book', author=cls.a1, paperback=False, opening_line='A squat grey building of only thirty-four stories.')
+ cls.b4 = Book.objects.create(title='Some other book', author=cls.a3, paperback=True, opening_line='It was the day my grandmother exploded.')
+ cls.c1 = Coffee.objects.create(brand='dunkin doughnuts')
+ cls.c2 = Coffee.objects.create(brand='starbucks')
+ cls.r1 = Reviewer.objects.create()
+ cls.r2 = Reviewer.objects.create()
+ cls.r1.reviewed.add(cls.b2, cls.b3, cls.b4)
def assertSuccessfulRawQuery(self, model, query, expected_results,
expected_annotations=(), params=[], translations=None):
diff --git a/tests/syndication_tests/fixtures/feeddata.json b/tests/syndication_tests/fixtures/feeddata.json
deleted file mode 100644
index b273e21cae..0000000000
--- a/tests/syndication_tests/fixtures/feeddata.json
+++ /dev/null
@@ -1,55 +0,0 @@
-[
- {
- "model": "syndication_tests.entry",
- "pk": 1,
- "fields": {
- "title": "My first entry",
- "updated": "1850-01-01 12:30:00",
- "published": "1066-09-25 20:15:00"
- }
- },
- {
- "model": "syndication_tests.entry",
- "pk": 2,
- "fields": {
- "title": "My second entry",
- "updated": "2008-01-02 12:30:00",
- "published": "2006-03-17 18:00:00"
- }
- },
- {
- "model": "syndication_tests.entry",
- "pk": 3,
- "fields": {
- "title": "My third entry",
- "updated": "2008-01-02 13:30:00",
- "published": "2005-06-14 10:45:00"
- }
- },
- {
- "model": "syndication_tests.entry",
- "pk": 4,
- "fields": {
- "title": "A & B < C > D",
- "updated": "2008-01-03 13:30:00",
- "published": "2005-11-25 12:11:23"
- }
- },
- {
- "model": "syndication_tests.entry",
- "pk": 5,
- "fields": {
- "title": "My last entry",
- "updated": "2013-01-20 00:00:00",
- "published": "2013-03-25 20:00:00"
- }
- },
- {
- "model": "syndication_tests.article",
- "pk": 1,
- "fields": {
- "title": "My first article",
- "entry": "1"
- }
- }
-]
diff --git a/tests/syndication_tests/tests.py b/tests/syndication_tests/tests.py
index 1b03d3b192..9922efc8b3 100644
--- a/tests/syndication_tests/tests.py
+++ b/tests/syndication_tests/tests.py
@@ -11,7 +11,7 @@ from django.test.utils import requires_tz_support
from django.utils import timezone
from django.utils.feedgenerator import rfc2822_date, rfc3339_date
-from .models import Entry
+from .models import Article, Entry
try:
import pytz
@@ -22,15 +22,30 @@ TZ = timezone.get_default_timezone()
class FeedTestCase(TestCase):
- fixtures = ['feeddata.json']
- def setUp(self):
- # Django cannot deal with very old dates when pytz isn't installed.
- if pytz is None:
- old_entry = Entry.objects.get(pk=1)
- old_entry.updated = datetime.datetime(1980, 1, 1, 12, 30)
- old_entry.published = datetime.datetime(1986, 9, 25, 20, 15, 00)
- old_entry.save()
+ @classmethod
+ def setUpTestData(cls):
+ cls.e1 = Entry.objects.create(
+ title='My first entry', updated=datetime.datetime(1980, 1, 1, 12, 30),
+ published=datetime.datetime(1986, 9, 25, 20, 15, 00)
+ )
+ cls.e2 = Entry.objects.create(
+ title='My second entry', updated=datetime.datetime(2008, 1, 2, 12, 30),
+ published=datetime.datetime(2006, 3, 17, 18, 0)
+ )
+ cls.e3 = Entry.objects.create(
+ title='My third entry', updated=datetime.datetime(2008, 1, 2, 13, 30),
+ published=datetime.datetime(2005, 6, 14, 10, 45)
+ )
+ cls.e4 = Entry.objects.create(
+ title='A & B < C > D', updated=datetime.datetime(2008, 1, 3, 13, 30),
+ published=datetime.datetime(2005, 11, 25, 12, 11, 23)
+ )
+ cls.e5 = Entry.objects.create(
+ title='My last entry', updated=datetime.datetime(2013, 1, 20, 0, 0),
+ published=datetime.datetime(2013, 3, 25, 20, 0)
+ )
+ cls.a1 = Article.objects.create(title='My first article', entry=cls.e1)
def assertChildNodes(self, elem, expected):
actual = set(n.nodeName for n in elem.childNodes)
diff --git a/tests/test_client/fixtures/testdata.json b/tests/test_client/fixtures/testdata.json
deleted file mode 100644
index b844809a18..0000000000
--- a/tests/test_client/fixtures/testdata.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-] \ No newline at end of file
diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py
index 05de326bef..7190ea64b0 100644
--- a/tests/test_client/tests.py
+++ b/tests/test_client/tests.py
@@ -22,6 +22,9 @@ rather than the HTML rendered to the end-user.
"""
from __future__ import unicode_literals
+import datetime
+
+from django.contrib.auth.models import User
from django.core import mail
from django.http import HttpResponse
from django.test import Client, RequestFactory, TestCase, override_settings
@@ -32,7 +35,27 @@ from .views import get_view, post_view, trace_view
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client.urls',)
class ClientTest(TestCase):
- fixtures = ['testdata.json']
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u2 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='inactive',
+ first_name='Inactive', last_name='User', email='testclient@example.com', is_staff=False, is_active=False,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='testclient@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
def test_get_view(self):
"GET a view"
diff --git a/tests/test_client_regress/fixtures/testdata.json b/tests/test_client_regress/fixtures/testdata.json
deleted file mode 100644
index b844809a18..0000000000
--- a/tests/test_client_regress/fixtures/testdata.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "2",
- "model": "auth.user",
- "fields": {
- "username": "inactive",
- "first_name": "Inactive",
- "last_name": "User",
- "is_active": false,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": "3",
- "model": "auth.user",
- "fields": {
- "username": "staff",
- "first_name": "Staff",
- "last_name": "Member",
- "is_active": true,
- "is_superuser": false,
- "is_staff": true,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- }
-] \ No newline at end of file
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py
index fcceaf7346..663d3cd4da 100644
--- a/tests/test_client_regress/tests.py
+++ b/tests/test_client_regress/tests.py
@@ -4,6 +4,7 @@ Regression tests for the Test Client, especially the customized assertions.
"""
from __future__ import unicode_literals
+import datetime
import itertools
import os
@@ -24,6 +25,30 @@ from .models import CustomUser
from .views import CustomTestException
+class TestDataMixin(object):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.u1 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u2 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='inactive',
+ first_name='Inactive', last_name='User', email='testclient@example.com', is_staff=False, is_active=False,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ cls.u3 = User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='staff',
+ first_name='Staff', last_name='Member', email='testclient@example.com', is_staff=True, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+
+
@override_settings(ROOT_URLCONF='test_client_regress.urls')
class AssertContainsTests(TestCase):
@@ -190,8 +215,7 @@ class AssertContainsTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client_regress.urls',)
-class AssertTemplateUsedTests(TestCase):
- fixtures = ['testdata.json']
+class AssertTemplateUsedTests(TestDataMixin, TestCase):
def test_no_context(self):
"Template usage assertions work then templates aren't in use"
@@ -812,8 +836,7 @@ class AssertFormsetErrorTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client_regress.urls',)
-class LoginTests(TestCase):
- fixtures = ['testdata']
+class LoginTests(TestDataMixin, TestCase):
def test_login_different_client(self):
"Check that using a different test client doesn't violate authentication"
@@ -837,8 +860,7 @@ class LoginTests(TestCase):
SESSION_ENGINE='test_client_regress.session',
ROOT_URLCONF='test_client_regress.urls',
)
-class SessionEngineTests(TestCase):
- fixtures = ['testdata']
+class SessionEngineTests(TestDataMixin, TestCase):
def test_login(self):
"A session engine that modifies the session key can be used to log in"
@@ -881,8 +903,7 @@ class URLEscapingTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client_regress.urls',)
-class ExceptionTests(TestCase):
- fixtures = ['testdata.json']
+class ExceptionTests(TestDataMixin, TestCase):
def test_exception_cleared(self):
"#5836 - A stale user exception isn't re-raised by the test client."
@@ -950,8 +971,7 @@ class zzUrlconfSubstitutionTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client_regress.urls',)
-class ContextTests(TestCase):
- fixtures = ['testdata']
+class ContextTests(TestDataMixin, TestCase):
def test_single_context(self):
"Context variables can be retrieved from a single context"
@@ -1025,8 +1045,7 @@ class ContextTests(TestCase):
@override_settings(PASSWORD_HASHERS=['django.contrib.auth.hashers.SHA1PasswordHasher'],
ROOT_URLCONF='test_client_regress.urls',)
-class SessionTests(TestCase):
- fixtures = ['testdata.json']
+class SessionTests(TestDataMixin, TestCase):
def test_session(self):
"The session isn't lost if a user logs in"
diff --git a/tests/timezones/fixtures/tz_users.xml b/tests/timezones/fixtures/tz_users.xml
deleted file mode 100644
index 4311ef4c5f..0000000000
--- a/tests/timezones/fixtures/tz_users.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<django-objects version="1.0">
- <object pk="100" model="auth.user">
- <field type="CharField" name="username">super</field>
- <field type="CharField" name="first_name">Super</field>
- <field type="CharField" name="last_name">User</field>
- <field type="CharField" name="email">super@example.com</field>
- <field type="CharField" name="password">sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158</field>
- <field type="BooleanField" name="is_staff">True</field>
- <field type="BooleanField" name="is_active">True</field>
- <field type="BooleanField" name="is_superuser">True</field>
- <field type="DateTimeField" name="last_login">2001-01-01 00:00:00+00:00</field>
- <field type="DateTimeField" name="date_joined">2001-01-01 00:00:00+00:00</field>
- <field to="auth.group" name="groups" rel="ManyToManyRel"></field>
- <field to="auth.permission" name="user_permissions" rel="ManyToManyRel"></field>
- </object>
-</django-objects>
diff --git a/tests/timezones/tests.py b/tests/timezones/tests.py
index 8534b9f8de..d623492f68 100644
--- a/tests/timezones/tests.py
+++ b/tests/timezones/tests.py
@@ -7,6 +7,7 @@ import warnings
from unittest import skipIf
from xml.dom.minidom import parseString
+from django.contrib.auth.models import User
from django.core import serializers
from django.core.urlresolvers import reverse
from django.db.models import Max, Min
@@ -1083,7 +1084,15 @@ class NewFormsTests(TestCase):
ROOT_URLCONF='timezones.urls')
class AdminTests(TestCase):
- fixtures = ['tz_users.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)
+ )
def setUp(self):
self.client.login(username='super', password='secret')
diff --git a/tests/view_tests/fixtures/testdata.json b/tests/view_tests/fixtures/testdata.json
deleted file mode 100644
index 8663328c9e..0000000000
--- a/tests/view_tests/fixtures/testdata.json
+++ /dev/null
@@ -1,75 +0,0 @@
-[
- {
- "pk": "1",
- "model": "auth.user",
- "fields": {
- "username": "testclient",
- "first_name": "Test",
- "last_name": "Client",
- "is_active": true,
- "is_superuser": false,
- "is_staff": false,
- "last_login": "2006-12-17 07:03:31",
- "groups": [],
- "user_permissions": [],
- "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161",
- "email": "testclient@example.com",
- "date_joined": "2006-12-17 07:03:31"
- }
- },
- {
- "pk": 1,
- "model": "view_tests.author",
- "fields": {
- "name": "Boris"
- }
- },
- {
- "pk": 1,
- "model": "view_tests.article",
- "fields": {
- "author": 1,
- "title": "Old Article",
- "slug": "old_article",
- "date_created": "2001-01-01 21:22:23"
- }
- },
- {
- "pk": 2,
- "model": "view_tests.article",
- "fields": {
- "author": 1,
- "title": "Current Article",
- "slug": "current_article",
- "date_created": "2007-09-17 21:22:23"
- }
- },
- {
- "pk": 3,
- "model": "view_tests.article",
- "fields": {
- "author": 1,
- "title": "Future Article",
- "slug": "future_article",
- "date_created": "3000-01-01 21:22:23"
- }
- },
- {
- "pk": 1,
- "model": "view_tests.urlarticle",
- "fields": {
- "author": 1,
- "title": "Old Article",
- "slug": "old_article",
- "date_created": "2001-01-01 21:22:23"
- }
- },
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "testserver",
- "name": "testserver"
- }
- }
-]
diff --git a/tests/view_tests/tests/test_defaults.py b/tests/view_tests/tests/test_defaults.py
index 491e1bd562..0f3f4fe014 100644
--- a/tests/view_tests/tests/test_defaults.py
+++ b/tests/view_tests/tests/test_defaults.py
@@ -1,18 +1,48 @@
from __future__ import unicode_literals
+import datetime
+
+from django.contrib.auth.models import User
+from django.contrib.sites.models import Site
from django.test import TestCase
from django.test.utils import override_settings
-from ..models import UrlArticle
+from ..models import Article, Author, UrlArticle
@override_settings(ROOT_URLCONF='view_tests.urls')
class DefaultsTests(TestCase):
"""Test django views in django/views/defaults.py"""
- fixtures = ['testdata.json']
non_existing_urls = ['/non_existing_url/', # this is in urls.py
'/other_non_existing_url/'] # this NOT in urls.py
+ @classmethod
+ def setUpTestData(cls):
+ User.objects.create(
+ password='sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161',
+ last_login=datetime.datetime(2006, 12, 17, 7, 3, 31), is_superuser=False, username='testclient',
+ first_name='Test', last_name='Client', email='testclient@example.com', is_staff=False, is_active=True,
+ date_joined=datetime.datetime(2006, 12, 17, 7, 3, 31)
+ )
+ Author.objects.create(name='Boris')
+ Article.objects.create(
+ title='Old Article', slug='old_article', author_id=1,
+ date_created=datetime.datetime(2001, 1, 1, 21, 22, 23)
+ )
+ Article.objects.create(
+ title='Current Article', slug='current_article', author_id=1,
+ date_created=datetime.datetime(2007, 9, 17, 21, 22, 23)
+ )
+ Article.objects.create(
+ title='Future Article', slug='future_article', author_id=1,
+ date_created=datetime.datetime(3000, 1, 1, 21, 22, 23)
+ )
+ UrlArticle.objects.create(
+ title='Old Article', slug='old_article', author_id=1,
+ date_created=datetime.datetime(2001, 1, 1, 21, 22, 23)
+ )
+ Site(id=1, domain='testserver', name='testserver').save()
+
def test_page_not_found(self):
"A 404 status is returned by the page_not_found view"
for url in self.non_existing_urls: