using Flaro.Core.Library; namespace Flaro.Core.Tests; /// Welche Schreibweisen denselben Film meinen — und welche nicht. public class TitelschluesselTests { [TestCase("Dr. Dolittle 2", "Dr Dolittle 2")] [TestCase("Spider-Man", "Spider Man")] [TestCase("WALL·E", "WALL-E")] [TestCase("Amélie", "Amelie")] [TestCase("The Matrix", "the matrix")] [TestCase("Ich einfach unverbesserlich!", "Ich einfach unverbesserlich")] public void Gleiche_Titel_trotz_anderer_Schreibweise(string a, string b) => Assert.That(Titelschluessel.Von(a), Is.EqualTo(Titelschluessel.Von(b)), $"„{a}" + $"\" und „{b}\""); /// Hier endet die Toleranz — und das ist Absicht. /// /// /// Ein zusammengelegter Film lässt sich nicht mehr trennen, ohne zu /// wissen, welche Datei wohin gehörte. Zwei Einträge für einen Film sind /// ärgerlich; ein Eintrag für zwei Filme ist Datenverlust. /// [TestCase("Spider-Man", "Spiderman")] [TestCase("Der Pate", "Der Pate 2")] [TestCase("Dune", "Dune Part Two")] public void Verschiedene_Titel_bleiben_verschieden(string a, string b) => Assert.That(Titelschluessel.Von(a), Is.Not.EqualTo(Titelschluessel.Von(b))); [Test] public void Ein_fehlendes_Jahr_passt_auf_jedes() => Assert.That(Titelschluessel.Gleich("Descendants 2", null, "Descendants 2", 2017), Is.True); /// Die beiden „Dune" dürfen nie verschmelzen. [Test] public void Zwei_bekannte_Jahre_trennen() => Assert.That(Titelschluessel.Gleich("Dune", 1984, "Dune", 2021), Is.False); [Test] public void Leeres_passt_auf_nichts() { Assert.That(Titelschluessel.Von(""), Is.Empty); Assert.That(Titelschluessel.Gleich("", null, "", null), Is.False, "Zwei namenlose Einträge sind nicht derselbe Film."); } } /// Welche Fassung eine Datei ist — 4K, Mobil, Director's Cut. public class FassungTests { [TestCase("The Matrix (1999) - Mobil.mp4", "Mobil")] [TestCase("The Matrix (1999) - optimiert.mp4", "Mobil")] [TestCase("The Matrix (1999) - 2160p.mkv", "2160p")] [TestCase("The Matrix (1999) {edition-Director's Cut}.mkv", "Director's Cut")] [TestCase("Mobil/The Matrix (1999).mp4", "Mobil")] [TestCase("The Matrix (1999) - Extended.mkv", "Extended")] public void Erkennt_die_Fassung(string pfad, string erwartet) => Assert.That(FileNames.Fassung(pfad), Is.EqualTo(erwartet)); /// Eine Veröffentlichungsgruppe ist keine Fassung. /// /// /// Nähme man jedes Wort hinter dem letzten Bindestrich, hiesse eine /// Fassung „YIFY" oder „GRP". Lieber kein Name als ein falscher — dann /// greift der Rückfall über die Bildhöhe. /// [TestCase("The Matrix (1999) - YIFY.mkv")] [TestCase("The Matrix (1999).mkv")] [TestCase("Filme/The Matrix (1999).mkv")] public void Raet_nicht(string pfad) => Assert.That(FileNames.Fassung(pfad), Is.Null); [TestCase(2160, "4K")] [TestCase(1080, "1080p")] [TestCase(720, "720p")] [TestCase(480, "SD")] [TestCase(null, null)] public void Bildet_die_Fassung_aus_der_Hoehe(int? hoehe, string? erwartet) => Assert.That(FileNames.FassungAusHoehe(hoehe), Is.EqualTo(erwartet)); /// Der Fassungszusatz darf nie im Titel landen. [Test] public void Die_Fassung_bleibt_aus_dem_Titel_heraus() { Assert.That(FileNames.ParseMovie("The Matrix (1999) - Mobil.mp4").Title, Is.EqualTo("The Matrix")); Assert.That(FileNames.ParseMovie("The Matrix (1999) - 2160p.mkv").Title, Is.EqualTo("The Matrix")); } }