mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-28 02:50:38 +00:00
Tests connector search
This commit is contained in:
parent
6a8353de09
commit
c8d031e311
1 changed files with 66 additions and 17 deletions
|
@ -1,7 +1,9 @@
|
||||||
''' testing book data connectors '''
|
''' testing book data connectors '''
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
import responses
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
|
from bookwyrm.connectors import abstract_connector
|
||||||
from bookwyrm.connectors.abstract_connector import Mapping, SearchResult
|
from bookwyrm.connectors.abstract_connector import Mapping, SearchResult
|
||||||
from bookwyrm.connectors.openlibrary import Connector
|
from bookwyrm.connectors.openlibrary import Connector
|
||||||
|
|
||||||
|
@ -12,12 +14,12 @@ class AbstractConnector(TestCase):
|
||||||
''' we need an example connector '''
|
''' we need an example connector '''
|
||||||
self.book = models.Edition.objects.create(title='Example Edition')
|
self.book = models.Edition.objects.create(title='Example Edition')
|
||||||
|
|
||||||
models.Connector.objects.create(
|
self.connector_info = models.Connector.objects.create(
|
||||||
identifier='example.com',
|
identifier='example.com',
|
||||||
connector_file='openlibrary',
|
connector_file='openlibrary',
|
||||||
base_url='https://example.com',
|
base_url='https://example.com',
|
||||||
books_url='https:/example.com',
|
books_url='https://example.com/books',
|
||||||
covers_url='https://example.com',
|
covers_url='https://example.com/covers',
|
||||||
search_url='https://example.com/search?q=',
|
search_url='https://example.com/search?q=',
|
||||||
)
|
)
|
||||||
self.connector = Connector('example.com')
|
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):
|
def test_create_mapping(self):
|
||||||
''' maps remote fields for book data to bookwyrm activitypub fields '''
|
''' maps remote fields for book data to bookwyrm activitypub fields '''
|
||||||
mapping = Mapping('isbn')
|
mapping = Mapping('isbn')
|
||||||
|
@ -63,17 +126,3 @@ class AbstractConnector(TestCase):
|
||||||
self.assertEqual(mapping.remote_field, 'isbn')
|
self.assertEqual(mapping.remote_field, 'isbn')
|
||||||
self.assertEqual(mapping.formatter, formatter)
|
self.assertEqual(mapping.formatter, formatter)
|
||||||
self.assertEqual(mapping.formatter('bb'), 'aabb')
|
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')
|
|
||||||
|
|
Loading…
Reference in a new issue