import requests
from shelfmark.core.cache import get_metadata_cache
from shelfmark.metadata_providers import MetadataSearchOptions, SearchType
from shelfmark.metadata_providers.moly import MolyProvider, _valid_isbn
SEARCH_HTML = """
Vigyázat! Cselekményleírást tartalmaz.
A japánok úgy tartják, hogy ha gondoskodsz egy macskáról,
az egy napon meghálálja.
180 oldal · ISBN: 9789635434435 · Fordította: Nagy Anita
"""
class _MolyResponse:
def __init__(self, text):
self.text = text
def raise_for_status(self):
return None
class _MolySession:
"""Serves canned HTML per URL substring."""
def __init__(self, pages):
self.pages = pages
self.calls = 0
self.headers = {}
def get(self, url, **kwargs):
self.calls += 1
for fragment, html in self.pages.items():
if fragment in url:
return _MolyResponse(html)
raise requests.HTTPError(f"unexpected URL: {url}")
class _FlakyMolySession(_MolySession):
def get(self, url, **kwargs):
if self.calls == 0:
self.calls += 1
raise requests.Timeout
return super().get(url, **kwargs)
def _provider(session):
provider = MolyProvider()
provider.session = session
return provider
class TestMolySearch:
def test_search_parses_results(self):
get_metadata_cache().clear()
provider = _provider(_MolySession({"/kereses": SEARCH_HTML}))
books = provider.search(MetadataSearchOptions(query="telihold kávézó"))
assert len(books) == 3 # duplicate slug deduped, colon-less row skipped
# Mid-word