def test_composite_and_group_missing_db_field(self): """ Failing to pass a db field to a compsite and field should result in no comparison for that field. """ qs = MockQuerySet() filt = CompositeAndFilter({ 'a': MatchFilter('b'), 'c': NoFilter()}) result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'b': 'bbb'}) self.assert_filters_equals([Q(aaa='b')], result.filters) result = apply_filter_to_queryset(qs, filt, {'b', 'bbb'}) self.assert_filters_equals([], result.filters)
def test_composite_and_group_none(self): """Falsey branches of CompositeAndFilter should not compare.""" qs = MockQuerySet() filt = CompositeAndFilter({ 'a': MatchFilter('b'), 'c': NoFilter()}) result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'}) self.assert_filters_equals([Q(aaa='b')], result.filters)
def test_or_group(self): """Or group should result in or'ed comparisons.""" qs = MockQuerySet() result = apply_filter_to_queryset( qs, OrGroupFilter([MatchFilter('a'), MatchFilter('b')]), 'zz') self.assert_filters_equals([Q(zz='a') | Q(zz='b')], result.filters)
def test_date_after(self): """Test date's after given.""" qs = MockQuerySet() result = apply_filter_to_queryset( qs, DateRangeFilter([datetime(2009, 12, 1), None]), 'zz') self.assert_filters_equals( [Q(zz__gte=datetime(2009, 12, 1))], result.filters)
def filter_query_set(self, qs): qs = apply_filter_to_queryset( qs, self.date_time, 'date_time') qs = apply_filter_to_queryset( qs, self.communication_type, 'contact_type') qs = apply_filter_to_queryset( qs, self.tags, 'tags', '__name__iexact') if self.locations or self.contact or self.contact_tags: contact_qs = Contact.objects.all() contact_qs = apply_filter_to_queryset( contact_qs, self.locations, { 'city': 'locations__city__iexact', 'state': 'locations__state__iexact', }) contact_qs = apply_filter_to_queryset( contact_qs, self.contact, 'pk') contact_qs = apply_filter_to_queryset( contact_qs, self.contact_tags, 'tags', '__name__iexact') contact_qs = contact_qs.distinct() qs = qs.filter(contact=contact_qs) if self.partner or self.partner_tags: partner_qs = Partner.objects.all() partner_qs = apply_filter_to_queryset( partner_qs, self.partner, 'pk') partner_qs = apply_filter_to_queryset( partner_qs, self.partner_tags, 'tags', '__name__iexact') partner_qs = partner_qs.distinct() qs = qs.filter(partner=partner_qs) return qs
def test_date_before(self): """Test date's before given.""" qs = MockQuerySet() result = apply_filter_to_queryset( qs, DateRangeFilter([None, datetime(2009, 12, 2)]), 'zz') self.assert_filters_equals( [Q(zz__lte=datetime(2009, 12, 3))], result.filters)
def test_composite_and_group(self): """CompositeAndFilter should result in and'ed Q.""" qs = MockQuerySet() filt = CompositeAndFilter({ 'a': MatchFilter('b'), 'c': OrGroupFilter([MatchFilter('d'), MatchFilter('e')])}) result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'}) self.assert_filters_equals([ Q(aaa='b') & (Q(ccc='d') | Q(ccc='e')), ], result.filters)
def filter_partners(self, company): qs = Partner.objects.filter(owner=company) qs = ( qs .filter(approval_status__code__iexact=Status.APPROVED) .filter(archived_on__isnull=True)) qs = apply_filter_to_queryset( qs, self.date, 'last_action_time') qs = apply_filter_to_queryset( qs, self.data_source, 'data_source__iexact') qs = apply_filter_to_queryset( qs, self.uri, 'uri__iexact') qs = apply_filter_to_queryset( qs, self.tags, 'tags', '__name__iexact') if self.locations: contact_qs = Contact.objects.all() contact_qs = apply_filter_to_queryset( contact_qs, self.locations, { 'city': 'locations__city__iexact', 'state': 'locations__state__iexact', }) contact_qs.distinct() qs = qs.filter(primary_contact=contact_qs) return qs
def test_date_range(self): """Test date ranges The range end should have an extra day added. """ qs = MockQuerySet() result = apply_filter_to_queryset( qs, DateRangeFilter([datetime(2009, 12, 1), datetime(2009, 12, 2)]), 'zz') self.assert_filters_equals( [Q(zz__range=(datetime(2009, 12, 1), datetime(2009, 12, 3)))], result.filters)
def filter_query_set(self, qs): """Apply the filter described by this instance to a query set. qs: the query set to receive the filter """ qs = apply_filter_to_queryset( qs, self.date, 'last_action_time') qs = apply_filter_to_queryset( qs, self.tags, 'tags', '__name__iexact') qs = apply_filter_to_queryset( qs, self.locations, { 'city': 'locations__city__iexact', 'state': 'locations__state__iexact', }) if self.partner or self.partner_tags: partner_qs = Partner.objects.all() partner_qs = apply_filter_to_queryset( partner_qs, self.partner, 'pk') partner_qs = apply_filter_to_queryset( partner_qs, self.partner_tags, 'tags', '__name__iexact') partner_qs = partner_qs.distinct() qs = qs.filter(partner=partner_qs) return qs
def test_composite_and_group(self): """CompositeAndFilter should result in and'ed Q.""" qs = MockQuerySet() filt = CompositeAndFilter({ 'a': MatchFilter('b'), 'c': OrGroupFilter([MatchFilter('d'), MatchFilter('e')]) }) result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'}) self.assert_filters_equals([ Q(aaa='b') & (Q(ccc='d') | Q(ccc='e')), ], result.filters)
def test_date_range(self): """Test date ranges The range end should have an extra day added. """ qs = MockQuerySet() result = apply_filter_to_queryset( qs, DateRangeFilter([ datetime(2009, 12, 1), datetime(2009, 12, 2)]), 'zz') self.assert_filters_equals( [Q(zz__range=(datetime(2009, 12, 1), datetime(2009, 12, 3)))], result.filters)
def test_and_group(self): """And group should result in a series of comparisons.""" qs = MockQuerySet() result = apply_filter_to_queryset( qs, AndGroupFilter([ OrGroupFilter([MatchFilter('f')]), OrGroupFilter([MatchFilter('g'), MatchFilter('h')]), MatchFilter('i') ]), 'z') self.assert_filters_equals([ Q(z='f'), Q(z='g') | Q(z='h'), Q(z='i'), ], result.filters)
def test_and_group(self): """And group should result in a series of comparisons.""" qs = MockQuerySet() result = apply_filter_to_queryset( qs, AndGroupFilter([ OrGroupFilter([MatchFilter('f')]), OrGroupFilter([ MatchFilter('g'), MatchFilter('h')]), MatchFilter('i')]), 'z') self.assert_filters_equals([ Q(z='f'), Q(z='g') | Q(z='h'), Q(z='i'), ], result.filters)
def filter_query_set(self, qs): qs = apply_filter_to_queryset(qs, self.date_time, 'date_time') qs = apply_filter_to_queryset(qs, self.communication_type, 'contact_type') qs = apply_filter_to_queryset(qs, self.tags, 'tags', '__name__iexact') if self.locations or self.contact or self.contact_tags: contact_qs = Contact.objects.all() contact_qs = apply_filter_to_queryset( contact_qs, self.locations, { 'city': 'locations__city__iexact', 'state': 'locations__state__iexact', }) contact_qs = apply_filter_to_queryset(contact_qs, self.contact, 'pk') contact_qs = apply_filter_to_queryset(contact_qs, self.contact_tags, 'tags', '__name__iexact') contact_qs = contact_qs.distinct() qs = qs.filter(contact=contact_qs) if self.partner or self.partner_tags: partner_qs = Partner.objects.all() partner_qs = apply_filter_to_queryset(partner_qs, self.partner, 'pk') partner_qs = apply_filter_to_queryset(partner_qs, self.partner_tags, 'tags', '__name__iexact') partner_qs = partner_qs.distinct() qs = qs.filter(partner=partner_qs) return qs
def test_match_empty(self): """Empty string match filter.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter(''), 'z') self.assert_filters_equals([], result.filters)
def test_composite_and_group_empty(self): """Empty CompositeAndFilter should result in no comparisons.""" qs = MockQuerySet() filt = CompositeAndFilter({}) result = apply_filter_to_queryset(qs, filt, {}) self.assert_filters_equals([], result.filters)
def test_no_filter(self): """NoFilter should evaluate falsey and not result in a comparison.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, NoFilter(), 'zz') self.assertEqual(False, bool(NoFilter())) self.assert_filters_equals([], result.filters)
def test_and_group_empty(self): """Empty And group should result in no comparisons.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, AndGroupFilter([]), 'z') self.assert_filters_equals([], result.filters)
def test_match_filter(self): """Match filter does basic comparison.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter('yy'), 'zz') self.assert_filters_equals([Q(zz='yy')], result.filters)
def test_no_filter(self): """NoFilter should evaluate falsey and not result in a comparison.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, NoFilter(), 'zz') self.assertEqual(False, bool(NoFilter())) self.assert_filters_equals([], result.filters)
def test_composite_and_group_none(self): """Falsey branches of CompositeAndFilter should not compare.""" qs = MockQuerySet() filt = CompositeAndFilter({'a': MatchFilter('b'), 'c': NoFilter()}) result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'}) self.assert_filters_equals([Q(aaa='b')], result.filters)
def test_match_empty(self): """Empty string match filter.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter(''), 'z') self.assert_filters_equals([], result.filters)
def test_unlinked(self): """Unlinked filter should compare with None.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, UnlinkedFilter(), 'z') self.assert_filters_equals([{'z': None}], result.filters)
def test_daterange_none(self): """Test dates with no range given.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, DateRangeFilter(None), 'zz') self.assert_filters_equals([], result.filters)
def test_and_group_empty(self): """Empty And group should result in no comparisons.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, AndGroupFilter([]), 'z') self.assert_filters_equals([], result.filters)
def test_unlinked(self): """Unlinked filter should compare with None.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, UnlinkedFilter(), 'z') self.assert_filters_equals([{'z': None}], result.filters)
def test_composite_and_group_empty(self): """Empty CompositeAndFilter should result in no comparisons.""" qs = MockQuerySet() filt = CompositeAndFilter({}) result = apply_filter_to_queryset(qs, filt, {}) self.assert_filters_equals([], result.filters)
def test_match_filter(self): """Match filter does basic comparison.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter('yy'), 'zz') self.assert_filters_equals([Q(zz='yy')], result.filters)
def test_match_none(self): """Empty match filter.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter(None), 'z') self.assert_filters_equals([], result.filters)
def test_daterange_none(self): """Test dates with no range given.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, DateRangeFilter(None), 'zz') self.assert_filters_equals([], result.filters)
def test_match_none(self): """Empty match filter.""" qs = MockQuerySet() result = apply_filter_to_queryset(qs, MatchFilter(None), 'z') self.assert_filters_equals([], result.filters)