moviewyrm/bookwyrm/tests/connectors/test_connector_manager.py

79 lines
3.2 KiB
Python
Raw Normal View History

2021-03-08 16:49:10 +00:00
""" interface between the app and various connectors """
2020-05-12 17:01:36 +00:00
from django.test import TestCase
2021-01-02 16:14:28 +00:00
from bookwyrm import models
from bookwyrm.connectors import connector_manager
2021-03-08 16:49:10 +00:00
from bookwyrm.connectors.bookwyrm_connector import Connector as BookWyrmConnector
from bookwyrm.connectors.self_connector import Connector as SelfConnector
2020-05-12 17:01:36 +00:00
2021-01-02 16:14:28 +00:00
class ConnectorManager(TestCase):
2021-03-08 16:49:10 +00:00
""" interface between the app and various connectors """
2020-05-12 17:01:36 +00:00
def setUp(self):
2021-03-08 16:49:10 +00:00
""" we'll need some books and a connector info entry """
self.work = models.Work.objects.create(title="Example Work")
2020-05-12 17:01:36 +00:00
self.edition = models.Edition.objects.create(
2021-03-08 16:49:10 +00:00
title="Example Edition", parent_work=self.work
2020-05-12 17:01:36 +00:00
)
2020-11-08 01:48:50 +00:00
self.work.default_edition = self.edition
self.work.save()
2020-05-12 17:01:36 +00:00
self.connector = models.Connector.objects.create(
2021-03-08 16:49:10 +00:00
identifier="test_connector",
priority=1,
local=True,
2021-03-08 16:49:10 +00:00
connector_file="self_connector",
base_url="http://test.com/",
books_url="http://test.com/",
covers_url="http://test.com/",
)
2020-05-12 17:01:36 +00:00
def test_get_or_create_connector(self):
2021-03-08 16:49:10 +00:00
""" loads a connector if the data source is known or creates one """
remote_id = "https://example.com/object/1"
2021-01-02 16:14:28 +00:00
connector = connector_manager.get_or_create_connector(remote_id)
self.assertIsInstance(connector, BookWyrmConnector)
2021-03-08 16:49:10 +00:00
self.assertEqual(connector.identifier, "example.com")
self.assertEqual(connector.base_url, "https://example.com")
2020-05-12 17:01:36 +00:00
2021-01-02 16:14:28 +00:00
same_connector = connector_manager.get_or_create_connector(remote_id)
2020-05-12 17:01:36 +00:00
self.assertEqual(connector.identifier, same_connector.identifier)
def test_get_connectors(self):
2021-03-08 16:49:10 +00:00
""" load all connectors """
remote_id = "https://example.com/object/1"
2021-01-02 16:14:28 +00:00
connector_manager.get_or_create_connector(remote_id)
connectors = list(connector_manager.get_connectors())
self.assertEqual(len(connectors), 2)
self.assertIsInstance(connectors[0], SelfConnector)
self.assertIsInstance(connectors[1], BookWyrmConnector)
def test_search(self):
2021-03-08 16:49:10 +00:00
""" search all connectors """
results = connector_manager.search("Example")
self.assertEqual(len(results), 1)
2021-03-08 16:49:10 +00:00
self.assertIsInstance(results[0]["connector"], SelfConnector)
self.assertEqual(len(results[0]["results"]), 1)
self.assertEqual(results[0]["results"][0].title, "Example Edition")
def test_local_search(self):
2021-03-08 16:49:10 +00:00
""" search only the local database """
results = connector_manager.local_search("Example")
self.assertEqual(len(results), 1)
2021-03-08 16:49:10 +00:00
self.assertEqual(results[0].title, "Example Edition")
def test_first_search_result(self):
2021-03-08 16:49:10 +00:00
""" only get one search result """
result = connector_manager.first_search_result("Example")
self.assertEqual(result.title, "Example Edition")
no_result = connector_manager.first_search_result("dkjfhg")
self.assertIsNone(no_result)
def test_load_connector(self):
2021-03-08 16:49:10 +00:00
""" load a connector object from the database entry """
2021-01-02 16:14:28 +00:00
connector = connector_manager.load_connector(self.connector)
self.assertIsInstance(connector, SelfConnector)
2021-03-08 16:49:10 +00:00
self.assertEqual(connector.identifier, "test_connector")