Skip to content

Commit 2506929

Browse files
test: SearchableField.has_changed() should handle non-list initial val (ietf-tools#4965)
1 parent 0cc907f commit 2506929

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

ietf/utils/tests.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from django.apps import apps
2626
from django.contrib.auth.models import User
2727
from django.conf import settings
28+
from django.forms import Form
2829
from django.template import Context
2930
from django.template import Template # pyflakes:ignore
3031
from django.template.defaulttags import URLNode
@@ -37,6 +38,7 @@
3738
from ietf.person.name import name_parts, unidecode_name
3839
from ietf.submit.tests import submission_file
3940
from ietf.utils.draft import PlaintextDraft, getmeta
41+
from ietf.utils.fields import SearchableField
4042
from ietf.utils.log import unreachable, assertion
4143
from ietf.utils.mail import send_mail_preformatted, send_mail_text, send_mail_mime, outbox, get_payload_text
4244
from ietf.utils.test_runner import get_template_paths, set_coverage_checking
@@ -517,3 +519,25 @@ def test_timezone_not_near_midnight(self, mock):
517519
):
518520
with self.assertRaises(RuntimeError):
519521
timezone_not_near_midnight()
522+
523+
524+
class SearchableFieldTests(TestCase):
525+
def test_has_changed_single_value(self):
526+
"""Should work with initial as a single value or list when max_entries == 1"""
527+
class TestSearchableField(SearchableField):
528+
model = "fake model" # needs to be not-None to allow field init
529+
530+
class TestForm(Form):
531+
test_field = TestSearchableField(max_entries=1)
532+
533+
# single value in initial (e.g., when used as a single-valued field in a formset)
534+
changed_form = TestForm(initial={'test_field': 1}, data={'test_field': [2]})
535+
self.assertTrue(changed_form.has_changed())
536+
unchanged_form = TestForm(initial={'test_field': 1}, data={'test_field': [1]})
537+
self.assertFalse(unchanged_form.has_changed())
538+
539+
# list value in initial (usual situation for a MultipleChoiceField subclass like SearchableField)
540+
changed_form = TestForm(initial={'test_field': [1]}, data={'test_field': [2]})
541+
self.assertTrue(changed_form.has_changed())
542+
unchanged_form = TestForm(initial={'test_field': [1]}, data={'test_field': [1]})
543+
self.assertFalse(unchanged_form.has_changed())

0 commit comments

Comments
 (0)