Add US id's filter
parent
dcc89514de
commit
3830d8a346
|
@ -423,6 +423,29 @@ class BaseRelatedFieldsFilter(FilterBackend):
|
||||||
return super().filter_queryset(request, queryset, view)
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
|
||||||
|
class IdsFilter(FilterBackend):
|
||||||
|
filter_name = 'id__in'
|
||||||
|
|
||||||
|
def __init__(self, filter_name=None):
|
||||||
|
if filter_name:
|
||||||
|
self.filter_name = filter_name
|
||||||
|
|
||||||
|
def _get_id_queryparams(self, params):
|
||||||
|
ids = params.get(self.filter_name, None)
|
||||||
|
if ids:
|
||||||
|
return ids.split(",")
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def filter_queryset(self, request, queryset, view):
|
||||||
|
query_ids = self._get_id_queryparams(request.QUERY_PARAMS)
|
||||||
|
|
||||||
|
if query_ids:
|
||||||
|
queryset = queryset.filter(id__in=query_ids)
|
||||||
|
|
||||||
|
return super().filter_queryset(request, queryset, view)
|
||||||
|
|
||||||
|
|
||||||
class OwnersFilter(BaseRelatedFieldsFilter):
|
class OwnersFilter(BaseRelatedFieldsFilter):
|
||||||
filter_name = 'owner'
|
filter_name = 'owner'
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ class UserStoryViewSet(AssignedUsersSignalMixin, OCCResourceMixin,
|
||||||
permission_classes = (permissions.UserStoryPermission,)
|
permission_classes = (permissions.UserStoryPermission,)
|
||||||
filter_backends = (base_filters.CanViewUsFilterBackend,
|
filter_backends = (base_filters.CanViewUsFilterBackend,
|
||||||
filters.EpicFilter,
|
filters.EpicFilter,
|
||||||
|
base_filters.IdsFilter,
|
||||||
base_filters.UserStoriesRoleFilter,
|
base_filters.UserStoriesRoleFilter,
|
||||||
base_filters.OwnersFilter,
|
base_filters.OwnersFilter,
|
||||||
base_filters.AssignedToFilter,
|
base_filters.AssignedToFilter,
|
||||||
|
|
|
@ -588,6 +588,23 @@ def test_get_total_points(client):
|
||||||
assert us_mixed.get_total_points() == 1.0
|
assert us_mixed.get_total_points() == 1.0
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_filter_by_id(client):
|
||||||
|
user = f.UserFactory.create()
|
||||||
|
project = f.ProjectFactory.create(owner=user)
|
||||||
|
f.MembershipFactory.create(project=project, user=user, is_admin=True)
|
||||||
|
us1 = f.UserStoryFactory.create(project=project, subject='Test 1')
|
||||||
|
us2 = f.UserStoryFactory.create(project=project, subject='Test 2')
|
||||||
|
us3 = f.UserStoryFactory.create(project=project, subject='Test 3')
|
||||||
|
|
||||||
|
client.login(user)
|
||||||
|
url = reverse("userstories-list") + "?id__in={},{}".format(us1.id, us3.id)
|
||||||
|
|
||||||
|
response = client.get(url)
|
||||||
|
|
||||||
|
assert len(response.data) == 2
|
||||||
|
assert response.data[1]["subject"] == us3.subject
|
||||||
|
|
||||||
|
|
||||||
def test_api_filter_by_created_date(client):
|
def test_api_filter_by_created_date(client):
|
||||||
user = f.UserFactory(is_superuser=True)
|
user = f.UserFactory(is_superuser=True)
|
||||||
one_day_ago = datetime.now(pytz.utc) - timedelta(days=1)
|
one_day_ago = datetime.now(pytz.utc) - timedelta(days=1)
|
||||||
|
|
Loading…
Reference in New Issue