PageRenderTime 26ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/modeltests/get_or_create/tests.py

https://code.google.com/p/mango-py/
Python | 52 lines | 38 code | 9 blank | 5 comment | 0 complexity | eed8338c518fedf48be594c7255641ba MD5 | raw file
Possible License(s): BSD-3-Clause
  1. from datetime import date
  2. from django.db import IntegrityError
  3. from django.test import TestCase
  4. from models import Person, ManualPrimaryKeyTest
  5. class GetOrCreateTests(TestCase):
  6. def test_get_or_create(self):
  7. p = Person.objects.create(
  8. first_name='John', last_name='Lennon', birthday=date(1940, 10, 9)
  9. )
  10. p, created = Person.objects.get_or_create(
  11. first_name="John", last_name="Lennon", defaults={
  12. "birthday": date(1940, 10, 9)
  13. }
  14. )
  15. self.assertFalse(created)
  16. self.assertEqual(Person.objects.count(), 1)
  17. p, created = Person.objects.get_or_create(
  18. first_name='George', last_name='Harrison', defaults={
  19. 'birthday': date(1943, 2, 25)
  20. }
  21. )
  22. self.assertTrue(created)
  23. self.assertEqual(Person.objects.count(), 2)
  24. # If we execute the exact same statement, it won't create a Person.
  25. p, created = Person.objects.get_or_create(
  26. first_name='George', last_name='Harrison', defaults={
  27. 'birthday': date(1943, 2, 25)
  28. }
  29. )
  30. self.assertFalse(created)
  31. self.assertEqual(Person.objects.count(), 2)
  32. # If you don't specify a value or default value for all required
  33. # fields, you will get an error.
  34. self.assertRaises(IntegrityError,
  35. Person.objects.get_or_create, first_name="Tom", last_name="Smith"
  36. )
  37. # If you specify an existing primary key, but different other fields,
  38. # then you will get an error and data will not be updated.
  39. m = ManualPrimaryKeyTest.objects.create(id=1, data="Original")
  40. self.assertRaises(IntegrityError,
  41. ManualPrimaryKeyTest.objects.get_or_create, id=1, data="Different"
  42. )
  43. self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original")