Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Revert "Began implementing a shared set of test models to speed up te…

…sts."

This reverts commit 22b7870.
  • Loading branch information...
commit f5d4849cbeda994e7d2e43c4aaf2aac69d5c95bb 1 parent dfcce42
@apollo13 apollo13 authored
View
284 tests/lookup/tests.py
@@ -5,7 +5,6 @@
from django.core.exceptions import FieldError
from django.test import TestCase, skipUnlessDBFeature
-from django.utils import six
from shared_models.models import Author, Book
@@ -21,19 +20,19 @@ def setUp(self):
self.au2 = Author(name='Author 2')
self.au2.save()
# Create a couple of Books.
- self.b1 = Book(title='Book 1', pubdate=datetime(2005, 7, 26), author=self.au1)
+ self.b1 = Book(name='Book 1', pubdate=datetime(2005, 7, 26), author=self.au1)
self.b1.save()
- self.b2 = Book(title='Book 2', pubdate=datetime(2005, 7, 27), author=self.au1)
+ self.b2 = Book(name='Book 2', pubdate=datetime(2005, 7, 27), author=self.au1)
self.b2.save()
- self.b3 = Book(title='Book 3', pubdate=datetime(2005, 7, 27), author=self.au1)
+ self.b3 = Book(name='Book 3', pubdate=datetime(2005, 7, 27), author=self.au1)
self.b3.save()
- self.b4 = Book(title='Book 4', pubdate=datetime(2005, 7, 28), author=self.au1)
+ self.b4 = Book(name='Book 4', pubdate=datetime(2005, 7, 28), author=self.au1)
self.b4.save()
- self.b5 = Book(title='Book 5', pubdate=datetime(2005, 8, 1, 9, 0), author=self.au2)
+ self.b5 = Book(name='Book 5', pubdate=datetime(2005, 8, 1, 9, 0), author=self.au2)
self.b5.save()
- self.b6 = Book(title='Book 6', pubdate=datetime(2005, 8, 1, 8, 0), author=self.au2)
+ self.b6 = Book(name='Book 6', pubdate=datetime(2005, 8, 1, 8, 0), author=self.au2)
self.b6.save()
- self.b7 = Book(title='Book 7', pubdate=datetime(2005, 7, 27), author=self.au2)
+ self.b7 = Book(name='Book 7', pubdate=datetime(2005, 7, 27), author=self.au2)
self.b7.save()
# Create a few Tags.
self.t1 = Tag(name='Tag 1')
@@ -86,18 +85,18 @@ def test_iterator(self):
'Book 7',
'Book 1',
],
- transform=attrgetter('title'))
+ transform=attrgetter('name'))
# iterator() can be used on any QuerySet.
self.assertQuerysetEqual(
- Book.objects.filter(title__endswith='4').iterator(),
+ Book.objects.filter(name__endswith='4').iterator(),
['Book 4'],
- transform=attrgetter('title'))
+ transform=attrgetter('name'))
def test_count(self):
# count() returns the number of objects matching search criteria.
self.assertEqual(Book.objects.count(), 7)
self.assertEqual(Book.objects.filter(pubdate__exact=datetime(2005, 7, 27)).count(), 3)
- self.assertEqual(Book.objects.filter(title__startswith='Blah blah').count(), 0)
+ self.assertEqual(Book.objects.filter(name__startswith='Blah blah').count(), 0)
# count() should respect sliced query sets.
articles = Book.objects.all()
@@ -129,43 +128,43 @@ def test_values(self):
# values() returns a list of dictionaries instead of object instances --
# and you can specify which fields you want to retrieve.
identity = lambda x:x
- self.assertQuerysetEqual(Book.objects.values('title'),
+ self.assertQuerysetEqual(Book.objects.values('name'),
[
- {'title': 'Book 5'},
- {'title': 'Book 6'},
- {'title': 'Book 4'},
- {'title': 'Book 2'},
- {'title': 'Book 3'},
- {'title': 'Book 7'},
- {'title': 'Book 1'},
+ {'name': 'Book 5'},
+ {'name': 'Book 6'},
+ {'name': 'Book 4'},
+ {'name': 'Book 2'},
+ {'name': 'Book 3'},
+ {'name': 'Book 7'},
+ {'name': 'Book 1'},
],
transform=identity)
self.assertQuerysetEqual(
Book.objects.filter(pubdate__exact=datetime(2005, 7, 27)).values('id'),
[{'id': self.b2.id}, {'id': self.b3.id}, {'id': self.b7.id}],
transform=identity)
- self.assertQuerysetEqual(Book.objects.values('id', 'title'),
+ self.assertQuerysetEqual(Book.objects.values('id', 'name'),
[
- {'id': self.b5.id, 'title': 'Book 5'},
- {'id': self.b6.id, 'title': 'Book 6'},
- {'id': self.b4.id, 'title': 'Book 4'},
- {'id': self.b2.id, 'title': 'Book 2'},
- {'id': self.b3.id, 'title': 'Book 3'},
- {'id': self.b7.id, 'title': 'Book 7'},
- {'id': self.b1.id, 'title': 'Book 1'},
+ {'id': self.b5.id, 'name': 'Book 5'},
+ {'id': self.b6.id, 'name': 'Book 6'},
+ {'id': self.b4.id, 'name': 'Book 4'},
+ {'id': self.b2.id, 'name': 'Book 2'},
+ {'id': self.b3.id, 'name': 'Book 3'},
+ {'id': self.b7.id, 'name': 'Book 7'},
+ {'id': self.b1.id, 'name': 'Book 1'},
],
transform=identity)
# You can use values() with iterator() for memory savings,
# because iterator() uses database-level iteration.
- self.assertQuerysetEqual(Book.objects.values('id', 'title').iterator(),
+ self.assertQuerysetEqual(Book.objects.values('id', 'name').iterator(),
[
- {'title': 'Book 5', 'id': self.b5.id},
- {'title': 'Book 6', 'id': self.b6.id},
- {'title': 'Book 4', 'id': self.b4.id},
- {'title': 'Book 2', 'id': self.b2.id},
- {'title': 'Book 3', 'id': self.b3.id},
- {'title': 'Book 7', 'id': self.b7.id},
- {'title': 'Book 1', 'id': self.b1.id},
+ {'name': 'Book 5', 'id': self.b5.id},
+ {'name': 'Book 6', 'id': self.b6.id},
+ {'name': 'Book 4', 'id': self.b4.id},
+ {'name': 'Book 2', 'id': self.b2.id},
+ {'name': 'Book 3', 'id': self.b3.id},
+ {'name': 'Book 7', 'id': self.b7.id},
+ {'name': 'Book 1', 'id': self.b1.id},
],
transform=identity)
# The values() method works with "extra" fields specified in extra(select).
@@ -205,39 +204,39 @@ def test_values(self):
}], transform=identity)
# You can specify fields from forward and reverse relations, just like filter().
self.assertQuerysetEqual(
- Book.objects.values('title', 'author__name'),
+ Book.objects.values('name', 'author__name'),
[
- {'title': self.b5.title, 'author__name': self.au2.name},
- {'title': self.b6.title, 'author__name': self.au2.name},
- {'title': self.b4.title, 'author__name': self.au1.name},
- {'title': self.b2.title, 'author__name': self.au1.name},
- {'title': self.b3.title, 'author__name': self.au1.name},
- {'title': self.b7.title, 'author__name': self.au2.name},
- {'title': self.b1.title, 'author__name': self.au1.name},
+ {'name': self.b5.name, 'author__name': self.au2.name},
+ {'name': self.b6.name, 'author__name': self.au2.name},
+ {'name': self.b4.name, 'author__name': self.au1.name},
+ {'name': self.b2.name, 'author__name': self.au1.name},
+ {'name': self.b3.name, 'author__name': self.au1.name},
+ {'name': self.b7.name, 'author__name': self.au2.name},
+ {'name': self.b1.name, 'author__name': self.au1.name},
], transform=identity)
self.assertQuerysetEqual(
- Author.objects.values('name', 'book__title').order_by('name', 'book__title'),
+ Author.objects.values('name', 'book__name').order_by('name', 'book__name'),
[
- {'name': self.au1.name, 'book__title': self.b1.title},
- {'name': self.au1.name, 'book__title': self.b2.title},
- {'name': self.au1.name, 'book__title': self.b3.title},
- {'name': self.au1.name, 'book__title': self.b4.title},
- {'name': self.au2.name, 'book__title': self.b5.title},
- {'name': self.au2.name, 'book__title': self.b6.title},
- {'name': self.au2.name, 'book__title': self.b7.title},
+ {'name': self.au1.name, 'book__name': self.b1.name},
+ {'name': self.au1.name, 'book__name': self.b2.name},
+ {'name': self.au1.name, 'book__name': self.b3.name},
+ {'name': self.au1.name, 'book__name': self.b4.name},
+ {'name': self.au2.name, 'book__name': self.b5.name},
+ {'name': self.au2.name, 'book__name': self.b6.name},
+ {'name': self.au2.name, 'book__name': self.b7.name},
], transform=identity)
self.assertQuerysetEqual(
- Author.objects.values('name', 'book__title', 'book__tag__name').order_by('name', 'book__title', 'book__tag__name'),
+ Author.objects.values('name', 'book__name', 'book__tag__name').order_by('name', 'book__name', 'book__tag__name'),
[
- {'name': self.au1.name, 'book__title': self.b1.title, 'book__tag__name': self.t1.name},
- {'name': self.au1.name, 'book__title': self.b2.title, 'book__tag__name': self.t1.name},
- {'name': self.au1.name, 'book__title': self.b3.title, 'book__tag__name': self.t1.name},
- {'name': self.au1.name, 'book__title': self.b3.title, 'book__tag__name': self.t2.name},
- {'name': self.au1.name, 'book__title': self.b4.title, 'book__tag__name': self.t2.name},
- {'name': self.au2.name, 'book__title': self.b5.title, 'book__tag__name': self.t2.name},
- {'name': self.au2.name, 'book__title': self.b5.title, 'book__tag__name': self.t3.name},
- {'name': self.au2.name, 'book__title': self.b6.title, 'book__tag__name': self.t3.name},
- {'name': self.au2.name, 'book__title': self.b7.title, 'book__tag__name': self.t3.name},
+ {'name': self.au1.name, 'book__name': self.b1.name, 'book__tag__name': self.t1.name},
+ {'name': self.au1.name, 'book__name': self.b2.name, 'book__tag__name': self.t1.name},
+ {'name': self.au1.name, 'book__name': self.b3.name, 'book__tag__name': self.t1.name},
+ {'name': self.au1.name, 'book__name': self.b3.name, 'book__tag__name': self.t2.name},
+ {'name': self.au1.name, 'book__name': self.b4.name, 'book__tag__name': self.t2.name},
+ {'name': self.au2.name, 'book__name': self.b5.name, 'book__tag__name': self.t2.name},
+ {'name': self.au2.name, 'book__name': self.b5.name, 'book__tag__name': self.t3.name},
+ {'name': self.au2.name, 'book__name': self.b6.name, 'book__tag__name': self.t3.name},
+ {'name': self.au2.name, 'book__name': self.b7.name, 'book__tag__name': self.t3.name},
], transform=identity)
# However, an exception FieldDoesNotExist will be thrown if you specify
# a non-existent field name in values() (a field that is neither in the
@@ -250,7 +249,7 @@ def test_values(self):
[{
'id': self.b5.id,
'author_id': self.au2.id,
- 'title': 'Book 5',
+ 'name': 'Book 5',
'pages': 0,
'pubdate': datetime(2005, 8, 1, 9, 0)
}], transform=identity)
@@ -261,7 +260,7 @@ def test_values_list(self):
# Within each tuple, the order of the elements is the same as the order
# of fields in the values_list() call.
identity = lambda x:x
- self.assertQuerysetEqual(Book.objects.values_list('title'),
+ self.assertQuerysetEqual(Book.objects.values_list('name'),
[
('Book 5',),
('Book 6',),
@@ -310,19 +309,19 @@ def test_values_list(self):
],
transform=identity)
self.assertQuerysetEqual(
- Author.objects.values_list('name', 'book__title', 'book__tag__name').order_by('name', 'book__title', 'book__tag__name'),
+ Author.objects.values_list('name', 'book__name', 'book__tag__name').order_by('name', 'book__name', 'book__tag__name'),
[
- (self.au1.name, self.b1.title, self.t1.name),
- (self.au1.name, self.b2.title, self.t1.name),
- (self.au1.name, self.b3.title, self.t1.name),
- (self.au1.name, self.b3.title, self.t2.name),
- (self.au1.name, self.b4.title, self.t2.name),
- (self.au2.name, self.b5.title, self.t2.name),
- (self.au2.name, self.b5.title, self.t3.name),
- (self.au2.name, self.b6.title, self.t3.name),
- (self.au2.name, self.b7.title, self.t3.name),
+ (self.au1.name, self.b1.name, self.t1.name),
+ (self.au1.name, self.b2.name, self.t1.name),
+ (self.au1.name, self.b3.name, self.t1.name),
+ (self.au1.name, self.b3.name, self.t2.name),
+ (self.au1.name, self.b4.name, self.t2.name),
+ (self.au2.name, self.b5.name, self.t2.name),
+ (self.au2.name, self.b5.name, self.t3.name),
+ (self.au2.name, self.b6.name, self.t3.name),
+ (self.au2.name, self.b7.name, self.t3.name),
], transform=identity)
- self.assertRaises(TypeError, Book.objects.values_list, 'id', 'title', flat=True)
+ self.assertRaises(TypeError, Book.objects.values_list, 'id', 'name', flat=True)
def test_get_next_previous_by(self):
# Every DateField and DateTimeField creates get_next_by_FOO() and
@@ -333,7 +332,7 @@ def test_get_next_previous_by(self):
'<Book: Book 2>')
self.assertEqual(repr(self.b2.get_next_by_pubdate()),
'<Book: Book 3>')
- self.assertEqual(repr(self.b2.get_next_by_pubdate(title__endswith='6')),
+ self.assertEqual(repr(self.b2.get_next_by_pubdate(name__endswith='6')),
'<Book: Book 6>')
self.assertEqual(repr(self.b3.get_next_by_pubdate()),
'<Book: Book 7>')
@@ -361,9 +360,9 @@ def test_get_next_previous_by(self):
def test_escaping(self):
# Underscores, percent signs and backslashes have special meaning in the
# underlying SQL code, but Django handles the quoting of them automatically.
- b8 = Book(title='Book_ with underscore', pubdate=datetime(2005, 11, 20))
+ b8 = Book(name='Book_ with underscore', pubdate=datetime(2005, 11, 20))
b8.save()
- self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book'),
+ self.assertQuerysetEqual(Book.objects.filter(name__startswith='Book'),
[
'<Book: Book_ with underscore>',
'<Book: Book 5>',
@@ -374,11 +373,11 @@ def test_escaping(self):
'<Book: Book 7>',
'<Book: Book 1>',
])
- self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book_'),
+ self.assertQuerysetEqual(Book.objects.filter(name__startswith='Book_'),
['<Book: Book_ with underscore>'])
- b9 = Book(title='Book% with percent sign', pubdate=datetime(2005, 11, 21))
+ b9 = Book(name='Book% with percent sign', pubdate=datetime(2005, 11, 21))
b9.save()
- self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book'),
+ self.assertQuerysetEqual(Book.objects.filter(name__startswith='Book'),
[
'<Book: Book% with percent sign>',
'<Book: Book_ with underscore>',
@@ -390,21 +389,21 @@ def test_escaping(self):
'<Book: Book 7>',
'<Book: Book 1>',
])
- self.assertQuerysetEqual(Book.objects.filter(title__startswith='Book%'),
+ self.assertQuerysetEqual(Book.objects.filter(name__startswith='Book%'),
['<Book: Book% with percent sign>'])
- b10 = Book(title='Book with \\ backslash', pubdate=datetime(2005, 11, 22))
+ b10 = Book(name='Book with \\ backslash', pubdate=datetime(2005, 11, 22))
b10.save()
- self.assertQuerysetEqual(Book.objects.filter(title__contains='\\'),
+ self.assertQuerysetEqual(Book.objects.filter(name__contains='\\'),
['<Book: Book with \ backslash>'])
def test_exclude(self):
- b8 = Book.objects.create(title='Book_ with underscore', pubdate=datetime(2005, 11, 20))
- b9 = Book.objects.create(title='Book% with percent sign', pubdate=datetime(2005, 11, 21))
- b10 = Book.objects.create(title='Book with \\ backslash', pubdate=datetime(2005, 11, 22))
+ b8 = Book.objects.create(name='Book_ with underscore', pubdate=datetime(2005, 11, 20))
+ b9 = Book.objects.create(name='Book% with percent sign', pubdate=datetime(2005, 11, 21))
+ b10 = Book.objects.create(name='Book with \\ backslash', pubdate=datetime(2005, 11, 22))
# exclude() is the opposite of filter() when doing lookups:
self.assertQuerysetEqual(
- Book.objects.filter(title__contains='Book').exclude(title__contains='with'),
+ Book.objects.filter(name__contains='Book').exclude(name__contains='with'),
[
'<Book: Book 5>',
'<Book: Book 6>',
@@ -414,7 +413,7 @@ def test_exclude(self):
'<Book: Book 7>',
'<Book: Book 1>',
])
- self.assertQuerysetEqual(Book.objects.exclude(title__startswith="Book_"),
+ self.assertQuerysetEqual(Book.objects.exclude(name__startswith="Book_"),
[
'<Book: Book with \\ backslash>',
'<Book: Book% with percent sign>',
@@ -426,7 +425,7 @@ def test_exclude(self):
'<Book: Book 7>',
'<Book: Book 1>',
])
- self.assertQuerysetEqual(Book.objects.exclude(title="Book 7"),
+ self.assertQuerysetEqual(Book.objects.exclude(name="Book 7"),
[
'<Book: Book with \\ backslash>',
'<Book: Book% with percent sign>',
@@ -443,12 +442,12 @@ def test_none(self):
# none() returns a QuerySet that behaves like any other QuerySet object
self.assertQuerysetEqual(Book.objects.none(), [])
self.assertQuerysetEqual(
- Book.objects.none().filter(title__startswith='Book'), [])
+ Book.objects.none().filter(name__startswith='Book'), [])
self.assertQuerysetEqual(
- Book.objects.filter(title__startswith='Book').none(), [])
+ Book.objects.filter(name__startswith='Book').none(), [])
self.assertEqual(Book.objects.none().count(), 0)
self.assertEqual(
- Book.objects.none().update(title="This should not take effect"), 0)
+ Book.objects.none().update(name="This should not take effect"), 0)
self.assertQuerysetEqual(
[article for article in Book.objects.none().iterator()],
[])
@@ -469,41 +468,46 @@ def test_in(self):
def test_error_messages(self):
# Programming errors are pointed out with nice error messages
- with six.assertRaisesRegex(self, FieldError, "Cannot resolve keyword 'pubdate_year' "
- "into field. Choices are: .+"):
- Book.objects.filter(pubdate_year='2005').count()
-
- with self.assertRaises(FieldError, msg="Join on field 'title' not permitted. "
- "Did you misspell 'starts' for the lookup type?"):
- Book.objects.filter(title__starts='Book')
+ try:
+ Book.objects.filter(pubdate_year='2005').count()
+ self.fail('FieldError not raised')
+ except FieldError as ex:
+ self.assertEqual(str(ex), "Cannot resolve keyword 'pubdate_year' "
+ "into field. Choices are: author, id, name, pages, pubdate, tag, tags")
+ try:
+ Book.objects.filter(name__starts='Book')
+ self.fail('FieldError not raised')
+ except FieldError as ex:
+ self.assertEqual(str(ex), "Join on field 'name' not permitted. "
+ "Did you misspell 'starts' for the lookup type?")
def test_regex(self):
# Create some articles with a bit more interesting names for testing field lookups:
for a in Book.objects.all():
a.delete()
now = datetime.now()
- b1 = Book(pubdate=now, title='f')
+ b1 = Book(pubdate=now, name='f')
b1.save()
- b2 = Book(pubdate=now, title='fo')
+ b2 = Book(pubdate=now, name='fo')
b2.save()
- b3 = Book(pubdate=now, title='foo')
+ b3 = Book(pubdate=now, name='foo')
b3.save()
- b4 = Book(pubdate=now, title='fooo')
+ b4 = Book(pubdate=now, name='fooo')
b4.save()
- b5 = Book(pubdate=now, title='hey-Foo')
+ b5 = Book(pubdate=now, name='hey-Foo')
b5.save()
- b6 = Book(pubdate=now, title='bar')
+ b6 = Book(pubdate=now, name='bar')
b6.save()
- b7 = Book(pubdate=now, title='AbBa')
+ b7 = Book(pubdate=now, name='AbBa')
b7.save()
- b8 = Book(pubdate=now, title='baz')
+ b8 = Book(pubdate=now, name='baz')
b8.save()
- b9 = Book(pubdate=now, title='baxZ')
+ b9 = Book(pubdate=now, name='baxZ')
b9.save()
# zero-or-more
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'fo*'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'fo*'),
['<Book: f>', '<Book: fo>', '<Book: foo>', '<Book: fooo>'])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'fo*'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'fo*'),
[
'<Book: f>',
'<Book: fo>',
@@ -512,54 +516,54 @@ def test_regex(self):
'<Book: hey-Foo>',
])
# one-or-more
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'fo+'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'fo+'),
['<Book: fo>', '<Book: foo>', '<Book: fooo>'])
# wildcard
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'fooo?'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'fooo?'),
['<Book: foo>', '<Book: fooo>'])
# leading anchor
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'^b'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'^b'),
['<Book: bar>', '<Book: baxZ>', '<Book: baz>'])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'^a'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'^a'),
['<Book: AbBa>'])
# trailing anchor
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'z$'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'z$'),
['<Book: baz>'])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'z$'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'z$'),
['<Book: baxZ>', '<Book: baz>'])
# character sets
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'ba[rz]'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'ba[rz]'),
['<Book: bar>', '<Book: baz>'])
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'ba.[RxZ]'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'ba.[RxZ]'),
['<Book: baxZ>'])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'ba[RxZ]'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'ba[RxZ]'),
['<Book: bar>', '<Book: baxZ>', '<Book: baz>'])
# and more articles:
- b10 = Book(pubdate=now, title='foobar')
+ b10 = Book(pubdate=now, name='foobar')
b10.save()
- b11 = Book(pubdate=now, title='foobaz')
+ b11 = Book(pubdate=now, name='foobaz')
b11.save()
- b12 = Book(pubdate=now, title='ooF')
+ b12 = Book(pubdate=now, name='ooF')
b12.save()
- b13 = Book(pubdate=now, title='foobarbaz')
+ b13 = Book(pubdate=now, name='foobarbaz')
b13.save()
- b14 = Book(pubdate=now, title='zoocarfaz')
+ b14 = Book(pubdate=now, name='zoocarfaz')
b14.save()
- b15 = Book(pubdate=now, title='barfoobaz')
+ b15 = Book(pubdate=now, name='barfoobaz')
b15.save()
- b16 = Book(pubdate=now, title='bazbaRFOO')
+ b16 = Book(pubdate=now, name='bazbaRFOO')
b16.save()
# alternation
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'oo(f|b)'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'oo(f|b)'),
[
'<Book: barfoobaz>',
'<Book: foobar>',
'<Book: foobarbaz>',
'<Book: foobaz>',
])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'oo(f|b)'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'oo(f|b)'),
[
'<Book: barfoobaz>',
'<Book: foobar>',
@@ -567,11 +571,11 @@ def test_regex(self):
'<Book: foobaz>',
'<Book: ooF>',
])
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'^foo(f|b)'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'^foo(f|b)'),
['<Book: foobar>', '<Book: foobarbaz>', '<Book: foobaz>'])
# greedy matching
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'b.*az'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'b.*az'),
[
'<Book: barfoobaz>',
'<Book: baz>',
@@ -579,7 +583,7 @@ def test_regex(self):
'<Book: foobarbaz>',
'<Book: foobaz>',
])
- self.assertQuerysetEqual(Book.objects.filter(title__iregex=r'b.*ar'),
+ self.assertQuerysetEqual(Book.objects.filter(name__iregex=r'b.*ar'),
[
'<Book: bar>',
'<Book: barfoobaz>',
@@ -592,21 +596,21 @@ def test_regex(self):
def test_regex_backreferencing(self):
# grouping and backreferences
now = datetime.now()
- b10 = Book(pubdate=now, title='foobar')
+ b10 = Book(pubdate=now, name='foobar')
b10.save()
- b11 = Book(pubdate=now, title='foobaz')
+ b11 = Book(pubdate=now, name='foobaz')
b11.save()
- b12 = Book(pubdate=now, title='ooF')
+ b12 = Book(pubdate=now, name='ooF')
b12.save()
- b13 = Book(pubdate=now, title='foobarbaz')
+ b13 = Book(pubdate=now, name='foobarbaz')
b13.save()
- b14 = Book(pubdate=now, title='zoocarfaz')
+ b14 = Book(pubdate=now, name='zoocarfaz')
b14.save()
- b15 = Book(pubdate=now, title='barfoobaz')
+ b15 = Book(pubdate=now, name='barfoobaz')
b15.save()
- b16 = Book(pubdate=now, title='bazbaRFOO')
+ b16 = Book(pubdate=now, name='bazbaRFOO')
b16.save()
- self.assertQuerysetEqual(Book.objects.filter(title__regex=r'b(.).*b\1'),
+ self.assertQuerysetEqual(Book.objects.filter(name__regex=r'b(.).*b\1'),
['<Book: barfoobaz>', '<Book: bazbaRFOO>', '<Book: foobarbaz>'])
def test_nonfield_lookups(self):
View
27 tests/model_forms/models.py
@@ -17,7 +17,6 @@
from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
-from shared_models.models import Author, Book
temp_storage_dir = tempfile.mkdtemp(dir=os.environ['DJANGO_TEST_TEMP_DIR'])
temp_storage = FileSystemStorage(temp_storage_dir)
@@ -47,12 +46,22 @@ def __repr__(self):
return self.__str__()
@python_2_unicode_compatible
+class Writer(models.Model):
+ name = models.CharField(max_length=50, help_text='Use both first and last names.')
+
+ class Meta:
+ ordering = ('name',)
+
+ def __str__(self):
+ return self.name
+
+@python_2_unicode_compatible
class Article(models.Model):
headline = models.CharField(max_length=50)
slug = models.SlugField()
pub_date = models.DateField()
created = models.DateField(editable=False)
- writer = models.ForeignKey(Author)
+ writer = models.ForeignKey(Writer)
article = models.TextField()
categories = models.ManyToManyField(Category, blank=True)
status = models.PositiveIntegerField(choices=ARTICLE_STATUS, blank=True, null=True)
@@ -72,12 +81,12 @@ class ImprovedArticle(models.Model):
class ImprovedArticleWithParentLink(models.Model):
article = models.OneToOneField(Article, parent_link=True)
-class BetterAuthor(Author):
+class BetterWriter(Writer):
score = models.IntegerField()
@python_2_unicode_compatible
-class AuthorProfile(models.Model):
- writer = models.OneToOneField(Author, primary_key=True)
+class WriterProfile(models.Model):
+ writer = models.OneToOneField(Writer, primary_key=True)
age = models.PositiveIntegerField()
def __str__(self):
@@ -177,6 +186,14 @@ def __str__(self):
def __repr__(self):
return self.__str__()
+class Book(models.Model):
+ title = models.CharField(max_length=40)
+ author = models.ForeignKey(Writer, blank=True, null=True)
+ special_id = models.IntegerField(blank=True, null=True, unique=True)
+
+ class Meta:
+ unique_together = ('title', 'author')
+
class BookXtra(models.Model):
isbn = models.CharField(max_length=16, unique=True)
suffix1 = models.IntegerField(blank=True, default=0)
View
89 tests/model_forms/tests.py
@@ -17,13 +17,11 @@
from django.test import TestCase
from django.utils import six
-from shared_models.models import Author, Book
-
-from .models import (Article, ArticleStatus, BetterAuthor, BigInt,
+from .models import (Article, ArticleStatus, BetterWriter, BigInt, Book,
Category, CommaSeparatedInteger, CustomFieldForExclusionModel, DerivedBook,
DerivedPost, ExplicitPK, FlexibleDatePost, ImprovedArticle,
ImprovedArticleWithParentLink, Inventory, Post, Price,
- Product, TextFile, AuthorProfile, Colour, ColourfulItem,
+ Product, TextFile, Writer, WriterProfile, Colour, ColourfulItem,
ArticleStatusNote, DateTimePost, test_images)
if test_images:
@@ -54,13 +52,11 @@ class Meta:
class BookForm(forms.ModelForm):
class Meta:
- fields = ['title', 'author', 'pubdate']
- model = Book
+ model = Book
class DerivedBookForm(forms.ModelForm):
class Meta:
- fields = ['title', 'author', 'isbn', 'suffix1', 'suffix2']
model = DerivedBook
@@ -88,11 +84,11 @@ class Meta:
fields = '__all__'
-class CustomAuthorForm(forms.ModelForm):
+class CustomWriterForm(forms.ModelForm):
name = forms.CharField(required=False)
class Meta:
- model = Author
+ model = Writer
fields = '__all__'
@@ -128,7 +124,7 @@ class Meta:
class RoykoForm(forms.ModelForm):
class Meta:
- model = Author
+ model = Writer
fields = '__all__'
@@ -188,15 +184,14 @@ class Meta:
fields = '__all__'
-class BetterAuthorForm(forms.ModelForm):
+class BetterWriterForm(forms.ModelForm):
class Meta:
- model = BetterAuthor
+ model = BetterWriter
fields = '__all__'
-
-class AuthorProfileForm(forms.ModelForm):
+class WriterProfileForm(forms.ModelForm):
class Meta:
- model = AuthorProfile
+ model = WriterProfile
fields = '__all__'
@@ -324,14 +319,14 @@ class Meta:
forms.fields.BooleanField)
def test_override_field(self):
- class AuthorForm(forms.ModelForm):
+ class WriterForm(forms.ModelForm):
book = forms.CharField(required=False)
class Meta:
- model = Author
+ model = Writer
fields = '__all__'
- wf = AuthorForm({'name': 'Richard Lockridge'})
+ wf = WriterForm({'name': 'Richard Lockridge'})
self.assertTrue(wf.is_valid())
def test_limit_nonexistent_field(self):
@@ -556,7 +551,7 @@ def test_validates_with_replaced_field_excluded(self):
assert form.is_valid()
def test_notrequired_overrides_notblank(self):
- form = CustomAuthorForm({})
+ form = CustomWriterForm({})
assert form.is_valid()
@@ -565,7 +560,7 @@ def test_notrequired_overrides_notblank(self):
# unique/unique_together validation
class UniqueTest(TestCase):
def setUp(self):
- self.author = Author.objects.create(name='Mike Royko')
+ self.writer = Writer.objects.create(name='Mike Royko')
def test_simple_unique(self):
form = ProductForm({'slug': 'teddy-bear-blue'})
@@ -589,31 +584,33 @@ def test_unique_together(self):
def test_unique_null(self):
title = 'I May Be Wrong But I Doubt It'
- form = BookForm({'title': title, 'author': self.author.pk, 'pubdate': '2012-12-12 00:00:00'})
+ form = BookForm({'title': title, 'author': self.writer.pk})
self.assertTrue(form.is_valid())
form.save()
- form = BookForm({'title': title, 'author': self.author.pk, 'pubdate': '2012-12-12 00:00:00'})
+ form = BookForm({'title': title, 'author': self.writer.pk})
self.assertFalse(form.is_valid())
self.assertEqual(len(form.errors), 1)
self.assertEqual(form.errors['__all__'], ['Book with this Title and Author already exists.'])
- form = BookForm({'title': title, 'pubdate': '2012-12-12 00:00:00'})
+ form = BookForm({'title': title})
self.assertTrue(form.is_valid())
form.save()
- form = BookForm({'title': title, 'pubdate': '2012-12-12 00:00:00'})
+ form = BookForm({'title': title})
self.assertTrue(form.is_valid())
def test_inherited_unique(self):
- form = BetterAuthorForm({'name': 'Mike Royko', 'score': 3})
+ title = 'Boss'
+ Book.objects.create(title=title, author=self.writer, special_id=1)
+ form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'special_id': '1', 'isbn': '12345'})
self.assertFalse(form.is_valid())
self.assertEqual(len(form.errors), 1)
- self.assertEqual(form.errors['name'], ['Author with this Name already exists.'])
+ self.assertEqual(form.errors['special_id'], ['Book with this Special id already exists.'])
def test_inherited_unique_together(self):
title = 'Boss'
- form = BookForm({'title': title, 'author': self.author.pk, 'pubdate': '2012-12-12 00:00:00'})
+ form = BookForm({'title': title, 'author': self.writer.pk})
self.assertTrue(form.is_valid())
form.save()
- form = DerivedBookForm({'title': title, 'author': self.author.pk, 'isbn': '12345'})
+ form = DerivedBookForm({'title': title, 'author': self.writer.pk, 'isbn': '12345'})
self.assertFalse(form.is_valid())
self.assertEqual(len(form.errors), 1)
self.assertEqual(form.errors['__all__'], ['Book with this Title and Author already exists.'])
@@ -621,9 +618,8 @@ def test_inherited_unique_together(self):
def test_abstract_inherited_unique(self):
title = 'Boss'
isbn = '12345'
- dbook = DerivedBook.objects.create(title=title, author=self.author, isbn=isbn,
- pubdate='2012-12-12 00:00')
- form = DerivedBookForm({'title': 'Other', 'author': self.author.pk, 'isbn': isbn})
+ dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
+ form = DerivedBookForm({'title': 'Other', 'author': self.writer.pk, 'isbn': isbn})
self.assertFalse(form.is_valid())
self.assertEqual(len(form.errors), 1)
self.assertEqual(form.errors['isbn'], ['Derived book with this Isbn already exists.'])
@@ -631,11 +627,10 @@ def test_abstract_inherited_unique(self):
def test_abstract_inherited_unique_together(self):
title = 'Boss'
isbn = '12345'
- dbook = DerivedBook.objects.create(title=title, author=self.author, isbn=isbn,
- pubdate='2012-12-12 00:00')
+ dbook = DerivedBook.objects.create(title=title, author=self.writer, isbn=isbn)
form = DerivedBookForm({
'title': 'Other',
- 'author': self.author.pk,
+ 'author': self.writer.pk,
'isbn': '9876',
'suffix1': '0',
'suffix2': '0'
@@ -753,7 +748,7 @@ def test_model_to_dict_many_to_many(self):
]
for c in categories:
c.save()
- writer = Author(name='Test writer')
+ writer = Writer(name='Test writer')
writer.save()
art = Article(
@@ -862,10 +857,10 @@ def test_with_data(self):
with self.assertRaises(ValueError):
f.save()
- # Create a couple of Authors.
- w_royko = Author(name='Mike Royko')
+ # Create a couple of Writers.
+ w_royko = Writer(name='Mike Royko')
w_royko.save()
- w_woodward = Author(name='Bob Woodward')
+ w_woodward = Writer(name='Bob Woodward')
w_woodward.save()
# ManyToManyFields are represented by a MultipleChoiceField, ForeignKeys and any
# fields with the 'choices' attribute are represented by a ChoiceField.
@@ -903,9 +898,9 @@ def test_with_data(self):
# When the ModelForm is passed an instance, that instance's current values are
# inserted as 'initial' data in each Field.
- w = Author.objects.get(name='Mike Royko')
+ w = Writer.objects.get(name='Mike Royko')
f = RoykoForm(auto_id=False, instance=w)
- self.assertHTMLEqual(six.text_type(f), '''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="100" /><br /><span class="helptext">Use both first and last names.</span></td></tr>''')
+ self.assertHTMLEqual(six.text_type(f), '''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" /><br /><span class="helptext">Use both first and last names.</span></td></tr>''')
art = Article(
headline='Test article',
@@ -1117,7 +1112,7 @@ def test_with_data(self):
c4 = Category.objects.create(name='Fourth', url='4th')
self.assertEqual(c4.name, 'Fourth')
- w_bernstein = Author.objects.create(name='Carl Bernstein')
+ w_bernstein = Writer.objects.create(name='Carl Bernstein')
self.assertEqual(w_bernstein.name, 'Carl Bernstein')
self.assertHTMLEqual(f.as_ul(), '''<li>Headline: <input type="text" name="headline" maxlength="50" /></li>
<li>Slug: <input type="text" name="slug" maxlength="50" /></li>
@@ -1294,17 +1289,17 @@ def test_with_data(self):
self.assertEqual(list(ImprovedArticleWithParentLinkForm.base_fields), [])
- bw = BetterAuthor(name='Joe Better', score=10)
+ bw = BetterWriter(name='Joe Better', score=10)
bw.save()
self.assertEqual(sorted(model_to_dict(bw)),
- ['author_ptr', 'id', 'name', 'score'])
+ ['id', 'name', 'score', 'writer_ptr'])
- form = BetterAuthorForm({'name': 'Some Name', 'score': 12})
+ form = BetterWriterForm({'name': 'Some Name', 'score': 12})
self.assertEqual(form.is_valid(), True)
bw2 = form.save()
bw2.delete()
- form = AuthorProfileForm()
+ form = WriterProfileForm()
self.assertHTMLEqual(form.as_p(), '''<p><label for="id_writer">Writer:</label> <select name="writer" id="id_writer">
<option value="" selected="selected">---------</option>
<option value="%s">Bob Woodward</option>
@@ -1318,11 +1313,11 @@ def test_with_data(self):
'writer': six.text_type(w_woodward.pk),
'age': '65',
}
- form = AuthorProfileForm(data)
+ form = WriterProfileForm(data)
instance = form.save()
self.assertEqual(six.text_type(instance), 'Bob Woodward is 65')
- form = AuthorProfileForm(instance=instance)
+ form = WriterProfileForm(instance=instance)
self.assertHTMLEqual(form.as_p(), '''<p><label for="id_writer">Writer:</label> <select name="writer" id="id_writer">
<option value="">---------</option>
<option value="%s" selected="selected">Bob Woodward</option>
View
17 tests/shared_models/models.py
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
from django.db import models
from django.utils import timezone
from django.utils.encoding import python_2_unicode_compatible
@@ -11,11 +9,7 @@ class Tag(models.Model):
@python_2_unicode_compatible
class Author(models.Model):
- name = models.CharField(max_length=100, help_text='Use both first and last names.',
- unique=True)
-
- class Meta:
- ordering = ['name']
+ name = models.CharField(max_length=100)
def __str__(self):
return self.name
@@ -23,15 +17,14 @@ def __str__(self):
@python_2_unicode_compatible
class Book(models.Model):
- title = models.CharField(max_length=200)
+ name = models.CharField(max_length=200)
pages = models.IntegerField(default=0)
- author = models.ForeignKey(Author, null=True, blank=True)
+ author = models.ForeignKey(Author, null=True)
pubdate = models.DateTimeField()
tags = models.ManyToManyField(Tag)
class Meta:
- ordering = ['-pubdate', 'title']
- unique_together = ['title', 'author']
+ ordering = ['-pubdate', 'name']
def __str__(self):
- return self.title
+ return self.name
View
4 tests/signals_regress/tests.py
@@ -77,7 +77,7 @@ def test_model_signals(self):
"Is created"
])
- b1 = Book(title='Snow Crash', pubdate='2012-02-02 12:00')
+ b1 = Book(name='Snow Crash', pubdate='2012-02-02 12:00')
self.assertEqual(self.get_signal_output(b1.save), [
"pre_save signal, Snow Crash",
"post_save signal, Snow Crash",
@@ -87,7 +87,7 @@ def test_model_signals(self):
def test_m2m_signals(self):
""" Assigning and removing to/from m2m shouldn't generate an m2m signal """
- b1 = Book(title='Snow Crash', pubdate='2012-02-02 12:00')
+ b1 = Book(name='Snow Crash', pubdate='2012-02-02 12:00')
self.get_signal_output(b1.save)
a1 = Author(name='Neal Stephenson')
self.get_signal_output(a1.save)
Please sign in to comment.
Something went wrong with that request. Please try again.