tests.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from datetime import datetime
  2. from django.test import TestCase
  3. from .models import Article, Category
  4. class M2MMultipleTests(TestCase):
  5. def test_multiple(self):
  6. c1, c2, c3, c4 = [
  7. Category.objects.create(name=name)
  8. for name in ["Sports", "News", "Crime", "Life"]
  9. ]
  10. a1 = Article.objects.create(
  11. headline="Parrot steals", pub_date=datetime(2005, 11, 27)
  12. )
  13. a1.primary_categories.add(c2, c3)
  14. a1.secondary_categories.add(c4)
  15. a2 = Article.objects.create(
  16. headline="Parrot runs", pub_date=datetime(2005, 11, 28)
  17. )
  18. a2.primary_categories.add(c1, c2)
  19. a2.secondary_categories.add(c4)
  20. self.assertQuerySetEqual(
  21. a1.primary_categories.all(),
  22. [
  23. "Crime",
  24. "News",
  25. ],
  26. lambda c: c.name,
  27. )
  28. self.assertQuerySetEqual(
  29. a2.primary_categories.all(),
  30. [
  31. "News",
  32. "Sports",
  33. ],
  34. lambda c: c.name,
  35. )
  36. self.assertQuerySetEqual(
  37. a1.secondary_categories.all(),
  38. [
  39. "Life",
  40. ],
  41. lambda c: c.name,
  42. )
  43. self.assertQuerySetEqual(
  44. c1.primary_article_set.all(),
  45. [
  46. "Parrot runs",
  47. ],
  48. lambda a: a.headline,
  49. )
  50. self.assertQuerySetEqual(c1.secondary_article_set.all(), [])
  51. self.assertQuerySetEqual(
  52. c2.primary_article_set.all(),
  53. [
  54. "Parrot steals",
  55. "Parrot runs",
  56. ],
  57. lambda a: a.headline,
  58. )
  59. self.assertQuerySetEqual(c2.secondary_article_set.all(), [])
  60. self.assertQuerySetEqual(
  61. c3.primary_article_set.all(),
  62. [
  63. "Parrot steals",
  64. ],
  65. lambda a: a.headline,
  66. )
  67. self.assertQuerySetEqual(c3.secondary_article_set.all(), [])
  68. self.assertQuerySetEqual(c4.primary_article_set.all(), [])
  69. self.assertQuerySetEqual(
  70. c4.secondary_article_set.all(),
  71. [
  72. "Parrot steals",
  73. "Parrot runs",
  74. ],
  75. lambda a: a.headline,
  76. )