76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
import asyncio
|
|
import pytest
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
from worker.search_runner import run_search
|
|
from models.metadata import Metadata, Summary, MediaType
|
|
|
|
# Dummy Metadata factory
|
|
def make_dummy_metadata(source: str, title: str = "Dummy Title") -> Metadata:
|
|
return Metadata(
|
|
title=title,
|
|
altTitle=[f"{title} alt"],
|
|
cover="http://example.com/cover.jpg",
|
|
banner=None,
|
|
type=MediaType.MOVIE, # bruk en gyldig enum fra din kode
|
|
summary=[Summary(summary="A fake summary", language="en")],
|
|
genres=["Drama", "Action"],
|
|
source=source,
|
|
)
|
|
|
|
# Dummy Source that mimics SourceBase
|
|
class DummySource:
|
|
def __init__(self, titles, result=None, raise_exc=False):
|
|
self.titles = titles
|
|
self._result = result
|
|
self._raise_exc = raise_exc
|
|
|
|
async def search(self):
|
|
if self._raise_exc:
|
|
raise RuntimeError("Search failed")
|
|
return self._result
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_run_search_all_results(monkeypatch):
|
|
sources = [
|
|
DummySource(["foo"], make_dummy_metadata("mal")),
|
|
DummySource(["foo"], make_dummy_metadata("imdb")),
|
|
DummySource(["foo"], make_dummy_metadata("anii")),
|
|
]
|
|
monkeypatch.setattr("worker.search_runner.get_all_sources", lambda titles: sources)
|
|
|
|
results = await run_search(["foo"])
|
|
assert len(results) == 3
|
|
assert all(isinstance(r, Metadata) for r in results)
|
|
assert {r.source for r in results} == {"mal", "imdb", "anii"}
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_run_search_filters_none(monkeypatch):
|
|
sources = [
|
|
DummySource(["foo"], make_dummy_metadata("mal")),
|
|
DummySource(["foo"], None),
|
|
DummySource(["foo"], make_dummy_metadata("imdb")),
|
|
]
|
|
monkeypatch.setattr("worker.search_runner.get_all_sources", lambda titles: sources)
|
|
|
|
results = await run_search(["foo"])
|
|
assert len(results) == 2
|
|
assert {r.source for r in results} == {"mal", "imdb"}
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_run_search_handles_exception(monkeypatch):
|
|
sources = [
|
|
DummySource(["foo"], make_dummy_metadata("mal")),
|
|
DummySource(["foo"], raise_exc=True),
|
|
DummySource(["foo"], make_dummy_metadata("imdb")),
|
|
]
|
|
monkeypatch.setattr("worker.search_runner.get_all_sources", lambda titles: sources)
|
|
|
|
results = await run_search(["foo"])
|
|
|
|
# Nå skal vi få bare de gyldige Metadata-resultatene
|
|
assert all(isinstance(r, Metadata) for r in results)
|
|
assert {r.source for r in results} == {"mal", "imdb"}
|
|
|