mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-10-05 12:21:13 +01:00
Backend test hardening + quality enforcement (#872)
- Reworked many tests - Enforcing lint + type checking for test suite - Fixed various issues surfaced by the new tests - CI tweaks
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from shelfmark.metadata_providers import BookMetadata
|
||||
from shelfmark.release_sources import Release
|
||||
from shelfmark.release_sources.irc.parser import SearchResult
|
||||
from shelfmark.release_sources.irc.source import IRCReleaseSource
|
||||
|
||||
@@ -29,3 +33,107 @@ def test_convert_to_releases_marks_audiobook_results_and_sorts_audio_before_arch
|
||||
|
||||
assert [release.format for release in releases] == ["m4b", "zip"]
|
||||
assert all(release.content_type == "audiobook" for release in releases)
|
||||
|
||||
|
||||
def test_search_uses_cached_results_without_opening_a_connection(monkeypatch):
|
||||
import shelfmark.release_sources.irc.source as irc_source
|
||||
|
||||
source = IRCReleaseSource()
|
||||
cached_release = Release(
|
||||
source="irc",
|
||||
source_id="cached-line",
|
||||
title="Cached Result",
|
||||
)
|
||||
|
||||
monkeypatch.setattr(source, "is_available", lambda: True)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.cache.get_cached_results",
|
||||
lambda provider, provider_id, *, content_type: {
|
||||
"releases": [cached_release],
|
||||
"online_servers": ["AudioBot"],
|
||||
},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.connection_manager.connection_manager.get_connection",
|
||||
lambda **_kwargs: (_ for _ in ()).throw(
|
||||
AssertionError("cache hit should skip IRC connection")
|
||||
),
|
||||
)
|
||||
monkeypatch.setattr(irc_source, "_emit_status", lambda *_args, **_kwargs: None)
|
||||
|
||||
book = BookMetadata(provider="hardcover", provider_id="123", title="Cached Book")
|
||||
plan = SimpleNamespace(primary_query="Cached Book")
|
||||
|
||||
releases = source.search(book, plan)
|
||||
|
||||
assert releases == [cached_release]
|
||||
assert source._online_servers == {"AudioBot"}
|
||||
|
||||
|
||||
def test_search_no_dcc_offer_releases_connection_and_caches_empty_result(monkeypatch):
|
||||
import shelfmark.release_sources.irc.source as irc_source
|
||||
|
||||
source = IRCReleaseSource()
|
||||
cache_calls: list[dict[str, object]] = []
|
||||
released_clients: list[object] = []
|
||||
|
||||
class FakeClient:
|
||||
online_servers = {"AudioBot"}
|
||||
|
||||
def send_message(self, channel: str, message: str) -> None:
|
||||
self.channel = channel
|
||||
self.message = message
|
||||
|
||||
def wait_for_dcc(self, *, timeout: float, result_type: bool) -> None:
|
||||
return None
|
||||
|
||||
client = FakeClient()
|
||||
|
||||
monkeypatch.setattr(source, "is_available", lambda: True)
|
||||
monkeypatch.setattr(irc_source, "_enforce_rate_limit", lambda: None)
|
||||
monkeypatch.setattr(irc_source, "_emit_status", lambda *_args, **_kwargs: None)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.cache.get_cached_results",
|
||||
lambda provider, provider_id, *, content_type: None,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.cache.cache_results",
|
||||
lambda provider, provider_id, title, releases, *, content_type, online_servers: (
|
||||
cache_calls.append(
|
||||
{
|
||||
"provider": provider,
|
||||
"provider_id": provider_id,
|
||||
"title": title,
|
||||
"releases": releases,
|
||||
"content_type": content_type,
|
||||
"online_servers": online_servers,
|
||||
}
|
||||
)
|
||||
),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.connection_manager.connection_manager.get_connection",
|
||||
lambda **_kwargs: client,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"shelfmark.release_sources.irc.connection_manager.connection_manager.release_connection",
|
||||
lambda released_client: released_clients.append(released_client),
|
||||
)
|
||||
|
||||
book = BookMetadata(provider="hardcover", provider_id="abc", title="Missing Result")
|
||||
plan = SimpleNamespace(primary_query="Missing Result")
|
||||
|
||||
releases = source.search(book, plan, content_type="audiobook")
|
||||
|
||||
assert releases == []
|
||||
assert released_clients == [client]
|
||||
assert cache_calls == [
|
||||
{
|
||||
"provider": "hardcover",
|
||||
"provider_id": "abc",
|
||||
"title": "Missing Result",
|
||||
"releases": [],
|
||||
"content_type": "audiobook",
|
||||
"online_servers": ["AudioBot"],
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user