test_get.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from django.test import TestCase
  2. from .models import Comment, Tenant, User
  3. class CompositePKGetTests(TestCase):
  4. maxDiff = None
  5. @classmethod
  6. def setUpTestData(cls):
  7. cls.tenant_1 = Tenant.objects.create()
  8. cls.tenant_2 = Tenant.objects.create()
  9. cls.user_1 = User.objects.create(
  10. tenant=cls.tenant_1,
  11. id=1,
  12. email="user0001@example.com",
  13. )
  14. cls.user_2 = User.objects.create(
  15. tenant=cls.tenant_1,
  16. id=2,
  17. email="user0002@example.com",
  18. )
  19. cls.user_3 = User.objects.create(
  20. tenant=cls.tenant_2,
  21. id=3,
  22. email="user0003@example.com",
  23. )
  24. cls.comment_1 = Comment.objects.create(id=1, user=cls.user_1)
  25. def test_get_user(self):
  26. test_cases = (
  27. {"pk": self.user_1.pk},
  28. {"pk": (self.tenant_1.id, self.user_1.id)},
  29. {"id": self.user_1.id},
  30. )
  31. for lookup in test_cases:
  32. with self.subTest(lookup=lookup):
  33. self.assertEqual(User.objects.get(**lookup), self.user_1)
  34. def test_get_comment(self):
  35. test_cases = (
  36. {"pk": self.comment_1.pk},
  37. {"pk": (self.tenant_1.id, self.comment_1.id)},
  38. {"id": self.comment_1.id},
  39. {"user": self.user_1},
  40. {"user_id": self.user_1.id},
  41. {"user__id": self.user_1.id},
  42. {"user__pk": self.user_1.pk},
  43. {"tenant": self.tenant_1},
  44. {"tenant_id": self.tenant_1.id},
  45. {"tenant__id": self.tenant_1.id},
  46. {"tenant__pk": self.tenant_1.pk},
  47. )
  48. for lookup in test_cases:
  49. with self.subTest(lookup=lookup):
  50. self.assertEqual(Comment.objects.get(**lookup), self.comment_1)
  51. def test_get_or_create_user(self):
  52. test_cases = (
  53. {
  54. "pk": self.user_1.pk,
  55. "defaults": {"email": "user9201@example.com"},
  56. },
  57. {
  58. "pk": (self.tenant_1.id, self.user_1.id),
  59. "defaults": {"email": "user9201@example.com"},
  60. },
  61. {
  62. "tenant": self.tenant_1,
  63. "id": self.user_1.id,
  64. "defaults": {"email": "user3512@example.com"},
  65. },
  66. {
  67. "tenant_id": self.tenant_1.id,
  68. "id": self.user_1.id,
  69. "defaults": {"email": "user8239@example.com"},
  70. },
  71. )
  72. for fields in test_cases:
  73. with self.subTest(fields=fields):
  74. count = User.objects.count()
  75. user, created = User.objects.get_or_create(**fields)
  76. self.assertIs(created, False)
  77. self.assertEqual(user.id, self.user_1.id)
  78. self.assertEqual(user.pk, (self.tenant_1.id, self.user_1.id))
  79. self.assertEqual(user.tenant_id, self.tenant_1.id)
  80. self.assertEqual(user.email, self.user_1.email)
  81. self.assertEqual(count, User.objects.count())
  82. def test_lookup_errors(self):
  83. m_tuple = "'%s' lookup of 'pk' must be a tuple or a list"
  84. m_2_elements = "'%s' lookup of 'pk' must have 2 elements"
  85. m_tuple_collection = (
  86. "'in' lookup of 'pk' must be a collection of tuples or lists"
  87. )
  88. m_2_elements_each = "'in' lookup of 'pk' must have 2 elements each"
  89. test_cases = (
  90. ({"pk": 1}, m_tuple % "exact"),
  91. ({"pk": (1, 2, 3)}, m_2_elements % "exact"),
  92. ({"pk__exact": 1}, m_tuple % "exact"),
  93. ({"pk__exact": (1, 2, 3)}, m_2_elements % "exact"),
  94. ({"pk__in": 1}, m_tuple % "in"),
  95. ({"pk__in": (1, 2, 3)}, m_tuple_collection),
  96. ({"pk__in": ((1, 2, 3),)}, m_2_elements_each),
  97. ({"pk__gt": 1}, m_tuple % "gt"),
  98. ({"pk__gt": (1, 2, 3)}, m_2_elements % "gt"),
  99. ({"pk__gte": 1}, m_tuple % "gte"),
  100. ({"pk__gte": (1, 2, 3)}, m_2_elements % "gte"),
  101. ({"pk__lt": 1}, m_tuple % "lt"),
  102. ({"pk__lt": (1, 2, 3)}, m_2_elements % "lt"),
  103. ({"pk__lte": 1}, m_tuple % "lte"),
  104. ({"pk__lte": (1, 2, 3)}, m_2_elements % "lte"),
  105. )
  106. for kwargs, message in test_cases:
  107. with (
  108. self.subTest(kwargs=kwargs),
  109. self.assertRaisesMessage(ValueError, message),
  110. ):
  111. Comment.objects.get(**kwargs)
  112. def test_get_user_by_comments(self):
  113. self.assertEqual(User.objects.get(comments=self.comment_1), self.user_1)