From 6ef84b47cf8749cca3a8b7a29260f90ad44c7d61 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sat, 10 Oct 2026 17:01:50 +0200 Subject: [PATCH] Den Weg der App einmal ganz abgehen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die App schickt keine Codec-Listen; dann nimmt der Server Apples Profil. Das führt zu einer anderen Entscheidung als beim Browser — dort wird umgerechnet, hier umgepackt — und damit auf einen Weg, den keine Prüfung abging. Jetzt schon: bestellen, Hauptliste, Medienliste, erstes Stück. Co-Authored-By: Claude Opus 5 --- server/tests/Flaro.Api.Tests/StreamTests.cs | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/tests/Flaro.Api.Tests/StreamTests.cs b/server/tests/Flaro.Api.Tests/StreamTests.cs index 6f3e298..93986f0 100644 --- a/server/tests/Flaro.Api.Tests/StreamTests.cs +++ b/server/tests/Flaro.Api.Tests/StreamTests.cs @@ -558,4 +558,40 @@ public class StreamTests Assume.That(strom.Method, Is.EqualTo("direct")); Assert.That(strom.MasterUrl, Is.Null); } + + /// Was die App bestellt, lässt sich auch abholen. + /// + /// + /// Die App schickt keine Codec-Listen — dann nimmt der Server + /// Apples Profil, und das ist hier richtig: dieses Gerät ist Apple. Der + /// Weg danach ist aber ein anderer als der des Browsers, und genau dort + /// kam eine 500 heraus. Diese Prüfung geht ihn ganz ab: bestellen, + /// Hauptliste holen, Medienliste holen, erstes Stück holen. + /// + [Test] + public async Task Der_Weg_der_App_fuehrt_bis_zum_ersten_Stueck() + { + FilmMitUntertitel("Wie die App (2020)"); + var (client, datei) = await Eingelesen(); + + var strom = await Strom(client, datei.Id, new StreamRequest( + Containers: null, VideoCodecs: null, AudioCodecs: null, StartSeconds: 0)); + + Assert.That(strom.MasterUrl, Is.Not.Null, "Eine MKV ist für Apple nichts zum Durchreichen."); + + var haupt = await client.GetAsync(strom.MasterUrl!); + Assert.That(haupt.StatusCode, Is.EqualTo(HttpStatusCode.OK), + await haupt.Content.ReadAsStringAsync()); + + var medien = await client.GetAsync(strom.Url); + Assert.That(medien.StatusCode, Is.EqualTo(HttpStatusCode.OK), + await medien.Content.ReadAsStringAsync()); + + var liste = await medien.Content.ReadAsStringAsync(); + var stueck = liste.Split('\n').FirstOrDefault(z => z.Length > 0 && !z.StartsWith('#')); + Assert.That(stueck, Is.Not.Null, liste); + + var teil = await client.GetAsync($"/api/v1/stream/{strom.SessionId}/{stueck}"); + Assert.That(teil.StatusCode, Is.EqualTo(HttpStatusCode.OK)); + } }