diff --git a/bookwyrm/connectors/openlibrary.py b/bookwyrm/connectors/openlibrary.py index 728401fd5..a1155d2d5 100644 --- a/bookwyrm/connectors/openlibrary.py +++ b/bookwyrm/connectors/openlibrary.py @@ -130,7 +130,7 @@ class Connector(AbstractConnector): def load_edition_data(self, olkey): ''' query openlibrary for editions of a work ''' - url = '%s/works/%s/editions.json' % (self.books_url, olkey) + url = '%s/works/%s/editions' % (self.books_url, olkey) return get_data(url) @@ -150,7 +150,7 @@ def get_description(description_blob): ''' descriptions can be a string or a dict ''' if isinstance(description_blob, dict): return description_blob.get('value') - return description_blob + return description_blob def get_openlibrary_key(key): diff --git a/bookwyrm/tests/connectors/test_openlibrary_connector.py b/bookwyrm/tests/connectors/test_openlibrary_connector.py index a9ba8eb33..437b23dc5 100644 --- a/bookwyrm/tests/connectors/test_openlibrary_connector.py +++ b/bookwyrm/tests/connectors/test_openlibrary_connector.py @@ -86,12 +86,6 @@ class Openlibrary(TestCase): self.assertEqual(result, {'hi': 'there'}) - def test_pick_default_edition(self): - ''' detect if the loaded json is an edition ''' - edition = pick_default_edition(self.edition_list_data['entries']) - self.assertEqual(edition['key'], '/books/OL9788823M') - - @responses.activate def test_get_authors_from_data(self): ''' find authors in data ''' @@ -105,6 +99,23 @@ class Openlibrary(TestCase): self.assertIsInstance(result, models.Author) + def test_get_cover_url(self): + ''' formats a url that should contain the cover image ''' + blob = ['image'] + result = self.connector.get_cover_url(blob) + self.assertEqual( + result, 'https://covers.openlibrary.org/b/id/image-M.jpg') + + def test_parse_search_result(self): + ''' extract the results from the search json response ''' + datafile = pathlib.Path(__file__).parent.joinpath( + '../data/ol_search.json') + search_data = json.loads(datafile.read_bytes()) + result = self.connector.parse_search_data(search_data) + self.assertIsInstance(result, list) + self.assertEqual(len(result), 2) + + def test_format_search_result(self): ''' translate json from openlibrary into SearchResult ''' datafile = pathlib.Path(__file__).parent.joinpath( @@ -123,6 +134,39 @@ class Openlibrary(TestCase): self.assertEqual(result.connector, self.connector) + @responses.activate + def test_load_edition_data(self): + ''' format url from key and make request ''' + key = 'OL1234W' + responses.add( + responses.GET, + 'https://openlibrary.org/works/OL1234W/editions', + json={'hi': 'there'} + ) + result = self.connector.load_edition_data(key) + self.assertEqual(result, {'hi': 'there'}) + + + @responses.activate + def test_expand_book_data(self): + ''' given a book, get more editions ''' + work = models.Work.objects.create( + title='Test Work', openlibrary_key='OL1234W') + edition = models.Edition.objects.create( + title='Test Edition', parent_work=work) + + responses.add( + responses.GET, + 'https://openlibrary.org/works/OL1234W/editions', + json={'entries': []}, + ) + with patch( + 'bookwyrm.connectors.abstract_connector.AbstractConnector.' \ + 'create_edition_from_data'): + self.connector.expand_book_data(edition) + self.connector.expand_book_data(work) + + def test_get_description(self): ''' should do some cleanup on the description data ''' description = get_description(self.work_data['description']) @@ -130,13 +174,19 @@ class Openlibrary(TestCase): self.assertEqual(description, expected) + def test_get_openlibrary_key(self): + ''' extracts the uuid ''' + key = get_openlibrary_key('/books/OL27320736M') + self.assertEqual(key, 'OL27320736M') + + def test_get_languages(self): ''' looks up languages from a list ''' languages = get_languages(self.edition_data['languages']) self.assertEqual(languages, ['English']) - def test_get_ol_key(self): - ''' extracts the uuid ''' - key = get_openlibrary_key('/books/OL27320736M') - self.assertEqual(key, 'OL27320736M') + def test_pick_default_edition(self): + ''' detect if the loaded json is an edition ''' + edition = pick_default_edition(self.edition_list_data['entries']) + self.assertEqual(edition['key'], '/books/OL9788823M')