Skip to content

Commit

Permalink
Make sure a 501 response occurs
Browse files Browse the repository at this point in the history
This is for all "valid" filter statement that have not yet been
implemented in the Transformer.
  • Loading branch information
CasperWA committed Jan 10, 2020
1 parent a563588 commit 71ab66c
Showing 1 changed file with 55 additions and 23 deletions.
78 changes: 55 additions & 23 deletions tests/server/test_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,11 @@ def test_gt(self):
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))

def test_rhs_comparison(self):
request = "/structures?filter=8<nelements"
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))

def test_gt_none(self):
request = "/structures?filter=nelements>9"
expected_ids = []
Expand All @@ -331,21 +336,22 @@ def test_page_limit(self):
expected_return = 6
self._check_response(request, expected_ids, expected_return)

@unittest.skip("Skipping HAS ALL until implemented in transformer code.")
def test_list_has_all(self):
request = '/structures?filter=elements HAS ALL "Ba","F","H","Mn","O","Re","Si"'
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))
self._check_not_implemented(request)
# expected_ids = ["mpf_3819"]
# self._check_response(request, expected_ids, len(expected_ids))

request = '/structures?filter=elements HAS ALL "Re","Ti"'
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))
self._check_not_implemented(request)
# expected_ids = ["mpf_3819"]
# self._check_response(request, expected_ids, len(expected_ids))

@unittest.skip("Skipping HAS ANY until implemented in transformer code.")
def test_list_has_any(self):
request = '/structures?filter=elements HAS ANY "Re","Ti"'
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))
self._check_not_implemented(request)
# expected_ids = ["mpf_3819"]
# self._check_response(request, expected_ids, len(expected_ids))

def test_list_length_basic(self):
request = "/structures?filter=elements LENGTH = 9"
Expand All @@ -355,31 +361,30 @@ def test_list_length_basic(self):
request = "/structures?filter=elements LENGTH 9"
self._check_response(request, expected_ids, len(expected_ids))

@unittest.skip(
"Skipping LENGTH with operator until implemented in transformer code."
)
def test_list_length(self):
request = "/structures?filter=elements LENGTH >= 9"
expected_ids = ["mpf_3819"]
self._check_response(request, expected_ids, len(expected_ids))
error_detail = "Operator >= not implemented for LENGTH filter."
self._check_not_implemented(request, expected_detail=error_detail)
# expected_ids = ["mpf_3819"]
# self._check_response(request, expected_ids, len(expected_ids))

request = "/structures?filter=structure_features LENGTH > 0"
expected_ids = []
self._check_response(request, expected_ids, len(expected_ids))
error_detail = "Operator > not implemented for LENGTH filter."
self._check_not_implemented(request, expected_detail=error_detail)
# expected_ids = []
# self._check_response(request, expected_ids, len(expected_ids))

@unittest.skip("Skipping HAS ONLY until implemented in transformer code.")
def test_list_has_only(self):
request = '/structures?filter=elements HAS ONLY "Ac"'
expected_ids = ["mpf_1"]
self._check_response(request, expected_ids, len(expected_ids))
self._check_not_implemented(request)
# expected_ids = ["mpf_1"]
# self._check_response(request, expected_ids, len(expected_ids))

@unittest.skip(
"Skipping correlated list query until implemented in transformer code."
)
def test_list_correlated(self):
request = '/structures?filter=elements:elements_ratios HAS "Ag":"0.2"'
expected_ids = ["mpf_259"]
self._check_response(request, expected_ids, len(expected_ids))
self._check_not_implemented(request)
# expected_ids = ["mpf_259"]
# self._check_response(request, expected_ids, len(expected_ids))

def test_is_known(self):
request = "/structures?filter=nsites IS KNOWN AND nsites>=44"
Expand Down Expand Up @@ -476,3 +481,30 @@ def _check_response(self, request, expected_ids, expected_return):
print("Request attempted:")
print(f"{self.client.base_url}{request}")
raise exc

def _check_not_implemented(self, request, expected_detail: str = None):
try:
response = self.client.get(request)
self.assertEqual(
response.status_code,
501,
msg=f"Request should have failed, but did not: {response.json()}",
)
response = response.json()
self.assertEqual(len(response["errors"]), 1)
self.assertEqual(response["meta"]["data_returned"], 0)

error = response["errors"][0]
self.assertEqual("501", error["status"])
self.assertEqual("NotImplementedError", error["title"])

if expected_detail is None:
expected_detail = "Error trying to process rule "
self.assertTrue(error["detail"].startswith(expected_detail))
else:
self.assertEqual(expected_detail, error["detail"])

except Exception as exc:
print("Request attempted:")
print(f"{self.client.base_url}{request}")
raise exc

0 comments on commit 71ab66c

Please sign in to comment.