using Flaro.Core.Media;
namespace Flaro.Core.Tests;
/// Welches Aufmacherbild gerade gilt.
public class AufmacherwahlTests
{
private static readonly Guid Titel = Guid.Parse("11111111-2222-3333-4444-555555555555");
private static readonly DateTimeOffset Montag = new(2026, 10, 12, 8, 0, 0, TimeSpan.Zero);
[Test]
public void Ohne_Auswahl_gibt_es_keines()
{
Assert.That(Aufmacherwahl.Jetziges(null, Titel, Montag), Is.Null);
Assert.That(Aufmacherwahl.Jetziges("", Titel, Montag), Is.Null);
}
[Test]
public void Ein_einziges_Bild_bleibt_immer_dasselbe()
{
var spaeter = Montag.AddDays(30);
Assert.That(Aufmacherwahl.Jetziges("a", Titel, Montag), Is.EqualTo("a"));
Assert.That(Aufmacherwahl.Jetziges("a", Titel, spaeter), Is.EqualTo("a"));
}
/// Innerhalb eines Fensters kommt überall dasselbe heraus.
///
///
/// Der eigentliche Grund für die Rechnung. Ein Zufall je Abruf
/// hiesse: beim Blättern springt das Bild, und die App zeigt ein
/// anderes als das Web.
///
[Test]
public void Innerhalb_des_Fensters_wechselt_nichts()
{
var erstes = Aufmacherwahl.Jetziges("a,b,c", Titel, Montag);
var kurzDarauf = Aufmacherwahl.Jetziges("a,b,c", Titel, Montag.AddMinutes(90));
Assert.That(kurzDarauf, Is.EqualTo(erstes));
}
[Test]
public void Nach_dem_Fenster_kommt_ein_anderes()
{
var erstes = Aufmacherwahl.Jetziges("a,b,c", Titel, Montag);
var danach = Aufmacherwahl.Jetziges("a,b,c", Titel, Montag + Aufmacherwahl.Fenster);
Assert.That(danach, Is.Not.EqualTo(erstes));
}
/// Über einen Tag kommt jedes Bild vor.
[Test]
public void Alle_Bilder_kommen_an_die_Reihe()
{
var gesehen = new HashSet();
for (var i = 0; i < 24; i++)
gesehen.Add(Aufmacherwahl.Jetziges("a,b,c", Titel, Montag.AddHours(i * 5)));
Assert.That(gesehen, Is.EquivalentTo(new[] { "a", "b", "c" }));
}
/// Zwei Titel schalten nicht im selben Augenblick um.
[Test]
public void Nicht_alle_Titel_zugleich()
{
var anderer = Guid.Parse("99999999-8888-7777-6666-555555555555");
var eins = Aufmacherwahl.Jetziges("a,b,c", Titel, Montag);
var zwei = Aufmacherwahl.Jetziges("a,b,c", anderer, Montag);
Assert.That(zwei, Is.Not.EqualTo(eins));
}
[Test]
public void Mehr_als_fuenf_werden_abgeschnitten()
{
var zeile = Aufmacherwahl.Schreiben(["a", "b", "c", "d", "e", "f", "g"]);
Assert.That(Aufmacherwahl.Lesen(zeile), Has.Count.EqualTo(5));
}
[Test]
public void Doppelte_und_Leere_fallen_heraus()
{
var zeile = Aufmacherwahl.Schreiben(["a", " a ", "", " ", "b"]);
Assert.That(Aufmacherwahl.Lesen(zeile), Is.EqualTo(new[] { "a", "b" }));
}
/// Ein Komma im Schlüssel zerlegte die Zeile beim Lesen.
[Test]
public void Ein_Schluessel_mit_Komma_wird_verworfen()
{
Assert.That(Aufmacherwahl.Lesen(Aufmacherwahl.Schreiben(["a,b", "c"])),
Is.EqualTo(new[] { "c" }));
}
[Test]
public void Ohne_Bilder_bleibt_die_Zeile_leer()
{
Assert.That(Aufmacherwahl.Schreiben([]), Is.Null);
}
}