def test_multivaluedict_not_used_for_nonlisty_filtering(self):
        filters = Filter('field', lookups=['exact', 'in'])

        data = MultiValueDict(dict(field=['foo', 'bar']))
        filters.parse(data)
        expected = dict(field='bar')  # last one wins
        actual = dict(flatten_qobj(filters.Q))
        assert expected == actual

        data = MultiValueDict(dict(field__in=['foo', 'bar']))
        filters.parse(data)
        expected = dict(field__in=['foo', 'bar'])
        actual = dict(flatten_qobj(filters.Q))
        assert expected == actual
    def test_other_lookups_ignored_when_default_used(self):
        filters = Filter('count', lookups=['lte', 'gte'], default=3)
        filters.parse({})  # no value for 'count'

        keys = dict(flatten_qobj(filters.Q)).keys()

        assert 'lte' not in keys
        assert 'gte' not in keys
    def test_default_value_used_if_no_sourcedata_found(self):
        filters = Filter('count', lookups=['lte', 'gte'], default=3)
        filters.parse({})  # no value for 'count'

        expected = {'count__exact': 3}
        actual = dict(flatten_qobj(filters.Q))

        assert expected == actual
 def test_many_sources_one_dest(self):
     filters = (Filter(source='nominee_1', dest='field')
                | Filter(source='nominee_2', dest='field')
                | Filter(source='nominee_3', dest='field'))
     filters.parse(dict(nominee_1='one', nominee_2='two',
                        nominee_3='three'))
     expected = dict(field='three')  # last one wins
     actual = dict(flatten_qobj(filters.Q))
     assert expected == actual
 def test_one_source_to_many_dests(self):
     filters = (Filter(source='search', dest='username')
                | Filter(source='search', dest='email')
                | Filter(source='search', dest='name'))
     filters.parse(dict(search='mynbaev-scheiner'))
     expected = dict(username='******',
                     email='mynbaev-scheiner',
                     name='mynbaev-scheiner')
     actual = dict(flatten_qobj(filters.Q))
     assert expected == actual
 def test_multivaluedict_as_source(self):
     """
     We don't expect multiple values to be pulled from a multi-value source
     without explicit instruction
     """
     filters = Filter('name')
     data = MultiValueDict(dict(name=['foo', 'bar']))
     filters.parse(data)
     expected = dict(name='bar')  # last one wins
     actual = dict(flatten_qobj(filters.Q))
     assert expected == actual
    def test_default_ignored_if_sourcedata_found(self):
        filters = Filter('count',
                         lookups=['lte', 'gte'],
                         default=3,
                         default_lookup='foobarbaz')
        filters.parse({'count__gte': 4})

        expected = {'count__gte': 4}
        actual = dict(flatten_qobj(filters.Q))

        assert expected == actual
    def test_default_lookup_type_can_be_changed(self):
        filters = Filter('count',
                         lookups=['lte', 'gte'],
                         default=3,
                         default_lookup='gt')
        filters.parse({})  # no value for 'count'

        expected = {'count__gt': 3}
        actual = dict(flatten_qobj(filters.Q))

        assert expected == actual
 def test_multivaluedict_as_source_when_many_values_required(self):
     """
     Having a dest ending in '__in' /does/ constitute explicit instruction
     to pull multiple values from a source.
     """
     filters = Filter('field', lookups=['in'])
     data = MultiValueDict(dict(field=['foo', 'bar']))
     filters.parse(data)
     expected = dict(field__in=['foo', 'bar'])
     actual = dict(flatten_qobj(filters.Q))
     assert expected == actual
 def test_listlike_values_cleaned_individually(self):
     f = CharFilter('fieldname', lookups='exact,in')
     data = MultiValueDict({
         'fieldname': ['single value'],  # MVDict treats 1-list as single
         'fieldname__in': ['multiple', 'values'],
     })
     expected = {
         'fieldname': 'single value',
         'fieldname__in': ['multiple', 'values']
     }
     f.parse(data)
     actual = dict(flatten_qobj(f.Q))
     assert expected == actual
 def test_more_extensive_parsing(self):
     filters = (Filter('field_1', lookups=['contains', 'icontains'])
                | Filter(source='field_2', dest='field_2a')
                | Filter(source='field_3', dest='f3', lookups=['lt', 'gt'])
                | Filter(source='id', dest='relationship__spanning__id'))
     data = {
         'field_1__contains': 'first',
         'field_2': 'second',
         'field_3__lt': 'third',
         'field_3__gt': 'fourth',
         'id': 'fifth'
     }
     expected = {
         'field_1__contains': 'first',
         'field_2a': 'second',
         'f3__lt': 'third',
         'f3__gt': 'fourth',
         'relationship__spanning__id': 'fifth'
     }
     filters.parse(data)
     actual = dict(flatten_qobj(filters.Q))
     assert expected == actual
     assert filters.valid