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());
}
}