MediaProcessing/apps/pyMetadata/tests/test_search_runner.py

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"}