test_lookups.py 1.5 KB

12345678910111213141516171819202122232425262728293031
  1. from django.core.exceptions import FieldError
  2. from django.test import TestCase
  3. from extras.choices import CustomFieldChoiceSetBaseChoices
  4. from extras.models import CustomFieldChoiceSet, EventRule
  5. class ChoiceValueLookupTestCase(TestCase):
  6. def test_choice_value_matches_values_only(self):
  7. """choice_value matches the value element of a pair, never the label."""
  8. CustomFieldChoiceSet.objects.create(
  9. name='Choice Set 1',
  10. extra_choices=[['sel1', 'Selection 1'], ['other', 'sel2']],
  11. )
  12. self.assertEqual(CustomFieldChoiceSet.objects.filter(extra_choices__choice_value='sel1').count(), 1)
  13. self.assertEqual(CustomFieldChoiceSet.objects.filter(extra_choices__choice_value='sel2').count(), 0)
  14. def test_choice_value_excludes_null_extra_choices(self):
  15. """Choice sets without extra choices are excluded without raising."""
  16. CustomFieldChoiceSet.objects.create(
  17. name='Base Only',
  18. base_choices=CustomFieldChoiceSetBaseChoices.IATA,
  19. )
  20. self.assertEqual(CustomFieldChoiceSet.objects.filter(extra_choices__choice_value='sel1').count(), 0)
  21. self.assertEqual(CustomFieldChoiceSet.objects.filter(extra_choices__len=2).count(), 0)
  22. def test_choice_value_not_registered_on_plain_array_fields(self):
  23. """choice_value is scoped to ChoiceSetField and unavailable on other ArrayFields."""
  24. with self.assertRaises(FieldError):
  25. EventRule.objects.filter(event_types__choice_value='x').exists()