Переглянути джерело

Consolidated get_or_create tests.

Aymeric Augustin 11 роки тому
батько
коміт
25b2ce896b

+ 14 - 8
tests/get_or_create/models.py

@@ -1,11 +1,3 @@
-"""
-33. get_or_create()
-
-``get_or_create()`` does what it says: it tries to look up an object with the
-given parameters. If an object isn't found, it creates one with the given
-parameters.
-"""
-
 from __future__ import unicode_literals
 
 from django.db import models
@@ -42,3 +34,17 @@ class Tag(models.Model):
 class Thing(models.Model):
     name = models.CharField(max_length=256)
     tags = models.ManyToManyField(Tag)
+
+
+class Publisher(models.Model):
+    name = models.CharField(max_length=100)
+
+
+class Author(models.Model):
+    name = models.CharField(max_length=100)
+
+
+class Book(models.Model):
+    name = models.CharField(max_length=100)
+    authors = models.ManyToManyField(Author, related_name='books')
+    publisher = models.ForeignKey(Publisher, related_name='books', db_column="publisher_id_column")

+ 61 - 1
tests/get_or_create/tests.py

@@ -8,7 +8,8 @@ from django.db import IntegrityError, DatabaseError
 from django.utils.encoding import DjangoUnicodeDecodeError
 from django.test import TestCase, TransactionTestCase
 
-from .models import DefaultPerson, Person, ManualPrimaryKeyTest, Profile, Tag, Thing
+from .models import (DefaultPerson, Person, ManualPrimaryKeyTest, Profile,
+    Tag, Thing, Publisher, Author)
 
 
 class GetOrCreateTests(TestCase):
@@ -237,3 +238,62 @@ class UpdateOrCreateTests(TestCase):
         except IntegrityError:
             formatted_traceback = traceback.format_exc()
             self.assertIn('obj.save', formatted_traceback)
+
+    def test_related(self):
+        p = Publisher.objects.create(name="Acme Publishing")
+        # Create a book through the publisher.
+        book, created = p.books.get_or_create(name="The Book of Ed & Fred")
+        self.assertTrue(created)
+        # The publisher should have one book.
+        self.assertEqual(p.books.count(), 1)
+
+        # Try get_or_create again, this time nothing should be created.
+        book, created = p.books.get_or_create(name="The Book of Ed & Fred")
+        self.assertFalse(created)
+        # And the publisher should still have one book.
+        self.assertEqual(p.books.count(), 1)
+
+        # Add an author to the book.
+        ed, created = book.authors.get_or_create(name="Ed")
+        self.assertTrue(created)
+        # The book should have one author.
+        self.assertEqual(book.authors.count(), 1)
+
+        # Try get_or_create again, this time nothing should be created.
+        ed, created = book.authors.get_or_create(name="Ed")
+        self.assertFalse(created)
+        # And the book should still have one author.
+        self.assertEqual(book.authors.count(), 1)
+
+        # Add a second author to the book.
+        fred, created = book.authors.get_or_create(name="Fred")
+        self.assertTrue(created)
+
+        # The book should have two authors now.
+        self.assertEqual(book.authors.count(), 2)
+
+        # Create an Author not tied to any books.
+        Author.objects.create(name="Ted")
+
+        # There should be three Authors in total. The book object should have two.
+        self.assertEqual(Author.objects.count(), 3)
+        self.assertEqual(book.authors.count(), 2)
+
+        # Try creating a book through an author.
+        _, created = ed.books.get_or_create(name="Ed's Recipes", publisher=p)
+        self.assertTrue(created)
+
+        # Now Ed has two Books, Fred just one.
+        self.assertEqual(ed.books.count(), 2)
+        self.assertEqual(fred.books.count(), 1)
+
+        # Use the publisher's primary key value instead of a model instance.
+        _, created = ed.books.get_or_create(name='The Great Book of Ed', publisher_id=p.id)
+        self.assertTrue(created)
+
+        # Try get_or_create again, this time nothing should be created.
+        _, created = ed.books.get_or_create(name='The Great Book of Ed', publisher_id=p.id)
+        self.assertFalse(created)
+
+        # The publisher should have three books.
+        self.assertEqual(p.books.count(), 3)

+ 0 - 0
tests/get_or_create_regress/__init__.py


+ 0 - 15
tests/get_or_create_regress/models.py

@@ -1,15 +0,0 @@
-from django.db import models
-
-
-class Publisher(models.Model):
-    name = models.CharField(max_length=100)
-
-
-class Author(models.Model):
-    name = models.CharField(max_length=100)
-
-
-class Book(models.Model):
-    name = models.CharField(max_length=100)
-    authors = models.ManyToManyField(Author, related_name='books')
-    publisher = models.ForeignKey(Publisher, related_name='books', db_column="publisher_id_column")

+ 0 - 66
tests/get_or_create_regress/tests.py

@@ -1,66 +0,0 @@
-from __future__ import unicode_literals
-
-from django.test import TestCase
-
-from .models import Author, Publisher
-
-
-class GetOrCreateTests(TestCase):
-    def test_related(self):
-        p = Publisher.objects.create(name="Acme Publishing")
-        # Create a book through the publisher.
-        book, created = p.books.get_or_create(name="The Book of Ed & Fred")
-        self.assertTrue(created)
-        # The publisher should have one book.
-        self.assertEqual(p.books.count(), 1)
-
-        # Try get_or_create again, this time nothing should be created.
-        book, created = p.books.get_or_create(name="The Book of Ed & Fred")
-        self.assertFalse(created)
-        # And the publisher should still have one book.
-        self.assertEqual(p.books.count(), 1)
-
-        # Add an author to the book.
-        ed, created = book.authors.get_or_create(name="Ed")
-        self.assertTrue(created)
-        # The book should have one author.
-        self.assertEqual(book.authors.count(), 1)
-
-        # Try get_or_create again, this time nothing should be created.
-        ed, created = book.authors.get_or_create(name="Ed")
-        self.assertFalse(created)
-        # And the book should still have one author.
-        self.assertEqual(book.authors.count(), 1)
-
-        # Add a second author to the book.
-        fred, created = book.authors.get_or_create(name="Fred")
-        self.assertTrue(created)
-
-        # The book should have two authors now.
-        self.assertEqual(book.authors.count(), 2)
-
-        # Create an Author not tied to any books.
-        Author.objects.create(name="Ted")
-
-        # There should be three Authors in total. The book object should have two.
-        self.assertEqual(Author.objects.count(), 3)
-        self.assertEqual(book.authors.count(), 2)
-
-        # Try creating a book through an author.
-        _, created = ed.books.get_or_create(name="Ed's Recipes", publisher=p)
-        self.assertTrue(created)
-
-        # Now Ed has two Books, Fred just one.
-        self.assertEqual(ed.books.count(), 2)
-        self.assertEqual(fred.books.count(), 1)
-
-        # Use the publisher's primary key value instead of a model instance.
-        _, created = ed.books.get_or_create(name='The Great Book of Ed', publisher_id=p.id)
-        self.assertTrue(created)
-
-        # Try get_or_create again, this time nothing should be created.
-        _, created = ed.books.get_or_create(name='The Great Book of Ed', publisher_id=p.id)
-        self.assertFalse(created)
-
-        # The publisher should have three books.
-        self.assertEqual(p.books.count(), 3)