2021-01-02 16:38:27 +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-01-02 16:38:27 +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-01-02 16:38:27 +00:00
|
|
|
''' interface between the app and various connectors '''
|
2020-05-12 17:01:36 +00:00
|
|
|
def setUp(self):
|
2021-01-02 16:38:27 +00:00
|
|
|
''' we'll need some books and a connector info entry '''
|
2020-05-12 17:01:36 +00:00
|
|
|
self.work = models.Work.objects.create(
|
|
|
|
title='Example Work'
|
|
|
|
)
|
|
|
|
|
|
|
|
self.edition = models.Edition.objects.create(
|
|
|
|
title='Example Edition',
|
|
|
|
parent_work=self.work
|
|
|
|
)
|
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
|
|
|
|
2020-09-21 18:14:56 +00:00
|
|
|
self.connector = models.Connector.objects.create(
|
|
|
|
identifier='test_connector',
|
|
|
|
priority=1,
|
|
|
|
local=True,
|
|
|
|
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-01-02 16:38:27 +00:00
|
|
|
''' loads a connector if the data source is known or creates one '''
|
2020-05-12 17:01:36 +00:00
|
|
|
remote_id = 'https://example.com/object/1'
|
2021-01-02 16:14:28 +00:00
|
|
|
connector = connector_manager.get_or_create_connector(remote_id)
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertIsInstance(connector, BookWyrmConnector)
|
2020-05-12 17:01:36 +00:00
|
|
|
self.assertEqual(connector.identifier, 'example.com')
|
|
|
|
self.assertEqual(connector.base_url, 'https://example.com')
|
|
|
|
|
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)
|
2020-09-21 18:14:56 +00:00
|
|
|
|
|
|
|
def test_get_connectors(self):
|
2021-01-02 16:38:27 +00:00
|
|
|
''' load all connectors '''
|
2020-09-21 18:14:56 +00:00
|
|
|
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())
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertEqual(len(connectors), 2)
|
|
|
|
self.assertIsInstance(connectors[0], SelfConnector)
|
|
|
|
self.assertIsInstance(connectors[1], BookWyrmConnector)
|
|
|
|
|
|
|
|
def test_search(self):
|
2021-01-02 16:38:27 +00:00
|
|
|
''' search all connectors '''
|
2021-01-02 16:14:28 +00:00
|
|
|
results = connector_manager.search('Example')
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertEqual(len(results), 1)
|
|
|
|
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-01-02 16:38:27 +00:00
|
|
|
''' search only the local database '''
|
2021-01-02 16:14:28 +00:00
|
|
|
results = connector_manager.local_search('Example')
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertEqual(len(results), 1)
|
|
|
|
self.assertEqual(results[0].title, 'Example Edition')
|
|
|
|
|
|
|
|
def test_first_search_result(self):
|
2021-01-02 16:38:27 +00:00
|
|
|
''' only get one search result '''
|
2021-01-02 16:14:28 +00:00
|
|
|
result = connector_manager.first_search_result('Example')
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertEqual(result.title, 'Example Edition')
|
2021-01-02 16:14:28 +00:00
|
|
|
no_result = connector_manager.first_search_result('dkjfhg')
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertIsNone(no_result)
|
|
|
|
|
|
|
|
def test_load_connector(self):
|
2021-01-02 16:38:27 +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)
|
2020-09-21 18:14:56 +00:00
|
|
|
self.assertIsInstance(connector, SelfConnector)
|
|
|
|
self.assertEqual(connector.identifier, 'test_connector')
|