bookwyrm/bookwyrm/tests/connectors/test_abstract_minimal_connector.py

76 lines
3 KiB
Python
Raw Normal View History

2021-03-08 16:49:10 +00:00
""" testing book data connectors """
2020-12-31 20:22:00 +00:00
from django.test import TestCase
from bookwyrm import models
from bookwyrm.connectors import abstract_connector
2021-09-16 19:41:30 +00:00
from bookwyrm.connectors.abstract_connector import Mapping
2020-12-31 20:22:00 +00:00
class AbstractConnector(TestCase):
2021-04-26 16:15:42 +00:00
"""generic code for connecting to outside data sources"""
2021-03-08 16:49:10 +00:00
@classmethod
def setUpTestData(cls):
"""we need an example connector in the database"""
cls.connector_info = models.Connector.objects.create(
2021-03-08 16:49:10 +00:00
identifier="example.com",
connector_file="openlibrary",
base_url="https://example.com",
books_url="https://example.com/books",
covers_url="https://example.com/covers",
search_url="https://example.com/search?q=",
isbn_search_url="https://example.com/isbn?q=",
2020-12-31 20:22:00 +00:00
)
def setUp(self):
"""instantiate example connector"""
2020-12-31 20:22:00 +00:00
class TestConnector(abstract_connector.AbstractMinimalConnector):
2021-04-26 16:15:42 +00:00
"""nothing added here"""
2021-03-08 16:49:10 +00:00
2020-12-31 20:22:00 +00:00
def get_or_create_book(self, remote_id):
pass
2021-03-08 16:49:10 +00:00
2022-05-31 15:37:07 +00:00
def parse_search_data(self, data, min_confidence):
2020-12-31 20:22:00 +00:00
return data
2021-03-08 16:49:10 +00:00
2021-03-01 20:09:21 +00:00
def parse_isbn_search_data(self, data):
return data
2020-12-31 20:22:00 +00:00
2021-03-08 16:49:10 +00:00
self.test_connector = TestConnector("example.com")
2020-12-31 20:22:00 +00:00
def test_abstract_minimal_connector_init(self):
2021-04-26 16:15:42 +00:00
"""barebones connector for search with defaults"""
2020-12-31 20:22:00 +00:00
connector = self.test_connector
self.assertEqual(connector.connector, self.connector_info)
2021-03-08 16:49:10 +00:00
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.assertEqual(connector.isbn_search_url, "https://example.com/isbn?q=")
2020-12-31 20:22:00 +00:00
self.assertIsNone(connector.name)
2021-03-08 16:49:10 +00:00
self.assertEqual(connector.identifier, "example.com")
2020-12-31 20:22:00 +00:00
def test_create_mapping(self):
2021-04-26 16:15:42 +00:00
"""maps remote fields for book data to bookwyrm activitypub fields"""
2021-03-08 16:49:10 +00:00
mapping = Mapping("isbn")
self.assertEqual(mapping.local_field, "isbn")
self.assertEqual(mapping.remote_field, "isbn")
self.assertEqual(mapping.formatter("bb"), "bb")
2020-12-31 20:22:00 +00:00
def test_create_mapping_with_remote(self):
2021-04-26 16:15:42 +00:00
"""the remote field is different than the local field"""
2021-03-08 16:49:10 +00:00
mapping = Mapping("isbn", remote_field="isbn13")
self.assertEqual(mapping.local_field, "isbn")
self.assertEqual(mapping.remote_field, "isbn13")
self.assertEqual(mapping.formatter("bb"), "bb")
2020-12-31 20:22:00 +00:00
def test_create_mapping_with_formatter(self):
2021-04-26 16:15:42 +00:00
"""a function is provided to modify the data"""
2021-03-08 16:49:10 +00:00
formatter = lambda x: "aa" + x
mapping = Mapping("isbn", formatter=formatter)
self.assertEqual(mapping.local_field, "isbn")
self.assertEqual(mapping.remote_field, "isbn")
2020-12-31 20:22:00 +00:00
self.assertEqual(mapping.formatter, formatter)
2021-03-08 16:49:10 +00:00
self.assertEqual(mapping.formatter("bb"), "aabb")