diff --git a/tests/test_naming.py b/tests/test_naming.py index 551bbde..64e2a0f 100644 --- a/tests/test_naming.py +++ b/tests/test_naming.py @@ -31,3 +31,16 @@ def test_comic_template(): def test_first_author_only(): r = req(title="X", authors="Alice A, Bob B") assert render_template("{Author}", r) == "Alice A" + + +def test_empty_series_level_is_dropped(): + r = req(title="Der Ickabog", authors="J.K. Rowling") + assert render_template("{Author}/{Series}/{Title} ({Narrator})", r) == "J.K. Rowling/Der Ickabog" + + +def test_series_level_kept_when_set(): + r = req(title="Harry Potter und der Feuerkelch", authors="J.K. Rowling", + series="Harry Potter") + r.narrator = "Rufus Beck" + assert render_template("{Author}/{Series}/{Title} ({Narrator})", r) == \ + "J.K. Rowling/Harry Potter/Harry Potter und der Feuerkelch (Rufus Beck)" diff --git a/wordarr/naming.py b/wordarr/naming.py index cc201a9..8a66786 100644 --- a/wordarr/naming.py +++ b/wordarr/naming.py @@ -18,7 +18,7 @@ def render_template(template: str, request) -> str: "Title": request.title or "Unknown Title", "Year": str(request.year) if request.year else "", "Narrator": getattr(request, "narrator", "") or "", - "Series": request.series or request.title or "Unknown Series", + "Series": request.series or "", "Volume": f"{request.volume:02d}" if request.volume is not None else "", } segments = [] @@ -28,5 +28,7 @@ def render_template(template: str, request) -> str: # drop empty parenthesized/dangling bits from missing values, e.g. "Title ()" seg = re.sub(r"\(\s*\)", "", seg) seg = re.sub(r"(-|–)\s*$", "", seg).strip() + if not seg: + continue # drop path levels that are empty (e.g. {Series} without a series) segments.append(sanitize(seg)) - return "/".join(segments) + return "/".join(segments) or "Unknown"