Ein leeres Jahrfeld ist eine Angabe, kein Versehen

Wer bei der Zuordnung kein Jahr einträgt, sagt damit, dass er keines
weiss. Der Server reichte trotzdem eines nach — das aus dem Dateinamen —,
und das leere Feld hatte überhaupt keine Wirkung. Gerade bei einem falsch
benannten Film ist der Dateiname aber die unzuverlässigste Quelle, die es
gibt: „Plan B (2010)" heisst bei TMDB „DivertiMento – Plan B" und ist von
2011. Mit dem nachgereichten 2010 kam nie ein Treffer, und es gab keinen
Weg daran vorbei.

Ohne Angabe wird jetzt ohne Jahr gesucht. Der Platzhalter sagt es auch.

Auf der Detailseite stand im Feld bisher das Jahr der bestehenden
Zuordnung — also genau der, die gerade korrigiert werden soll. „Doctor
Strange" war auf ein Making-of von 2022 gelaufen; mit dessen Jahr konnte
der richtige Film von 2016 gar nicht erscheinen. Das Feld bleibt jetzt
leer, und leer heisst überall dasselbe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-09 16:02:29 +02:00
co-authored by Claude Opus 5
parent ac64b20a5b
commit 18db89399d
5 changed files with 105 additions and 25 deletions
@@ -65,8 +65,18 @@ public class MatchCorrectionTests
public Task<MovieMetadata?> FindMovieAsync(string t, int? j, CancellationToken ct = default) =>
Task.FromResult<MovieMetadata?>(Falsch);
public Task<IReadOnlyList<MovieMetadata>> SearchMoviesAsync(string t, int? j, CancellationToken ct = default) =>
Task.FromResult<IReadOnlyList<MovieMetadata>>([Falsch, Richtig]);
/// <summary>Womit zuletzt gesucht wurde — die Prüfungen unten lesen es.</summary>
public static int? ZuletztesJahr { get; private set; }
public static bool Gefragt { get; private set; }
public Task<IReadOnlyList<MovieMetadata>> SearchMoviesAsync(string t, int? j, CancellationToken ct = default)
{
ZuletztesJahr = j;
Gefragt = true;
return Task.FromResult<IReadOnlyList<MovieMetadata>>([Falsch, Richtig]);
}
public static void Vergessen() { ZuletztesJahr = null; Gefragt = false; }
public Task<MovieMetadata?> GetMovieAsync(int id, CancellationToken ct = default) =>
Task.FromResult<MovieMetadata?>(
@@ -133,6 +143,46 @@ public class MatchCorrectionTests
Assert.That(vorschläge!.Select(v => v.Title), Does.Contain("Dark"));
}
/// <summary>Ein leeres Jahrfeld heisst „ich weiss es nicht", nicht „nimm das vom Dateinamen".</summary>
///
/// <remarks>
/// <b>Der Anlass.</b> „Plan B (2010)" heisst bei TMDB „DivertiMento –
/// Plan B" und ist von 2011. Wer das Jahr aus der Maske herausnahm, um
/// ohne es zu suchen, bekam trotzdem keinen Treffer: der Server reichte
/// das Jahr aus dem Dateinamen nach. Das leere Feld hatte damit gar
/// keine Wirkung, und ein falsch benannter Film war von Hand nicht zu
/// finden.
/// </remarks>
[Test]
public async Task Ohne_Jahr_wird_wirklich_ohne_Jahr_gesucht()
{
var (client, film) = await Eingelesen(beiwerkSchreiben: false);
ZweiTreffer.Vergessen();
await client.GetFromJsonAsync<List<MatchCandidate>>(
$"/api/v1/movies/{film.Id}/matches?query=Plan%20B");
Assert.Multiple(() =>
{
Assert.That(ZweiTreffer.Gefragt, Is.True, "die Suche muss überhaupt stattgefunden haben");
Assert.That(ZweiTreffer.ZuletztesJahr, Is.Null,
"das Jahr aus dem Dateinamen darf nicht nachgereicht werden");
});
}
/// <summary>Ein angegebenes Jahr geht unverändert weiter.</summary>
[Test]
public async Task Ein_angegebenes_Jahr_kommt_an()
{
var (client, film) = await Eingelesen(beiwerkSchreiben: false);
ZweiTreffer.Vergessen();
await client.GetFromJsonAsync<List<MatchCandidate>>(
$"/api/v1/movies/{film.Id}/matches?query=Plan%20B&year=2011");
Assert.That(ZweiTreffer.ZuletztesJahr, Is.EqualTo(2011));
}
[Test]
public async Task Eine_Korrektur_greift_sofort()
{