From f1fe3142fbc44a568b460cf6bb660b0e92d0890a Mon Sep 17 00:00:00 2001 From: Pavel Savchenko Date: Sun, 9 Oct 2022 07:40:59 +0100 Subject: [PATCH] fix: use True value for isnull operator --- advanced_filters/forms.py | 2 +- advanced_filters/tests/test_forms.py | 44 +++++++++++++++++----------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/advanced_filters/forms.py b/advanced_filters/forms.py index 0ffe761..bd4406b 100644 --- a/advanced_filters/forms.py +++ b/advanced_filters/forms.py @@ -88,7 +88,7 @@ def _build_query_dict(self, formdata=None): formdata = self.cleaned_data key = "{field}__{operator}".format(**formdata) if formdata['operator'] == "isnull": - return {key: None} + return {key: True} elif formdata['operator'] == "istrue": return {formdata['field']: True} elif formdata['operator'] == "isfalse": diff --git a/advanced_filters/tests/test_forms.py b/advanced_filters/tests/test_forms.py index 4445e76..0fe67bc 100644 --- a/advanced_filters/tests/test_forms.py +++ b/advanced_filters/tests/test_forms.py @@ -71,23 +71,6 @@ def test_build_field_choices(self): 'fname': 'First name' } - def test_build_query_dict(self): - data = self.data.copy() - form = AdvancedFilterQueryForm(self.fields, data=data) - assert form._build_query_dict() == {'fname__iexact': 'john'} - - data['operator'] = 'isnull' - form = AdvancedFilterQueryForm(self.fields, data=data) - assert form._build_query_dict() == {'fname__isnull': None} - - data['operator'] = 'istrue' - form = AdvancedFilterQueryForm(self.fields, data=data) - assert form._build_query_dict() == {'fname': True} - - data['operator'] = 'isfalse' - form = AdvancedFilterQueryForm(self.fields, data=data) - assert form._build_query_dict() == {'fname': False} - def test_make_query(self): form = AdvancedFilterQueryForm(self.fields, data=self.data) assert form.is_valid() @@ -201,6 +184,33 @@ def test_all_operators_are_restored(self): assert res == expected[i] +@pytest.mark.parametrize("fields, data, expected", [ + ( + dict(bday='birthday', fname='first name'), + dict(field='fname', value='john', operator='iexact'), + {'fname__iexact': 'john'} + ), + ( + dict(bday='birthday', fname='first name'), + dict(field='fname', value='john', operator='isnull'), + {'fname__isnull': True} + ), + ( + dict(bday='birthday', fname='first name'), + dict(field='fname', value='john', operator='istrue'), + {'fname': True} + ), + ( + dict(bday='birthday', fname='first name'), + dict(field='fname', value='john', operator='isfalse'), + {'fname': False} + ), +]) +def test_build_query_dict(data, fields, expected): + form = AdvancedFilterQueryForm(fields, data=data) + assert form._build_query_dict() == expected + + class CommonFormTest(TestCase): mgmg_form_data = { 'form-TOTAL_FORMS': 1,