diff --git a/bookwyrm/tests/connectors/test_abstract_connector.py b/bookwyrm/tests/connectors/test_abstract_connector.py index bec9b11d5..cab2f834c 100644 --- a/bookwyrm/tests/connectors/test_abstract_connector.py +++ b/bookwyrm/tests/connectors/test_abstract_connector.py @@ -1,7 +1,9 @@ ''' testing book data connectors ''' from django.test import TestCase +import responses from bookwyrm import models +from bookwyrm.connectors import abstract_connector from bookwyrm.connectors.abstract_connector import Mapping, SearchResult from bookwyrm.connectors.openlibrary import Connector @@ -12,12 +14,12 @@ class AbstractConnector(TestCase): ''' we need an example connector ''' self.book = models.Edition.objects.create(title='Example Edition') - models.Connector.objects.create( + self.connector_info = models.Connector.objects.create( identifier='example.com', connector_file='openlibrary', base_url='https://example.com', - books_url='https:/example.com', - covers_url='https://example.com', + books_url='https://example.com/books', + covers_url='https://example.com/covers', search_url='https://example.com/search?q=', ) self.connector = Connector('example.com') @@ -39,6 +41,67 @@ class AbstractConnector(TestCase): ] + def test_abstract_minimal_connector_init(self): + ''' barebones connector for search with defaults ''' + class TestConnector(abstract_connector.AbstractMinimalConnector): + ''' nothing added here ''' + def format_search_result(): + pass + def get_or_create_book(): + pass + def parse_search_data(): + pass + + connector = TestConnector('example.com') + self.assertEqual(connector.connector, self.connector_info) + self.assertEqual(connector.base_url, 'https://example.com') + self.assertEqual(connector.books_url, 'https://example.com/books') + self.assertEqual(connector.covers_url, 'https://example.com/covers') + self.assertEqual(connector.search_url, 'https://example.com/search?q=') + self.assertIsNone(connector.name), + self.assertEqual(connector.identifier, 'example.com'), + self.assertIsNone(connector.max_query_count) + self.assertFalse(connector.local) + + + @responses.activate + def test_abstract_minimal_connector_search(self): + ''' makes an http request to the outside service ''' + class TestConnector(abstract_connector.AbstractMinimalConnector): + ''' nothing added here ''' + def format_search_result(self, data): + return data + def get_or_create_book(self, data): + pass + def parse_search_data(self, data): + return data + connector = TestConnector('example.com') + responses.add( + responses.GET, + 'https://example.com/search?q=a%20book%20title', + json=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'], + status=200) + results = connector.search('a book title') + self.assertEqual(len(results), 10) + self.assertEqual(results[0], 'a') + self.assertEqual(results[1], 'b') + self.assertEqual(results[2], 'c') + + + def test_search_result(self): + ''' a class that stores info about a search result ''' + result = SearchResult( + title='Title', + key='https://example.com/book/1', + author='Author Name', + year='1850', + connector=self.connector, + ) + # there's really not much to test here, it's just a dataclass + self.assertEqual(result.confidence, 1) + self.assertEqual(result.title, 'Title') + + def test_create_mapping(self): ''' maps remote fields for book data to bookwyrm activitypub fields ''' mapping = Mapping('isbn') @@ -63,17 +126,3 @@ class AbstractConnector(TestCase): self.assertEqual(mapping.remote_field, 'isbn') self.assertEqual(mapping.formatter, formatter) self.assertEqual(mapping.formatter('bb'), 'aabb') - - - def test_search_result(self): - ''' a class that stores info about a search result ''' - result = SearchResult( - title='Title', - key='https://example.com/book/1', - author='Author Name', - year='1850', - connector=self.connector, - ) - # there's really not much to test here, it's just a dataclass - self.assertEqual(result.confidence, 1) - self.assertEqual(result.title, 'Title')