dev: umfangreiches Refactoring, Trakt-Integration und Code-Review-Fixes (0.1.69-dev)
Core & Architektur: - Neues Verzeichnis addon/core/ mit router.py, trakt.py, metadata.py, gui.py, playstate.py, plugin_manager.py, updater.py - Tests-Verzeichnis hinzugefügt (24 Tests, pytest + Coverage) Trakt-Integration: - OAuth Device Flow, Scrobbling, Watchlist, History, Calendar - Upcoming Episodes, Weiterschauen (Continue Watching) - Watched-Status in Episodenlisten - _trakt_find_in_plugins() mit 5-Min-Cache Serienstream-Suche: - API-Ergebnisse werden immer mit Katalog-Cache ergänzt (serverseitiges 10-Treffer-Limit) - Katalog-Cache wird beim Addon-Start im Daemon-Thread vorgewärmt - Notification nach Cache-Load via xbmc.executebuiltin() (thread-sicher) Bugfixes (Code-Review): - Race Condition auf _TRAKT_WATCHED_CACHE: _TRAKT_WATCHED_CACHE_LOCK hinzugefügt - GUI-Dialog aus Daemon-Thread: xbmcgui -> xbmc.executebuiltin() - ValueError in Trakt-Watchlist-Routen abgesichert - Token expires_at==0 Check korrigiert - get_setting_bool() Kontrollfluss in gui.py bereinigt - topstreamfilm_plugin: try-finally um xbmcvfs.File.close() Cleanup: - default.py.bak und refactor_router.py entfernt - .gitignore: /tests/ Eintrag entfernt - Type-Hints vereinheitlicht (Dict/List/Tuple -> dict/list/tuple)
This commit is contained in:
41
tests/test_filmpalast_genres.py
Normal file
41
tests/test_filmpalast_genres.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
from addon.plugins import filmpalast_plugin as fp
|
||||
|
||||
|
||||
def _soup(html: str):
|
||||
return BeautifulSoup(html, "html.parser")
|
||||
|
||||
|
||||
def test_genres_parse_sidebar(monkeypatch):
|
||||
html = """
|
||||
<aside>
|
||||
<section id="genre">
|
||||
<ul>
|
||||
<li><a href="https://filmpalast.to/search/genre/Action">Action</a></li>
|
||||
<li><a href="https://filmpalast.to/search/genre/Drama">Drama</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
</aside>
|
||||
"""
|
||||
monkeypatch.setattr(fp, "_get_soup", lambda *args, **kwargs: _soup(html))
|
||||
plugin = fp.FilmpalastPlugin()
|
||||
genres = plugin.genres()
|
||||
assert genres == ["Action", "Drama"]
|
||||
|
||||
|
||||
def test_titles_for_genre_page_parsing(monkeypatch):
|
||||
html = """
|
||||
<article class="liste"><h2><a href="//filmpalast.to/stream/test-film">Test Film</a></h2></article>
|
||||
<article class="liste"><h2><a href="//filmpalast.to/stream/test-show-s01e01">Test Show S01E01 Pilot</a></h2></article>
|
||||
<article class="liste"><h2><a href="//filmpalast.to/stream/test-show-s01e02">Test Show S01E02 Folge 2</a></h2></article>
|
||||
"""
|
||||
plugin = fp.FilmpalastPlugin()
|
||||
plugin._genre_to_url = {"Action": "https://filmpalast.to/search/genre/Action"}
|
||||
monkeypatch.setattr(fp, "_get_soup", lambda *args, **kwargs: _soup(html))
|
||||
|
||||
titles = plugin.titles_for_genre_page("Action", 1)
|
||||
|
||||
assert titles == ["Test Film", "Test Show"]
|
||||
assert plugin.seasons_for("Test Show") == ["Staffel 1"]
|
||||
|
||||
Reference in New Issue
Block a user