tests.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from django import forms
  2. from django.db import models
  3. from django.test import SimpleTestCase, TestCase
  4. from .models import (
  5. Foo, RenamedField, VerboseNameField, Whiz, WhizIter, WhizIterEmpty,
  6. )
  7. class BasicFieldTests(TestCase):
  8. def test_show_hidden_initial(self):
  9. """
  10. Fields with choices respect show_hidden_initial as a kwarg to
  11. formfield().
  12. """
  13. choices = [(0, 0), (1, 1)]
  14. model_field = models.Field(choices=choices)
  15. form_field = model_field.formfield(show_hidden_initial=True)
  16. self.assertTrue(form_field.show_hidden_initial)
  17. form_field = model_field.formfield(show_hidden_initial=False)
  18. self.assertFalse(form_field.show_hidden_initial)
  19. def test_field_repr(self):
  20. """
  21. __repr__() of a field displays its name.
  22. """
  23. f = Foo._meta.get_field('a')
  24. self.assertEqual(repr(f), '<django.db.models.fields.CharField: a>')
  25. f = models.fields.CharField()
  26. self.assertEqual(repr(f), '<django.db.models.fields.CharField>')
  27. def test_field_name(self):
  28. """
  29. A defined field name (name="fieldname") is used instead of the model
  30. model's attribute name (modelname).
  31. """
  32. instance = RenamedField()
  33. self.assertTrue(hasattr(instance, 'get_fieldname_display'))
  34. self.assertFalse(hasattr(instance, 'get_modelname_display'))
  35. def test_field_verbose_name(self):
  36. m = VerboseNameField
  37. for i in range(1, 23):
  38. self.assertEqual(m._meta.get_field('field%d' % i).verbose_name, 'verbose field%d' % i)
  39. self.assertEqual(m._meta.get_field('id').verbose_name, 'verbose pk')
  40. def test_choices_form_class(self):
  41. """Can supply a custom choices form class to Field.formfield()"""
  42. choices = [('a', 'a')]
  43. field = models.CharField(choices=choices)
  44. klass = forms.TypedMultipleChoiceField
  45. self.assertIsInstance(field.formfield(choices_form_class=klass), klass)
  46. def test_field_str(self):
  47. f = models.Field()
  48. self.assertEqual(str(f), '<django.db.models.fields.Field>')
  49. f = Foo._meta.get_field('a')
  50. self.assertEqual(str(f), 'model_fields.Foo.a')
  51. def test_field_ordering(self):
  52. """Fields are ordered based on their creation."""
  53. f1 = models.Field()
  54. f2 = models.Field(auto_created=True)
  55. f3 = models.Field()
  56. self.assertLess(f2, f1)
  57. self.assertGreater(f3, f1)
  58. self.assertIsNotNone(f1)
  59. self.assertNotIn(f2, (None, 1, ''))
  60. class ChoicesTests(SimpleTestCase):
  61. def test_choices_and_field_display(self):
  62. """
  63. get_choices() interacts with get_FIELD_display() to return the expected
  64. values.
  65. """
  66. self.assertEqual(Whiz(c=1).get_c_display(), 'First') # A nested value
  67. self.assertEqual(Whiz(c=0).get_c_display(), 'Other') # A top level value
  68. self.assertEqual(Whiz(c=9).get_c_display(), 9) # Invalid value
  69. self.assertIsNone(Whiz(c=None).get_c_display()) # Blank value
  70. self.assertEqual(Whiz(c='').get_c_display(), '') # Empty value
  71. def test_iterator_choices(self):
  72. """
  73. get_choices() works with Iterators.
  74. """
  75. self.assertEqual(WhizIter(c=1).c, 1) # A nested value
  76. self.assertEqual(WhizIter(c=9).c, 9) # Invalid value
  77. self.assertIsNone(WhizIter(c=None).c) # Blank value
  78. self.assertEqual(WhizIter(c='').c, '') # Empty value
  79. def test_empty_iterator_choices(self):
  80. """
  81. get_choices() works with empty iterators.
  82. """
  83. self.assertEqual(WhizIterEmpty(c="a").c, "a") # A nested value
  84. self.assertEqual(WhizIterEmpty(c="b").c, "b") # Invalid value
  85. self.assertIsNone(WhizIterEmpty(c=None).c) # Blank value
  86. self.assertEqual(WhizIterEmpty(c='').c, '') # Empty value