mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2025-01-29 02:18:13 +00:00
Fixes SearchResult imports in tests
This commit is contained in:
parent
4cdf895d77
commit
22af7ece71
5 changed files with 5 additions and 110 deletions
|
@ -119,7 +119,7 @@ class AbstractConnector(TestCase):
|
||||||
@responses.activate
|
@responses.activate
|
||||||
def test_get_or_create_author(self):
|
def test_get_or_create_author(self):
|
||||||
"""load an author"""
|
"""load an author"""
|
||||||
self.connector.author_mappings = (
|
self.connector.author_mappings = ( # pylint: disable=attribute-defined-outside-init
|
||||||
[ # pylint: disable=attribute-defined-outside-init
|
[ # pylint: disable=attribute-defined-outside-init
|
||||||
Mapping("id"),
|
Mapping("id"),
|
||||||
Mapping("name"),
|
Mapping("name"),
|
||||||
|
|
|
@ -3,8 +3,9 @@ from django.test import TestCase
|
||||||
import responses
|
import responses
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
|
from bookwyrm.book_search import SearchResult
|
||||||
from bookwyrm.connectors import abstract_connector
|
from bookwyrm.connectors import abstract_connector
|
||||||
from bookwyrm.connectors.abstract_connector import Mapping, SearchResult
|
from bookwyrm.connectors.abstract_connector import Mapping
|
||||||
|
|
||||||
|
|
||||||
class AbstractConnector(TestCase):
|
class AbstractConnector(TestCase):
|
||||||
|
|
|
@ -4,8 +4,8 @@ import pathlib
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
|
from bookwyrm.book_search import SearchResult
|
||||||
from bookwyrm.connectors.bookwyrm_connector import Connector
|
from bookwyrm.connectors.bookwyrm_connector import Connector
|
||||||
from bookwyrm.connectors.abstract_connector import SearchResult
|
|
||||||
|
|
||||||
|
|
||||||
class BookWyrmConnector(TestCase):
|
class BookWyrmConnector(TestCase):
|
||||||
|
|
|
@ -7,11 +7,11 @@ from django.test import TestCase
|
||||||
import responses
|
import responses
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
|
from bookwyrm.book_search import SearchResult
|
||||||
from bookwyrm.connectors.openlibrary import Connector
|
from bookwyrm.connectors.openlibrary import Connector
|
||||||
from bookwyrm.connectors.openlibrary import ignore_edition
|
from bookwyrm.connectors.openlibrary import ignore_edition
|
||||||
from bookwyrm.connectors.openlibrary import get_languages, get_description
|
from bookwyrm.connectors.openlibrary import get_languages, get_description
|
||||||
from bookwyrm.connectors.openlibrary import pick_default_edition, get_openlibrary_key
|
from bookwyrm.connectors.openlibrary import pick_default_edition, get_openlibrary_key
|
||||||
from bookwyrm.connectors.abstract_connector import SearchResult
|
|
||||||
from bookwyrm.connectors.connector_manager import ConnectorException
|
from bookwyrm.connectors.connector_manager import ConnectorException
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
""" testing book data connectors """
|
|
||||||
import datetime
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.utils import timezone
|
|
||||||
|
|
||||||
from bookwyrm import models
|
|
||||||
from bookwyrm.connectors.self_connector import Connector
|
|
||||||
from bookwyrm.settings import DOMAIN
|
|
||||||
|
|
||||||
|
|
||||||
class SelfConnector(TestCase):
|
|
||||||
"""just uses local data"""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
"""creating the connector"""
|
|
||||||
models.Connector.objects.create(
|
|
||||||
identifier=DOMAIN,
|
|
||||||
name="Local",
|
|
||||||
connector_file="self_connector",
|
|
||||||
base_url="https://%s" % DOMAIN,
|
|
||||||
books_url="https://%s/book" % DOMAIN,
|
|
||||||
covers_url="https://%s/images/covers" % DOMAIN,
|
|
||||||
search_url="https://%s/search?q=" % DOMAIN,
|
|
||||||
priority=1,
|
|
||||||
)
|
|
||||||
self.connector = Connector(DOMAIN)
|
|
||||||
|
|
||||||
def test_format_search_result(self):
|
|
||||||
"""create a SearchResult"""
|
|
||||||
author = models.Author.objects.create(name="Anonymous")
|
|
||||||
edition = models.Edition.objects.create(
|
|
||||||
title="Edition of Example Work",
|
|
||||||
published_date=datetime.datetime(1980, 5, 10, tzinfo=timezone.utc),
|
|
||||||
)
|
|
||||||
edition.authors.add(author)
|
|
||||||
result = self.connector.search("Edition of Example")[0]
|
|
||||||
self.assertEqual(result.title, "Edition of Example Work")
|
|
||||||
self.assertEqual(result.key, edition.remote_id)
|
|
||||||
self.assertEqual(result.author, "Anonymous")
|
|
||||||
self.assertEqual(result.year, 1980)
|
|
||||||
self.assertEqual(result.connector, self.connector)
|
|
||||||
|
|
||||||
def test_search_rank(self):
|
|
||||||
"""prioritize certain results"""
|
|
||||||
author = models.Author.objects.create(name="Anonymous")
|
|
||||||
edition = models.Edition.objects.create(
|
|
||||||
title="Edition of Example Work",
|
|
||||||
published_date=datetime.datetime(1980, 5, 10, tzinfo=timezone.utc),
|
|
||||||
parent_work=models.Work.objects.create(title=""),
|
|
||||||
)
|
|
||||||
# author text is rank B
|
|
||||||
edition.authors.add(author)
|
|
||||||
|
|
||||||
# series is rank D
|
|
||||||
models.Edition.objects.create(
|
|
||||||
title="Another Edition",
|
|
||||||
series="Anonymous",
|
|
||||||
parent_work=models.Work.objects.create(title=""),
|
|
||||||
)
|
|
||||||
# subtitle is rank B
|
|
||||||
models.Edition.objects.create(
|
|
||||||
title="More Editions",
|
|
||||||
subtitle="The Anonymous Edition",
|
|
||||||
parent_work=models.Work.objects.create(title=""),
|
|
||||||
)
|
|
||||||
# title is rank A
|
|
||||||
models.Edition.objects.create(title="Anonymous")
|
|
||||||
# doesn't rank in this search
|
|
||||||
models.Edition.objects.create(
|
|
||||||
title="An Edition", parent_work=models.Work.objects.create(title="")
|
|
||||||
)
|
|
||||||
|
|
||||||
results = self.connector.search("Anonymous")
|
|
||||||
self.assertEqual(len(results), 4)
|
|
||||||
self.assertEqual(results[0].title, "Anonymous")
|
|
||||||
self.assertEqual(results[1].title, "More Editions")
|
|
||||||
self.assertEqual(results[2].title, "Edition of Example Work")
|
|
||||||
self.assertEqual(results[3].title, "Another Edition")
|
|
||||||
|
|
||||||
def test_search_multiple_editions(self):
|
|
||||||
"""it should get rid of duplicate editions for the same work"""
|
|
||||||
work = models.Work.objects.create(title="Work Title")
|
|
||||||
edition_1 = models.Edition.objects.create(
|
|
||||||
title="Edition 1 Title", parent_work=work
|
|
||||||
)
|
|
||||||
edition_2 = models.Edition.objects.create(
|
|
||||||
title="Edition 2 Title",
|
|
||||||
parent_work=work,
|
|
||||||
isbn_13="123456789", # this is now the defualt edition
|
|
||||||
)
|
|
||||||
edition_3 = models.Edition.objects.create(title="Fish", parent_work=work)
|
|
||||||
|
|
||||||
# pick the best edition
|
|
||||||
results = self.connector.search("Edition 1 Title")
|
|
||||||
self.assertEqual(len(results), 1)
|
|
||||||
self.assertEqual(results[0].key, edition_1.remote_id)
|
|
||||||
|
|
||||||
# pick the default edition when no match is best
|
|
||||||
results = self.connector.search("Edition Title")
|
|
||||||
self.assertEqual(len(results), 1)
|
|
||||||
self.assertEqual(results[0].key, edition_2.remote_id)
|
|
||||||
|
|
||||||
# only matches one edition, so no deduplication takes place
|
|
||||||
results = self.connector.search("Fish")
|
|
||||||
self.assertEqual(len(results), 1)
|
|
||||||
self.assertEqual(results[0].key, edition_3.remote_id)
|
|
Loading…
Reference in a new issue