Ctrl K
ComunidadGuías…

backend/tests/test_media_ids.py

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""services.media_ids: a negative id is a standalone id (docs/specs/standalone-ids.md).

Positive ids keep their old meaning: the arr when its client is configured,
otherwise (legacy, <= 1.17.x clients) a standalone row id.
"""

from __future__ import annotations

import pytest


class _Client:
    pass


@pytest.fixture
def sonarr(monkeypatch):
    monkeypatch.setattr("sonarr_client.get_sonarr_client", lambda *a, **kw: _Client())


@pytest.fixture
def no_sonarr(monkeypatch):
    monkeypatch.setattr("sonarr_client.get_sonarr_client", lambda *a, **kw: None)


@pytest.fixture
def radarr(monkeypatch):
    monkeypatch.setattr("radarr_client.get_radarr_client", lambda *a, **kw: _Client())


@pytest.fixture
def no_radarr(monkeypatch):
    monkeypatch.setattr("radarr_client.get_radarr_client", lambda *a, **kw: None)


def test_key_conversions():
    from services.media_ids import standalone_id_from, standalone_key

    assert standalone_key(7) == -7
    assert standalone_id_from(-7) == 7
    assert standalone_id_from(7) is None
    assert standalone_id_from(0) is None
    with pytest.raises(ValueError):
        standalone_key(0)


def test_negative_series_id_is_standalone_even_with_sonarr(sonarr):
    from services.media_ids import resolve_series_ref

    ref = resolve_series_ref(-4)
    assert ref.is_standalone and ref.id == 4 and ref.key == -4


def test_positive_series_id_with_sonarr_is_sonarr(sonarr):
    from services.media_ids import resolve_series_ref

    ref = resolve_series_ref(4)
    assert ref.kind == "sonarr" and ref.id == 4 and ref.key == 4


def test_positive_series_id_without_sonarr_is_legacy_standalone(no_sonarr):
    from services.media_ids import resolve_series_ref

    ref = resolve_series_ref(4)
    assert ref.is_standalone and ref.id == 4 and ref.key == -4


def test_movie_refs(radarr):
    from services.media_ids import resolve_movie_ref

    assert resolve_movie_ref(9).kind == "radarr"
    neg = resolve_movie_ref(-9)
    assert neg.is_standalone and neg.id == 9 and neg.key == -9


def test_legacy_movie_without_radarr(no_radarr):
    from services.media_ids import resolve_movie_ref

    ref = resolve_movie_ref(9)
    assert ref.is_standalone and ref.key == -9


def test_owner_keys_for_items():
    from services.media_ids import movie_key_for_item, series_key_for_item

    assert series_key_for_item({"sonarr_series_id": 3}) == 3
    assert series_key_for_item({"standalone_series_id": 3}) == -3
    assert series_key_for_item({"sonarr_series_id": 5, "standalone_series_id": 3}) == 5
    assert series_key_for_item({}) is None
    assert movie_key_for_item({"radarr_movie_id": 2}) == 2
    assert movie_key_for_item({"standalone_movie_id": 2}) == -2
    assert movie_key_for_item({"standalone_series_id": 2}) is None
    assert series_key_for_item(None) is None