using SameBeat.Api.Monitoring; using Xunit; namespace SameBeat.Tests.Unit; /// /// ETAP 8 -- licznik polaczen SignalR w pamieci procesu (StanImprezyHub aktualizuje, HealthController /// i HostDiagnosticsController czytaja). Testy jednostkowe, bez SignalR/TestServer -- sama logika /// zliczania jest niezalezna od transportu. /// public class LicznikPolaczenSignalRTests { [Fact] public void Polaczono_ZwiekszaLiczbeOgolemIWidzow() { var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("polaczenie-1"); licznik.Polaczono("polaczenie-2"); Assert.Equal(2, licznik.LiczbaPolaczenOgolem); Assert.Equal(2, licznik.LiczbaPolaczenWidzowie); Assert.Equal(0, licznik.LiczbaPolaczenHost); } [Fact] public void DolaczylDoGrupyHosta_ZwiekszaTylkoLicznikHosta() { var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("polaczenie-1"); licznik.DolaczylDoGrupyHosta("polaczenie-1"); Assert.Equal(1, licznik.LiczbaPolaczenOgolem); Assert.Equal(1, licznik.LiczbaPolaczenHost); } [Fact] public void DolaczylDoGrupyHosta_WywolanyDwukrotnieDlaTegoSamegoPolaczenia_NieZawyzaLicznika() { // Regresja dla komentarza w StanImprezyHub: powtorne wywolanie DolaczDoGrupyHosta (np. po // reconnect z tym samym ConnectionId -- w praktyce SignalR i tak nadaje nowy ConnectionId, // ale metoda ma byc bezpieczna rowniez na wywolanie "na tym samym" polaczeniu) nie moze // podwajac licznika hosta. var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("polaczenie-1"); licznik.DolaczylDoGrupyHosta("polaczenie-1"); licznik.DolaczylDoGrupyHosta("polaczenie-1"); Assert.Equal(1, licznik.LiczbaPolaczenHost); } [Fact] public void Rozlaczono_UsuwaPolaczenieZeWszystkichLicznikow() { var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("polaczenie-1"); licznik.DolaczylDoGrupyHosta("polaczenie-1"); licznik.Polaczono("polaczenie-2"); licznik.Rozlaczono("polaczenie-1"); Assert.Equal(1, licznik.LiczbaPolaczenOgolem); Assert.Equal(1, licznik.LiczbaPolaczenWidzowie); Assert.Equal(0, licznik.LiczbaPolaczenHost); } [Fact] public void Rozlaczono_DlaNieznanegoPolaczenia_NicNieRobi() { var licznik = new LicznikPolaczenSignalR(); licznik.Polaczono("polaczenie-1"); licznik.Rozlaczono("polaczenie-nieistniejace"); Assert.Equal(1, licznik.LiczbaPolaczenOgolem); } }