Cookie heisst Cookie

„Keks", „Keksglas", „Kekse" — eingedeutscht, wo es nichts zu
verdeutschen gibt. Ein Cookie ist ein Cookie; wer danach sucht, sucht
nicht nach Keksen, und wer den Quelltext liest, liest daneben die
Schnittstelle, in der es `HTTPCookieStorage` heisst.

Betrifft Kommentare und Prüfungsnamen, kein Verhalten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-10 20:42:29 +02:00
co-authored by Claude Opus 5
parent f789c40594
commit 693a6cc867
6 changed files with 32 additions and 32 deletions
@@ -50,11 +50,11 @@ public sealed class WebInterfaceTests
var client = server.OhneGedaechtnis();
var angemeldet = await client.PostAsJsonAsync("/api/v1/auth/login",
new LoginRequest("guido", "ein-langes-passwort", "Browser", "browser-1"));
var keks = Keks(angemeldet);
var cookie = Cookie(angemeldet);
// Ohne Kopfzeile — genau so, wie ein <img> fragt.
var anfrage = new HttpRequestMessage(HttpMethod.Get, "/api/v1/movies");
anfrage.Headers.Add("Cookie", keks);
anfrage.Headers.Add("Cookie", cookie);
var antwort = await client.SendAsync(anfrage);
Assert.That(antwort.StatusCode, Is.EqualTo(HttpStatusCode.OK));
@@ -80,17 +80,17 @@ public sealed class WebInterfaceTests
var client = server.OhneGedaechtnis();
var angemeldet = await client.PostAsJsonAsync("/api/v1/auth/login",
new LoginRequest("guido", "ein-langes-passwort", "Browser", "browser-1"));
var keks = Keks(angemeldet);
var cookie = Cookie(angemeldet);
var abmelden = new HttpRequestMessage(HttpMethod.Post, "/api/v1/auth/logout");
abmelden.Headers.Add("Cookie", keks);
abmelden.Headers.Add("Cookie", cookie);
(await client.SendAsync(abmelden)).EnsureSuccessStatusCode();
// **Das Token muss serverseitig weg sein, nicht nur das Cookie im
// Browser.** Ein gelöschtes Cookie schützt niemanden, der den Wert
// vorher mitgeschrieben hat.
var danach = new HttpRequestMessage(HttpMethod.Get, "/api/v1/movies");
danach.Headers.Add("Cookie", keks);
danach.Headers.Add("Cookie", cookie);
Assert.That((await client.SendAsync(danach)).StatusCode,
Is.EqualTo(HttpStatusCode.Unauthorized));
@@ -236,8 +236,8 @@ public sealed class WebInterfaceTests
Assert.Multiple(() =>
{
Assert.That(GanzerKeks(dauerhaft), Does.Contain("max-age=31536000").IgnoreCase);
Assert.That(GanzerKeks(nurJetzt), Does.Not.Contain("max-age").IgnoreCase);
Assert.That(GanzesCookie(dauerhaft), Does.Contain("max-age=31536000").IgnoreCase);
Assert.That(GanzesCookie(nurJetzt), Does.Not.Contain("max-age").IgnoreCase);
});
}
@@ -251,7 +251,7 @@ public sealed class WebInterfaceTests
var antwort = await server.OhneGedaechtnis().PostAsJsonAsync("/api/v1/auth/login",
new LoginRequest("guido", "ein-langes-passwort", "Browser", "b1"));
Assert.That(GanzerKeks(antwort), Does.Contain("max-age=31536000").IgnoreCase);
Assert.That(GanzesCookie(antwort), Does.Contain("max-age=31536000").IgnoreCase);
}
/// <summary>Abmelden scheitert nie — auch nicht ohne gültiges Token.</summary>
@@ -300,10 +300,10 @@ public sealed class WebInterfaceTests
}
/// <summary>Nimmt den Namen und den Wert aus der Set-Cookie-Kopfzeile.</summary>
private static string Keks(HttpResponseMessage antwort) =>
GanzerKeks(antwort).Split(';')[0];
private static string Cookie(HttpResponseMessage antwort) =>
GanzesCookie(antwort).Split(';')[0];
/// <summary>Die ganze Kopfzeile — samt Lebensdauer und Schutzangaben.</summary>
private static string GanzerKeks(HttpResponseMessage antwort) =>
private static string GanzesCookie(HttpResponseMessage antwort) =>
antwort.Headers.GetValues("Set-Cookie").Single();
}