0001-api-search-on-empty-string-should-not-return-all-obj.patch
src/authentic2/api_views.py | ||
---|---|---|
49 | 49 |
from rest_framework.settings import api_settings |
50 | 50 | |
51 | 51 |
from django_filters.rest_framework import FilterSet |
52 |
from django_filters.filters import IsoDateTimeFilter |
|
52 |
from django_filters.filters import CharFilter, IsoDateTimeFilter
|
|
53 | 53 |
from django_filters.fields import IsoDateTimeField |
54 | 54 |
from django_filters.utils import handle_timezone |
55 | 55 | |
... | ... | |
601 | 601 |
return super(IsoDateTimeFilter, self).filter(qs, value) |
602 | 602 | |
603 | 603 | |
604 |
class CharFilter(CharFilter): |
|
605 |
def filter(self, qs, value): |
|
606 |
if value != '': |
|
607 |
return super(CharFilter, self).filter(qs, value) |
|
608 | ||
609 |
qs = self.get_method(qs)(**{'%s__%s' % (self.field_name, self.lookup_expr): ""}) |
|
610 |
return qs.distinct() if self.distinct else qs |
|
611 | ||
612 | ||
604 | 613 |
class UsersFilter(FilterSet): |
605 | 614 |
class Meta: |
606 | 615 |
model = get_user_model() |
... | ... | |
644 | 653 |
filter_overrides = { |
645 | 654 |
models.DateTimeField: { |
646 | 655 |
'filter_class': IsoDateTimeFilter, |
656 |
}, |
|
657 |
models.CharField: { |
|
658 |
'filter_class': CharFilter, |
|
647 | 659 |
} |
648 | 660 |
} |
649 | 661 |
tests/test_api.py | ||
---|---|---|
167 | 167 |
assert resp.json['next'] is None |
168 | 168 | |
169 | 169 | |
170 |
def test_api_users_search_empty_value(app, superuser): |
|
171 |
app.authorization = ('Basic', (superuser.username, superuser.username)) |
|
172 |
User = get_user_model() |
|
173 |
User.objects.create(username='someuser') |
|
174 |
assert User.objects.filter(username__iexact='').count() == 0 |
|
175 |
resp = app.get('/api/users/?username__iexact=') |
|
176 |
results = resp.json['results'] |
|
177 |
assert len(results) == 0 |
|
178 | ||
179 | ||
170 | 180 |
def test_api_users_update_with_email_verified(settings, app, admin, simple_user): |
171 | 181 |
from django.contrib.auth import get_user_model |
172 | 182 |
simple_user.email_verified = True |
173 |
- |