using System.Net; using System.Net.Http.Json; using System.Text.Json; namespace GerbilManager.Tests; /// /// WEB-PUSH: VAPID-Public-Key abrufen + Abo speichern/entfernen. /// (Das tatsächliche Versenden wird nicht getestet — es geht an externe Push-Dienste.) /// public class PushEndpointTests : IClassFixture { private readonly ApiFactory _factory; public PushEndpointTests(ApiFactory factory) => _factory = factory; [Fact] public async Task Vapid_public_key_is_exposed() { var client = _factory.CreateClient(); var doc = JsonDocument.Parse(await client.GetStringAsync("/push/vapid-public-key")).RootElement; Assert.True(doc.GetProperty("enabled").GetBoolean()); Assert.False(string.IsNullOrWhiteSpace(doc.GetProperty("publicKey").GetString())); } [Fact] public async Task Subscribe_is_idempotent_and_unsubscribe_works() { var client = _factory.CreateClient(); var endpoint = $"https://push.example.com/{Guid.NewGuid()}"; var body = new { endpoint, p256dh = "abc123", auth = "def456" }; var first = await client.PostAsJsonAsync("/push/subscribe", body); Assert.Equal(HttpStatusCode.OK, first.StatusCode); // Erneutes Abo mit derselben Endpoint-URL -> weiterhin OK (Upsert, kein Duplikat). var second = await client.PostAsJsonAsync("/push/subscribe", body); Assert.Equal(HttpStatusCode.OK, second.StatusCode); var bad = await client.PostAsJsonAsync("/push/subscribe", new { endpoint = "", p256dh = "", auth = "" }); Assert.Equal(HttpStatusCode.BadRequest, bad.StatusCode); var unsub = await client.PostAsJsonAsync("/push/unsubscribe", new { endpoint }); Assert.Equal(HttpStatusCode.NoContent, unsub.StatusCode); } }