Paginate after filtering query
Apply the pagination code after the filtering so that results still show when filtering the list of stories Change-Id: If2e12f72b8224e10a1df69a42d99a50b9b880420
This commit is contained in:
@@ -57,20 +57,6 @@ def story_get_all(title=None, description=None, status=None, assignee_id=None,
|
||||
project_group_id=project_group_id,
|
||||
project_id=project_id)
|
||||
|
||||
# paginate the query
|
||||
try:
|
||||
subquery = api_base.paginate_query(query=subquery,
|
||||
model=models.Story,
|
||||
limit=limit,
|
||||
sort_keys=[sort_field],
|
||||
marker=marker,
|
||||
sort_dir=sort_dir)
|
||||
except InvalidSortKey:
|
||||
raise ClientSideError("Invalid sort_field [%s]" % (sort_field,),
|
||||
status_code=400)
|
||||
except ValueError as ve:
|
||||
raise ClientSideError("%s" % (ve,), status_code=400)
|
||||
|
||||
# Turn the whole shebang into a subquery.
|
||||
subquery = subquery.subquery('filtered_stories')
|
||||
|
||||
@@ -82,6 +68,20 @@ def story_get_all(title=None, description=None, status=None, assignee_id=None,
|
||||
if status:
|
||||
query = query.filter(models.StorySummary.status.in_(status))
|
||||
|
||||
# paginate the query
|
||||
try:
|
||||
query = api_base.paginate_query(query=query,
|
||||
model=models.StorySummary,
|
||||
limit=limit,
|
||||
sort_keys=[sort_field],
|
||||
marker=marker,
|
||||
sort_dir=sort_dir)
|
||||
except InvalidSortKey:
|
||||
raise ClientSideError("Invalid sort_field [%s]" % (sort_field,),
|
||||
status_code=400)
|
||||
except ValueError as ve:
|
||||
raise ClientSideError("%s" % (ve,), status_code=400)
|
||||
|
||||
return query.all()
|
||||
|
||||
|
||||
|
||||
@@ -265,3 +265,17 @@ class TestStorySearch(base.FunctionalTest):
|
||||
self.assertEqual(4, result['id'])
|
||||
result = results.json[4]
|
||||
self.assertEqual(5, result['id'])
|
||||
|
||||
def test_filter_paged_status(self):
|
||||
url = self.build_search_url({
|
||||
'limit': '2',
|
||||
'sort_field': 'id',
|
||||
'status': 'invalid'
|
||||
})
|
||||
|
||||
results = self.get_json(url)
|
||||
self.assertEqual(2, len(results))
|
||||
result = results[0]
|
||||
self.assertEqual(3, result['id'])
|
||||
result = results[1]
|
||||
self.assertEqual(4, result['id'])
|
||||
|
||||
Reference in New Issue
Block a user