mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2025-02-18 03:55:19 +00:00
Pylint's `bad-classmethod-argument` is disabled for each definition to avoid rewriting the method bodies just to rename `self` → `cls`. This can be done gradually, as the setUpTestData methods are modified along the way.
82 lines
3.2 KiB
Python
82 lines
3.2 KiB
Python
""" interface between the app and various connectors """
|
|
from django.test import TestCase
|
|
import responses
|
|
|
|
from bookwyrm import models
|
|
from bookwyrm.connectors import connector_manager
|
|
from bookwyrm.connectors.bookwyrm_connector import Connector as BookWyrmConnector
|
|
|
|
|
|
class ConnectorManager(TestCase):
|
|
"""interface between the app and various connectors"""
|
|
|
|
@classmethod
|
|
def setUpTestData(self): # pylint: disable=bad-classmethod-argument
|
|
"""we'll need some books and a connector info entry"""
|
|
self.work = models.Work.objects.create(title="Example Work")
|
|
|
|
models.Edition.objects.create(
|
|
title="Example Edition", parent_work=self.work, isbn_10="0000000000"
|
|
)
|
|
self.edition = models.Edition.objects.create(
|
|
title="Another Edition", parent_work=self.work, isbn_10="1111111111"
|
|
)
|
|
|
|
self.remote_connector = models.Connector.objects.create(
|
|
identifier="test_connector_remote",
|
|
priority=1,
|
|
connector_file="bookwyrm_connector",
|
|
base_url="http://fake.ciom/",
|
|
books_url="http://fake.ciom/",
|
|
search_url="http://fake.ciom/search/",
|
|
covers_url="http://covers.fake.ciom/",
|
|
isbn_search_url="http://fake.ciom/isbn/",
|
|
)
|
|
|
|
def test_get_or_create_connector(self):
|
|
"""loads a connector if the data source is known or creates one"""
|
|
remote_id = "https://example.com/object/1"
|
|
connector = connector_manager.get_or_create_connector(remote_id)
|
|
self.assertIsInstance(connector, BookWyrmConnector)
|
|
self.assertEqual(connector.identifier, "example.com")
|
|
self.assertEqual(connector.base_url, "https://example.com")
|
|
|
|
same_connector = connector_manager.get_or_create_connector(remote_id)
|
|
self.assertEqual(connector.identifier, same_connector.identifier)
|
|
|
|
def test_get_connectors(self):
|
|
"""load all connectors"""
|
|
connectors = list(connector_manager.get_connectors())
|
|
self.assertEqual(len(connectors), 1)
|
|
self.assertIsInstance(connectors[0], BookWyrmConnector)
|
|
|
|
def test_search_empty_query(self):
|
|
"""don't panic on empty queries"""
|
|
results = connector_manager.search("")
|
|
self.assertEqual(results, [])
|
|
|
|
def test_first_search_result(self):
|
|
"""only get one search result"""
|
|
result = connector_manager.first_search_result("Example")
|
|
self.assertEqual(result.title, "Example Edition")
|
|
|
|
def test_first_search_result_empty_query(self):
|
|
"""only get one search result"""
|
|
result = connector_manager.first_search_result("")
|
|
self.assertIsNone(result)
|
|
|
|
@responses.activate
|
|
def test_first_search_result_no_results(self):
|
|
"""only get one search result"""
|
|
responses.add(
|
|
responses.GET,
|
|
"http://fake.ciom/search/dkjfhg?min_confidence=0.1",
|
|
json={},
|
|
)
|
|
result = connector_manager.first_search_result("dkjfhg")
|
|
self.assertIsNone(result)
|
|
|
|
def test_load_connector(self):
|
|
"""load a connector object from the database entry"""
|
|
connector = connector_manager.load_connector(self.remote_connector)
|
|
self.assertEqual(connector.identifier, "test_connector_remote")
|