Merge pull request #726 from mouse-reeve/search-tests

Search tests
This commit is contained in:
Mouse Reeve 2021-03-13 09:27:46 -08:00 committed by GitHub
commit 393ea625a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 28 deletions

View File

@ -44,21 +44,10 @@ class AbstractMinimalConnector(ABC):
if min_confidence: if min_confidence:
params["min_confidence"] = min_confidence params["min_confidence"] = min_confidence
resp = requests.get( data = get_data(
"%s%s" % (self.search_url, query), "%s%s" % (self.search_url, query),
params=params, params=params,
headers={
"Accept": "application/json; charset=utf-8",
"User-Agent": settings.USER_AGENT,
},
) )
if not resp.ok:
resp.raise_for_status()
try:
data = resp.json()
except ValueError as e:
logger.exception(e)
raise ConnectorException("Unable to parse json response", e)
results = [] results = []
for doc in self.parse_search_data(data)[:10]: for doc in self.parse_search_data(data)[:10]:
@ -68,24 +57,14 @@ class AbstractMinimalConnector(ABC):
def isbn_search(self, query): def isbn_search(self, query):
""" isbn search """ """ isbn search """
params = {} params = {}
resp = requests.get( data = get_data(
"%s%s" % (self.isbn_search_url, query), "%s%s" % (self.isbn_search_url, query),
params=params, params=params,
headers={
"Accept": "application/json; charset=utf-8",
"User-Agent": settings.USER_AGENT,
},
) )
if not resp.ok:
resp.raise_for_status()
try:
data = resp.json()
except ValueError as e:
logger.exception(e)
raise ConnectorException("Unable to parse json response", e)
results = [] results = []
for doc in self.parse_isbn_search_data(data): # this shouldn't be returning mutliple results, but just in case
for doc in self.parse_isbn_search_data(data)[:10]:
results.append(self.format_isbn_search_result(doc)) results.append(self.format_isbn_search_result(doc))
return results return results
@ -234,11 +213,12 @@ def dict_from_mappings(data, mappings):
return result return result
def get_data(url): def get_data(url, params=None):
""" wrapper for request.get """ """ wrapper for request.get """
try: try:
resp = requests.get( resp = requests.get(
url, url,
params=params,
headers={ headers={
"Accept": "application/json; charset=utf-8", "Accept": "application/json; charset=utf-8",
"User-Agent": settings.USER_AGENT, "User-Agent": settings.USER_AGENT,

View File

@ -19,7 +19,7 @@ class AbstractConnector(TestCase):
books_url="https://example.com/books", books_url="https://example.com/books",
covers_url="https://example.com/covers", covers_url="https://example.com/covers",
search_url="https://example.com/search?q=", search_url="https://example.com/search?q=",
isbn_search_url="https://example.com/isbn", isbn_search_url="https://example.com/isbn?q=",
) )
class TestConnector(abstract_connector.AbstractMinimalConnector): class TestConnector(abstract_connector.AbstractMinimalConnector):
@ -50,7 +50,7 @@ class AbstractConnector(TestCase):
self.assertEqual(connector.books_url, "https://example.com/books") self.assertEqual(connector.books_url, "https://example.com/books")
self.assertEqual(connector.covers_url, "https://example.com/covers") self.assertEqual(connector.covers_url, "https://example.com/covers")
self.assertEqual(connector.search_url, "https://example.com/search?q=") self.assertEqual(connector.search_url, "https://example.com/search?q=")
self.assertEqual(connector.isbn_search_url, "https://example.com/isbn") self.assertEqual(connector.isbn_search_url, "https://example.com/isbn?q=")
self.assertIsNone(connector.name) self.assertIsNone(connector.name)
self.assertEqual(connector.identifier, "example.com") self.assertEqual(connector.identifier, "example.com")
self.assertIsNone(connector.max_query_count) self.assertIsNone(connector.max_query_count)
@ -71,6 +71,30 @@ class AbstractConnector(TestCase):
self.assertEqual(results[1], "b") self.assertEqual(results[1], "b")
self.assertEqual(results[2], "c") self.assertEqual(results[2], "c")
@responses.activate
def test_search_min_confidence(self):
""" makes an http request to the outside service """
responses.add(
responses.GET,
"https://example.com/search?q=a%20book%20title&min_confidence=1",
json=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"],
status=200,
)
results = self.test_connector.search("a book title", min_confidence=1)
self.assertEqual(len(results), 10)
@responses.activate
def test_isbn_search(self):
""" makes an http request to the outside service """
responses.add(
responses.GET,
"https://example.com/isbn?q=123456",
json=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"],
status=200,
)
results = self.test_connector.isbn_search("123456")
self.assertEqual(len(results), 10)
def test_search_result(self): def test_search_result(self):
""" a class that stores info about a search result """ """ a class that stores info about a search result """
result = SearchResult( result = SearchResult(