test_create.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from django.test import TestCase
  2. from .models import Tenant, User
  3. class CompositePKCreateTests(TestCase):
  4. maxDiff = None
  5. @classmethod
  6. def setUpTestData(cls):
  7. cls.tenant = Tenant.objects.create()
  8. cls.user = User.objects.create(
  9. tenant=cls.tenant,
  10. id=1,
  11. email="user0001@example.com",
  12. )
  13. def test_create_user(self):
  14. test_cases = (
  15. {"tenant": self.tenant, "id": 2412, "email": "user2412@example.com"},
  16. {"tenant_id": self.tenant.id, "id": 5316, "email": "user5316@example.com"},
  17. {"pk": (self.tenant.id, 7424), "email": "user7424@example.com"},
  18. )
  19. for fields in test_cases:
  20. with self.subTest(fields=fields):
  21. count = User.objects.count()
  22. user = User(**fields)
  23. obj = User.objects.create(**fields)
  24. self.assertEqual(obj.tenant_id, self.tenant.id)
  25. self.assertEqual(obj.id, user.id)
  26. self.assertEqual(obj.pk, (self.tenant.id, user.id))
  27. self.assertEqual(obj.email, user.email)
  28. self.assertEqual(count + 1, User.objects.count())
  29. def test_save_user(self):
  30. test_cases = (
  31. {"tenant": self.tenant, "id": 9241, "email": "user9241@example.com"},
  32. {"tenant_id": self.tenant.id, "id": 5132, "email": "user5132@example.com"},
  33. {"pk": (self.tenant.id, 3014), "email": "user3014@example.com"},
  34. )
  35. for fields in test_cases:
  36. with self.subTest(fields=fields):
  37. count = User.objects.count()
  38. user = User(**fields)
  39. self.assertIsNotNone(user.id)
  40. self.assertIsNotNone(user.email)
  41. user.save()
  42. self.assertEqual(user.tenant_id, self.tenant.id)
  43. self.assertEqual(user.tenant, self.tenant)
  44. self.assertIsNotNone(user.id)
  45. self.assertEqual(user.pk, (self.tenant.id, user.id))
  46. self.assertEqual(user.email, fields["email"])
  47. self.assertEqual(user.email, f"user{user.id}@example.com")
  48. self.assertEqual(count + 1, User.objects.count())
  49. def test_bulk_create_users(self):
  50. objs = [
  51. User(tenant=self.tenant, id=8291, email="user8291@example.com"),
  52. User(tenant_id=self.tenant.id, id=4021, email="user4021@example.com"),
  53. User(pk=(self.tenant.id, 8214), email="user8214@example.com"),
  54. ]
  55. obj_1, obj_2, obj_3 = User.objects.bulk_create(objs)
  56. self.assertEqual(obj_1.tenant_id, self.tenant.id)
  57. self.assertEqual(obj_1.id, 8291)
  58. self.assertEqual(obj_1.pk, (obj_1.tenant_id, obj_1.id))
  59. self.assertEqual(obj_1.email, "user8291@example.com")
  60. self.assertEqual(obj_2.tenant_id, self.tenant.id)
  61. self.assertEqual(obj_2.id, 4021)
  62. self.assertEqual(obj_2.pk, (obj_2.tenant_id, obj_2.id))
  63. self.assertEqual(obj_2.email, "user4021@example.com")
  64. self.assertEqual(obj_3.tenant_id, self.tenant.id)
  65. self.assertEqual(obj_3.id, 8214)
  66. self.assertEqual(obj_3.pk, (obj_3.tenant_id, obj_3.id))
  67. self.assertEqual(obj_3.email, "user8214@example.com")
  68. def test_get_or_create_user(self):
  69. test_cases = (
  70. {
  71. "pk": (self.tenant.id, 8314),
  72. "defaults": {"email": "user8314@example.com"},
  73. },
  74. {
  75. "tenant": self.tenant,
  76. "id": 3142,
  77. "defaults": {"email": "user3142@example.com"},
  78. },
  79. {
  80. "tenant_id": self.tenant.id,
  81. "id": 4218,
  82. "defaults": {"email": "user4218@example.com"},
  83. },
  84. )
  85. for fields in test_cases:
  86. with self.subTest(fields=fields):
  87. count = User.objects.count()
  88. user, created = User.objects.get_or_create(**fields)
  89. self.assertIs(created, True)
  90. self.assertIsNotNone(user.id)
  91. self.assertEqual(user.pk, (self.tenant.id, user.id))
  92. self.assertEqual(user.tenant_id, self.tenant.id)
  93. self.assertEqual(user.email, fields["defaults"]["email"])
  94. self.assertEqual(user.email, f"user{user.id}@example.com")
  95. self.assertEqual(count + 1, User.objects.count())
  96. def test_update_or_create_user(self):
  97. test_cases = (
  98. {
  99. "pk": (self.tenant.id, 2931),
  100. "defaults": {"email": "user2931@example.com"},
  101. },
  102. {
  103. "tenant": self.tenant,
  104. "id": 6428,
  105. "defaults": {"email": "user6428@example.com"},
  106. },
  107. {
  108. "tenant_id": self.tenant.id,
  109. "id": 5278,
  110. "defaults": {"email": "user5278@example.com"},
  111. },
  112. )
  113. for fields in test_cases:
  114. with self.subTest(fields=fields):
  115. count = User.objects.count()
  116. user, created = User.objects.update_or_create(**fields)
  117. self.assertIs(created, True)
  118. self.assertIsNotNone(user.id)
  119. self.assertEqual(user.pk, (self.tenant.id, user.id))
  120. self.assertEqual(user.tenant_id, self.tenant.id)
  121. self.assertEqual(user.email, fields["defaults"]["email"])
  122. self.assertEqual(user.email, f"user{user.id}@example.com")
  123. self.assertEqual(count + 1, User.objects.count())