using System.Text.Json; using SameBeat.Api.Controllers; using SameBeat.Api.Monitoring; using Xunit; namespace SameBeat.Tests.Unit; /// /// ETAP 8 -- ksztalt odpowiedzi GET /api/host/diagnostyka. Autoryzacja (KonwencjaAutoryzacjiHosta, /// [Authorize] na konwencji dla "api/host/*") ma osobny test integracyjny przez prawdziwy HTTP -- /// patrz HostDiagnosticsAuthorizationTests -- tutaj testujemy tylko logike samego kontrolera, /// wywolujac akcje bezposrednio (bez TestServer, szybciej). /// public class HostDiagnosticsControllerTests { [Fact] public void Pobierz_ZwracaAktualneLicznikiZLicznikaPolaczenSignalR() { var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("widz-1"); licznik.Polaczono("widz-2"); licznik.Polaczono("host-1"); licznik.DolaczylDoGrupyHosta("host-1"); var kontroler = new HostDiagnosticsController(licznik); var wynik = Assert.IsAssignableFrom(kontroler.Pobierz()); // Anonimowy typ zwracany przez kontroler jest "internal" wzgledem asemblacji Api -- nie da sie // do niego bezpiecznie dobrac przez "dynamic" z projektu testowego (DLR nie ma dostepu), wiec // sprawdzamy ksztalt tak, jak zrobilby to klient HTTP: przez serializacje do JSON. var json = JsonDocument.Parse(JsonSerializer.Serialize(wynik.Value)).RootElement; Assert.Equal(3, json.GetProperty("polaczeniaSignalR").GetProperty("widzowie").GetInt32()); Assert.Equal(1, json.GetProperty("polaczeniaSignalR").GetProperty("host").GetInt32()); } [Fact] public void Pobierz_BezZadnychPolaczen_ZwracaZera() { var licznik = new LicznikPolaczenSignalR(); var kontroler = new HostDiagnosticsController(licznik); var wynik = Assert.IsAssignableFrom(kontroler.Pobierz()); var json = JsonDocument.Parse(JsonSerializer.Serialize(wynik.Value)).RootElement; Assert.Equal(0, json.GetProperty("polaczeniaSignalR").GetProperty("widzowie").GetInt32()); Assert.Equal(0, json.GetProperty("polaczeniaSignalR").GetProperty("host").GetInt32()); } }