Skip to content

Commit

Permalink
#150: Rewrite get_filter_from_query_string tests
Browse files Browse the repository at this point in the history
  • Loading branch information
MRichards99 committed Dec 4, 2020
1 parent 74215cd commit d6f6ab8
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 107 deletions.
108 changes: 1 addition & 107 deletions test/db/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,12 @@

from sqlalchemy.exc import IntegrityError

from datagateway_api.common.database.filters import (
DatabaseDistinctFieldFilter,
DatabaseIncludeFilter,
DatabaseLimitFilter,
DatabaseOrderFilter,
DatabaseSkipFilter,
DatabaseWhereFilter,
)
from datagateway_api.common.exceptions import (
BadRequestError,
FilterError,
MissingRecordError,
)
from datagateway_api.common.helpers import (
get_filters_from_query_string,
queries_records,
)
from test.test_base import FlaskAppTest
from datagateway_api.common.helpers import queries_records


class TestQueriesRecords(TestCase):
Expand Down Expand Up @@ -87,97 +75,3 @@ def raise_bad_request_error():

self.assertEqual("Bad request", str(ctx.exception))
self.assertEqual(400, ctx.exception.status_code)


class TestGetFiltersFromQueryString(FlaskAppTest):
def test_no_filters(self):
with self.app:
self.app.get("/")
self.assertEqual([], get_filters_from_query_string())

def test_bad_filter(self):
with self.app:
self.app.get('/?test="test"')
self.assertRaises(FilterError, get_filters_from_query_string)

def test_limit_filter(self):
with self.app:
self.app.get("/?limit=10")
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Returned incorrect number of filters",
)
self.assertIs(
DatabaseLimitFilter, type(filters[0]), msg="Incorrect type of filter",
)

def test_order_filter(self):
with self.app:
self.app.get('/?order="ID DESC"')
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Returned incorrect number of filters",
)
self.assertIs(
DatabaseOrderFilter,
type(filters[0]),
msg="Incorrect type of filter returned",
)

def test_where_filter(self):
with self.app:
self.app.get('/?where={"ID":{"eq":3}}')
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Returned incorrect number of filters",
)
self.assertIs(
DatabaseWhereFilter,
type(filters[0]),
msg="Incorrect type of filter returned",
)

def test_skip_filter(self):
with self.app:
self.app.get("/?skip=10")
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Returned incorrect number of filters",
)
self.assertIs(
DatabaseSkipFilter,
type(filters[0]),
msg="Incorrect type of filter returned",
)

def test_include_filter(self):
with self.app:
self.app.get('/?include="TEST"')
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Incorrect number of filters returned",
)
self.assertIs(
DatabaseIncludeFilter,
type(filters[0]),
msg="Incorrect type of filter returned",
)

def test_distinct_filter(self):
with self.app:
self.app.get('/?distinct="ID"')
filters = get_filters_from_query_string()
self.assertEqual(
1, len(filters), msg="Incorrect number of filters returned",
)
self.assertIs(
DatabaseDistinctFieldFilter,
type(filters[0]),
msg="Incorrect type of filter returned",
)

def test_multiple_filters(self):
with self.app:
self.app.get("/?limit=10&skip=4")
filters = get_filters_from_query_string()
self.assertEqual(2, len(filters))
54 changes: 54 additions & 0 deletions test/test_get_filters_from_query.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import pytest

from datagateway_api.common.database.filters import (
DatabaseDistinctFieldFilter,
DatabaseIncludeFilter,
DatabaseLimitFilter,
DatabaseOrderFilter,
DatabaseSkipFilter,
)
from datagateway_api.common.exceptions import FilterError
from datagateway_api.common.helpers import get_filters_from_query_string


class TestGetFiltersFromQueryString:
def test_valid_no_filters(self, flask_test_app_db):
with flask_test_app_db:
flask_test_app_db.get("/")

assert [] == get_filters_from_query_string()

def test_invalid_filter(self, flask_test_app_db):
with flask_test_app_db:
flask_test_app_db.get('/?test="test"')

with pytest.raises(FilterError):
get_filters_from_query_string()

@pytest.mark.parametrize(
"filter_input, filter_type",
[
pytest.param(
'distinct="ID"', DatabaseDistinctFieldFilter, id="DB distinct filter",
),
pytest.param(
'include="TEST"', DatabaseIncludeFilter, id="DB include filter",
),
pytest.param("limit=10", DatabaseLimitFilter, id="DB limit filter"),
pytest.param('order="ID DESC"', DatabaseOrderFilter, id="DB order filter"),
pytest.param("skip=10", DatabaseSkipFilter, id="DB skip filter"),
],
)
def test_valid_filter(self, flask_test_app_db, filter_input, filter_type):
with flask_test_app_db:
flask_test_app_db.get(f"/?{filter_input}")
filters = get_filters_from_query_string()

assert isinstance(filters[0], filter_type)

def test_valid_multiple_filters(self, flask_test_app_db):
with flask_test_app_db:
flask_test_app_db.get("/?limit=10&skip=4")
filters = get_filters_from_query_string()

assert len(filters) == 2

0 comments on commit d6f6ab8

Please sign in to comment.