Add German FSK rating support for NFO files

- Add optional fsk field to TVShowNFO model
- Implement TMDB content ratings API integration
- Add FSK extraction and mapping (FSK 0/6/12/16/18)
- Update XML generation to prefer FSK over MPAA
- Add nfo_prefer_fsk_rating config setting
- Add 31 comprehensive tests for FSK functionality
- All 112 NFO tests passing
This commit is contained in:
2026-01-17 22:13:34 +01:00
parent fd5e85d5ea
commit 22a41ba93f
10 changed files with 756 additions and 111 deletions

View File

@@ -328,3 +328,78 @@ class TestNFOGeneratorEdgeCases:
xml_string = generate_tvshow_nfo(nfo)
assert "<premiered>2020-01-01</premiered>" in xml_string
class TestFSKRatingGeneration:
"""Test FSK rating generation in NFO XML."""
def test_generate_nfo_with_fsk_rating(self):
"""Test NFO generation with FSK rating."""
nfo = TVShowNFO(
title="FSK Show",
plot="Test",
fsk="FSK 12",
mpaa="TV-14"
)
xml_string = generate_tvshow_nfo(nfo)
# Should use FSK rating when available and preferred (default)
assert "<mpaa>FSK 12</mpaa>" in xml_string
def test_generate_nfo_fsk_preferred_over_mpaa(self):
"""Test that FSK is preferred over MPAA when both present."""
nfo = TVShowNFO(
title="FSK Priority Show",
plot="Test",
fsk="FSK 16",
mpaa="TV-MA"
)
xml_string = generate_tvshow_nfo(nfo)
# FSK should be in mpaa tag, not TV-MA
assert "<mpaa>FSK 16</mpaa>" in xml_string
assert "TV-MA" not in xml_string
def test_generate_nfo_fallback_to_mpaa(self):
"""Test fallback to MPAA when FSK not available."""
nfo = TVShowNFO(
title="MPAA Show",
plot="Test",
fsk=None,
mpaa="TV-PG"
)
xml_string = generate_tvshow_nfo(nfo)
# Should use MPAA when FSK not available
assert "<mpaa>TV-PG</mpaa>" in xml_string
def test_generate_nfo_with_all_fsk_values(self):
"""Test NFO generation with all possible FSK values."""
fsk_values = ["FSK 0", "FSK 6", "FSK 12", "FSK 16", "FSK 18"]
for fsk in fsk_values:
nfo = TVShowNFO(
title=f"FSK {fsk} Show",
plot="Test",
fsk=fsk
)
xml_string = generate_tvshow_nfo(nfo)
assert f"<mpaa>{fsk}</mpaa>" in xml_string
def test_generate_nfo_no_rating(self):
"""Test NFO generation when neither FSK nor MPAA is available."""
nfo = TVShowNFO(
title="No Rating Show",
plot="Test",
fsk=None,
mpaa=None
)
xml_string = generate_tvshow_nfo(nfo)
# mpaa tag should not be present
assert "<mpaa>" not in xml_string