Adding multiple status filtering to userstories
parent
a77f21776f
commit
acbd253420
|
@ -364,6 +364,26 @@ class TagsFilter(FilterBackend):
|
||||||
return super().filter_queryset(request, queryset, view)
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
|
||||||
|
class StatusFilter(FilterBackend):
|
||||||
|
def __init__(self, filter_name='status'):
|
||||||
|
self.filter_name = filter_name
|
||||||
|
|
||||||
|
def _get_status_queryparams(self, params):
|
||||||
|
status = params.get(self.filter_name, None)
|
||||||
|
if status is not None:
|
||||||
|
status = set([x.strip() for x in status.split(",")])
|
||||||
|
return list(status)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def filter_queryset(self, request, queryset, view):
|
||||||
|
query_status = self._get_status_queryparams(request.QUERY_PARAMS)
|
||||||
|
if query_status:
|
||||||
|
queryset = queryset.filter(status__in=query_status)
|
||||||
|
|
||||||
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
|
||||||
class QFilter(FilterBackend):
|
class QFilter(FilterBackend):
|
||||||
def filter_queryset(self, request, queryset, view):
|
def filter_queryset(self, request, queryset, view):
|
||||||
q = request.QUERY_PARAMS.get('q', None)
|
q = request.QUERY_PARAMS.get('q', None)
|
||||||
|
|
|
@ -50,10 +50,11 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
|
||||||
list_serializer_class = serializers.UserStorySerializer
|
list_serializer_class = serializers.UserStorySerializer
|
||||||
permission_classes = (permissions.UserStoryPermission,)
|
permission_classes = (permissions.UserStoryPermission,)
|
||||||
|
|
||||||
filter_backends = (filters.CanViewUsFilterBackend, filters.TagsFilter,
|
filter_backends = (filters.StatusFilter, filters.CanViewUsFilterBackend, filters.TagsFilter,
|
||||||
filters.QFilter, filters.OrderByFilterMixin)
|
filters.QFilter, filters.OrderByFilterMixin)
|
||||||
retrieve_exclude_filters = (filters.TagsFilter,)
|
|
||||||
filter_fields = ["project", "milestone", "milestone__isnull", "status",
|
retrieve_exclude_filters = (filters.StatusFilter, filters.TagsFilter,)
|
||||||
|
filter_fields = ["project", "milestone", "milestone__isnull",
|
||||||
"is_archived", "status__is_archived", "assigned_to",
|
"is_archived", "status__is_archived", "assigned_to",
|
||||||
"status__is_closed", "watchers", "is_closed"]
|
"status__is_closed", "watchers", "is_closed"]
|
||||||
order_by_fields = ["backlog_order", "sprint_order", "kanban_order"]
|
order_by_fields = ["backlog_order", "sprint_order", "kanban_order"]
|
||||||
|
|
|
@ -214,6 +214,25 @@ def test_archived_filter(client):
|
||||||
assert len(json.loads(response.content)) == 1
|
assert len(json.loads(response.content)) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_filter_by_multiple_status(client):
|
||||||
|
user = f.UserFactory.create()
|
||||||
|
project = f.ProjectFactory.create(owner=user)
|
||||||
|
f.MembershipFactory.create(project=project, user=user, is_owner=True)
|
||||||
|
f.UserStoryFactory.create(project=project)
|
||||||
|
us1 = f.UserStoryFactory.create(project=project)
|
||||||
|
us2 = f.UserStoryFactory.create(project=project)
|
||||||
|
|
||||||
|
client.login(user)
|
||||||
|
|
||||||
|
url = reverse("userstories-list")
|
||||||
|
url = "{}?status={},{}".format(reverse("userstories-list"), us1.status.id, us2.status.id)
|
||||||
|
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
response = client.get(url, data)
|
||||||
|
assert len(json.loads(response.content)) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_get_total_points(client):
|
def test_get_total_points(client):
|
||||||
project = f.ProjectFactory.create()
|
project = f.ProjectFactory.create()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue