using SameBeat.Domain.Encje; using SameBeat.Domain.Wyjatki; using Xunit; namespace SameBeat.Tests.Unit; /// /// Testy zywego stanu mikrofonu (ETAP 5) na encji Wydarzenie -- PrzyznajMikrofon/OdbierzMikrofon. /// Tak samo jak WydarzenieMuzykaTests, to prawdziwy zegar (DateTime.UtcNow), sprawdzamy przedzial /// czasowy, nie dokladna wartosc co do milisekundy. /// public class WydarzenieMikrofonTests { [Fact] public void Utworz_MaDomyslnyBrakMikrofonu() { var wydarzenie = Wydarzenie.Utworz("Test"); Assert.Null(wydarzenie.AktywnyMikrofonUczestnikId); Assert.Null(wydarzenie.AktywnyMikrofonKoniecUtc); } [Fact] public void PrzyznajMikrofon_UstawiaUczestnikaIKoniecZaCzasSekundy() { var wydarzenie = Wydarzenie.Utworz("Test"); var uczestnikId = Guid.NewGuid(); var przed = DateTime.UtcNow; wydarzenie.PrzyznajMikrofon(uczestnikId, 5); Assert.Equal(uczestnikId, wydarzenie.AktywnyMikrofonUczestnikId); Assert.NotNull(wydarzenie.AktywnyMikrofonKoniecUtc); // Koniec ma byc mniej-wiecej "teraz + 5s" -- hojny margines na wolne CI. Assert.InRange(wydarzenie.AktywnyMikrofonKoniecUtc!.Value, przed.AddSeconds(4.5), przed.AddSeconds(10)); } [Fact] public void PrzyznajMikrofon_PustyUczestnikId_Rzuca() { var wydarzenie = Wydarzenie.Utworz("Test"); Assert.Throws(() => wydarzenie.PrzyznajMikrofon(Guid.Empty, 5)); } [Theory] [InlineData(0)] [InlineData(-1)] public void PrzyznajMikrofon_NiedodatniCzas_Rzuca(int czasSekundy) { var wydarzenie = Wydarzenie.Utworz("Test"); Assert.Throws(() => wydarzenie.PrzyznajMikrofon(Guid.NewGuid(), czasSekundy)); } [Fact] public void PrzyznajMikrofon_GdyJuzKtosMa_Rzuca() { var wydarzenie = Wydarzenie.Utworz("Test"); wydarzenie.PrzyznajMikrofon(Guid.NewGuid(), 5); Assert.Throws(() => wydarzenie.PrzyznajMikrofon(Guid.NewGuid(), 5)); } [Fact] public void OdbierzMikrofon_CzysciAktywnegoUczestnikaIKoniec() { var wydarzenie = Wydarzenie.Utworz("Test"); wydarzenie.PrzyznajMikrofon(Guid.NewGuid(), 5); wydarzenie.OdbierzMikrofon(); Assert.Null(wydarzenie.AktywnyMikrofonUczestnikId); Assert.Null(wydarzenie.AktywnyMikrofonKoniecUtc); } [Fact] public void OdbierzMikrofon_GdyNikogoNieMa_JestIdempotentne() { var wydarzenie = Wydarzenie.Utworz("Test"); wydarzenie.OdbierzMikrofon(); Assert.Null(wydarzenie.AktywnyMikrofonUczestnikId); } [Fact] public void PrzyznajMikrofon_PoOdebraniu_MoznaPrzyznacZnowu() { var wydarzenie = Wydarzenie.Utworz("Test"); wydarzenie.PrzyznajMikrofon(Guid.NewGuid(), 5); wydarzenie.OdbierzMikrofon(); var nowyUczestnikId = Guid.NewGuid(); wydarzenie.PrzyznajMikrofon(nowyUczestnikId, 10); Assert.Equal(nowyUczestnikId, wydarzenie.AktywnyMikrofonUczestnikId); } }