import Testing @testable import MediaKit @Suite("Wann nachgeladen wird") struct PagingWindowTests { private let fenster = PagingWindow(columns: 6, rowsAhead: 2) /// **Der Fall, der die alte Regel entlarvt.** Wer ganz oben steht, ist /// nicht am Ende — auch wenn die letzten fünf Kacheln längst gezeichnet /// sind. Genau daran lag es, dass das Nachladen sofort losging. @Test("Am Anfang wird nicht nachgeladen") func notAtTheStart() { #expect(!fenster.shouldLoad(focusedIndex: 0, loaded: 60, total: 300)) } /// Zwei Zeilen vor Schluss bei sechs Spalten: ab Eintrag 48 von 60. @Test("Zwei Zeilen vor Schluss wird nachgeladen") func loadsTwoRowsEarly() { #expect(!fenster.shouldLoad(focusedIndex: 47, loaded: 60, total: 300)) #expect(fenster.shouldLoad(focusedIndex: 48, loaded: 60, total: 300)) } /// Ein breiteres Raster braucht mehr Vorlauf — das ist der ganze Grund, /// in Zeilen zu rechnen statt in Einträgen. @Test("Mehr Spalten heißt früher nachladen") func widerGridLoadsEarlier() { let schmal = PagingWindow(columns: 3) let breit = PagingWindow(columns: 8) #expect(!schmal.shouldLoad(focusedIndex: 50, loaded: 60, total: 300)) #expect(breit.shouldLoad(focusedIndex: 50, loaded: 60, total: 300)) } @Test("Ist alles da, wird nicht mehr gefragt") func stopsWhenComplete() { #expect(!fenster.shouldLoad(focusedIndex: 59, loaded: 60, total: 60)) } /// Ein Raster kennt seine Spaltenzahl erst nach dem ersten Zeichnen. /// Falsch zu antworten ist besser als durch null zu teilen. @Test("Ohne Spalten wird nichts entschieden") func survivesZeroColumns() { #expect(!PagingWindow(columns: 0).shouldLoad(focusedIndex: 10, loaded: 60, total: 300)) } @Test("Eine leere Mediathek löst nichts aus") func emptyLibrary() { #expect(!fenster.shouldLoad(focusedIndex: 0, loaded: 0, total: 0)) } }