using Microsoft.Extensions.Logging.Abstractions; namespace Flaro.Metadata.Tests; /// Welches Plakat und welcher Hintergrund genommen werden. /// /// /// /// Der gemeldete Fehler. „365 Tage" stand mit polnischem Plakat da, /// obwohl in der eingestellten Sprache gesucht wurde. TMDB liefert im /// Einzelabruf das Feld poster_path der Originalsprache, wenn in der /// gewünschten keines eingetragen ist — und genau dieses Feld wurde /// genommen. Die sprachsortierte Liste lag in derselben Antwort schon vor /// (append_to_response=…,images) und wurde ausschliesslich für den /// Schriftzug benutzt. /// /// /// Sprachlos vor Englisch. Ein Bild ohne Sprachkennung trägt keinen /// Text. Für einen deutschen Bestand ist ein Plakat ohne Titel besser als /// dasselbe mit englischem Titel darüber. /// /// public class Bildwahltests { private static TmdbClient Client(Attrappe attrappe, string sprache = "de-DE") => new(new HttpClient(attrappe) { BaseAddress = new Uri(TmdbClient.BaseAddress) }, FesteEinstellungen.MitSchluessel(sprache), NullLogger.Instance); private const string Suche = """{"results":[{"id":500,"title":"Probe","release_date":"2020-02-07"}]}"""; /// Ein Einzelabruf mit Bilderliste und einem Rückfallfeld. /// Ein Einzelabruf mit Bilderliste und einem Rückfallfeld. private static Attrappe MitBildern(string posters, string backdrops = "[]") => Attrappe.NachPfad( ("search/movie", Suche), ("movie/500", "{\"id\":500,\"title\":\"Probe\",\"release_date\":\"2020-02-07\"," + "\"poster_path\":\"/original.jpg\",\"backdrop_path\":\"/grund.jpg\"," + "\"images\":{\"posters\":" + posters + ",\"backdrops\":" + backdrops + "}}")); private static Task Holen(Attrappe a, string sprache = "de-DE") => Client(a, sprache).FindMovieAsync("Probe", 2020); [Test] public async Task Das_deutsche_Plakat_sticht_das_der_Originalsprache() { var film = await Holen(MitBildern(""" [{"file_path":"/pl.jpg","iso_639_1":"pl","vote_average":9.0}, {"file_path":"/de.jpg","iso_639_1":"de","vote_average":1.0}] """)); Assert.That(film!.Poster!.Url, Does.EndWith("/de.jpg"), "die eingestellte Sprache gewinnt, auch gegen die besseren Stimmen"); } [Test] public async Task Ohne_deutsches_Plakat_gewinnt_das_sprachlose() { var film = await Holen(MitBildern(""" [{"file_path":"/en.jpg","iso_639_1":"en","vote_average":9.0}, {"file_path":"/ohne.jpg","iso_639_1":null,"vote_average":1.0}, {"file_path":"/pl.jpg","iso_639_1":"pl","vote_average":8.0}] """)); Assert.That(film!.Poster!.Url, Does.EndWith("/ohne.jpg"), "ein Plakat ohne Text ist besser als eines mit englischem"); } [Test] public async Task Gibt_es_nur_Englisch_und_Fremdes_gewinnt_Englisch() { var film = await Holen(MitBildern(""" [{"file_path":"/pl.jpg","iso_639_1":"pl","vote_average":9.0}, {"file_path":"/en.jpg","iso_639_1":"en","vote_average":1.0}] """)); Assert.That(film!.Poster!.Url, Does.EndWith("/en.jpg")); } /// Bei gleicher Sprache entscheiden die Stimmen. [Test] public async Task Unter_Gleichsprachigen_gewinnen_die_Stimmen() { var film = await Holen(MitBildern(""" [{"file_path":"/de-schwach.jpg","iso_639_1":"de","vote_average":2.0}, {"file_path":"/de-stark.jpg","iso_639_1":"de","vote_average":8.0}] """)); Assert.That(film!.Poster!.Url, Does.EndWith("/de-stark.jpg")); } /// Ohne Liste bleibt es beim Feld der Hauptantwort. /// /// /// Ein alter Zwischenspeicher oder eine abgespeckte Antwort darf nicht /// dazu führen, dass gar kein Plakat mehr herauskommt. /// [Test] public async Task Ohne_Bilderliste_bleibt_das_Feld_der_Hauptantwort() { var attrappe = Attrappe.NachPfad( ("search/movie", Suche), ("movie/500", """ {"id":500,"title":"Probe","release_date":"2020-02-07", "poster_path":"/original.jpg","backdrop_path":"/grund.jpg"} """)); var film = await Holen(attrappe); Assert.Multiple(() => { Assert.That(film!.Poster!.Url, Does.EndWith("/original.jpg")); Assert.That(film.Backdrop!.Url, Does.EndWith("/grund.jpg")); }); } /// Der Hintergrund folgt derselben Regel. [Test] public async Task Der_Hintergrund_bevorzugt_das_Bild_ohne_Schrift() { var film = await Holen(MitBildern("[]", """ [{"file_path":"/mit-titel.jpg","iso_639_1":"en","vote_average":9.0}, {"file_path":"/ohne-titel.jpg","iso_639_1":null,"vote_average":1.0}] """)); Assert.That(film!.Backdrop!.Url, Does.EndWith("/ohne-titel.jpg")); } /// Eine andere eingestellte Sprache verschiebt die Rangfolge mit. [Test] public async Task Die_Rangfolge_haengt_an_der_eingestellten_Sprache() { var bilder = """ [{"file_path":"/de.jpg","iso_639_1":"de","vote_average":9.0}, {"file_path":"/fr.jpg","iso_639_1":"fr","vote_average":1.0}] """; var film = await Holen(MitBildern(bilder), "fr-FR"); Assert.That(film!.Poster!.Url, Does.EndWith("/fr.jpg")); } }