|
1 from django.test import TestCase |
|
2 |
|
3 from models import Author, Publisher |
|
4 |
|
5 |
|
6 class GetOrCreateTests(TestCase): |
|
7 def test_related(self): |
|
8 p = Publisher.objects.create(name="Acme Publishing") |
|
9 # Create a book through the publisher. |
|
10 book, created = p.books.get_or_create(name="The Book of Ed & Fred") |
|
11 self.assertTrue(created) |
|
12 # The publisher should have one book. |
|
13 self.assertEqual(p.books.count(), 1) |
|
14 |
|
15 # Try get_or_create again, this time nothing should be created. |
|
16 book, created = p.books.get_or_create(name="The Book of Ed & Fred") |
|
17 self.assertFalse(created) |
|
18 # And the publisher should still have one book. |
|
19 self.assertEqual(p.books.count(), 1) |
|
20 |
|
21 # Add an author to the book. |
|
22 ed, created = book.authors.get_or_create(name="Ed") |
|
23 self.assertTrue(created) |
|
24 # Book should have one author. |
|
25 self.assertEqual(book.authors.count(), 1) |
|
26 |
|
27 # Try get_or_create again, this time nothing should be created. |
|
28 ed, created = book.authors.get_or_create(name="Ed") |
|
29 self.assertFalse(created) |
|
30 # And the book should still have one author. |
|
31 self.assertEqual(book.authors.count(), 1) |
|
32 |
|
33 # Add a second author to the book. |
|
34 fred, created = book.authors.get_or_create(name="Fred") |
|
35 self.assertTrue(created) |
|
36 |
|
37 # The book should have two authors now. |
|
38 self.assertEqual(book.authors.count(), 2) |
|
39 |
|
40 # Create an Author not tied to any books. |
|
41 Author.objects.create(name="Ted") |
|
42 |
|
43 # There should be three Authors in total. The book object should have two. |
|
44 self.assertEqual(Author.objects.count(), 3) |
|
45 self.assertEqual(book.authors.count(), 2) |
|
46 |
|
47 # Try creating a book through an author. |
|
48 _, created = ed.books.get_or_create(name="Ed's Recipes", publisher=p) |
|
49 self.assertTrue(created) |
|
50 |
|
51 # Now Ed has two Books, Fred just one. |
|
52 self.assertEqual(ed.books.count(), 2) |
|
53 self.assertEqual(fred.books.count(), 1) |