Add US id's filter

remotes/origin/endpoint-for-estimation-system-new-4.0
Álex Hermida 2018-11-20 12:08:49 +01:00
parent dcc89514de
commit 3830d8a346
3 changed files with 41 additions and 0 deletions

View File

@ -423,6 +423,29 @@ class BaseRelatedFieldsFilter(FilterBackend):
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):
filter_name = 'owner'

View File

@ -65,6 +65,7 @@ class UserStoryViewSet(AssignedUsersSignalMixin, OCCResourceMixin,
permission_classes = (permissions.UserStoryPermission,)
filter_backends = (base_filters.CanViewUsFilterBackend,
filters.EpicFilter,
base_filters.IdsFilter,
base_filters.UserStoriesRoleFilter,
base_filters.OwnersFilter,
base_filters.AssignedToFilter,

View File

@ -588,6 +588,23 @@ def test_get_total_points(client):
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):
user = f.UserFactory(is_superuser=True)
one_day_ago = datetime.now(pytz.utc) - timedelta(days=1)