using SameBeat.Domain.Encje; using SameBeat.Domain.Wyjatki; using Xunit; namespace SameBeat.Tests.Unit; public class HistoriaMikrofonuTests { [Fact] public void Rozpocznij_UstawiaStartIKoniecPlanowanyZCzasuSekundy() { var wydarzenieId = Guid.NewGuid(); var uczestnikId = Guid.NewGuid(); var przed = DateTime.UtcNow; var wpis = HistoriaMikrofonu.Rozpocznij(wydarzenieId, uczestnikId, 5, "PiotrHost"); Assert.Equal(wydarzenieId, wpis.WydarzenieId); Assert.Equal(uczestnikId, wpis.UczestnikOczekujacyId); Assert.Equal(5, wpis.CzasSekundy); Assert.Equal("PiotrHost", wpis.PrzyznalHostNick); Assert.Null(wpis.KoniecFaktycznyUtc); Assert.True(wpis.StartUtc >= przed); Assert.Equal(wpis.StartUtc.AddSeconds(5), wpis.KoniecPlanowanyUtc); } [Fact] public void Rozpocznij_PustyWydarzenieId_Rzuca() { Assert.Throws(() => HistoriaMikrofonu.Rozpocznij(Guid.Empty, Guid.NewGuid(), 5, "Host")); } [Fact] public void Rozpocznij_PustyUczestnikId_Rzuca() { Assert.Throws(() => HistoriaMikrofonu.Rozpocznij(Guid.NewGuid(), Guid.Empty, 5, "Host")); } [Theory] [InlineData(0)] [InlineData(-5)] public void Rozpocznij_NiedodatniCzas_Rzuca(int czasSekundy) { Assert.Throws(() => HistoriaMikrofonu.Rozpocznij(Guid.NewGuid(), Guid.NewGuid(), czasSekundy, "Host")); } [Fact] public void Zakoncz_UstawiaKoniecFaktyczny() { var wpis = HistoriaMikrofonu.Rozpocznij(Guid.NewGuid(), Guid.NewGuid(), 5, "Host"); wpis.Zakoncz(); Assert.NotNull(wpis.KoniecFaktycznyUtc); } [Fact] public void Zakoncz_WywolaneDwaRazy_NieZmieniaDrugiegoRazu() { var wpis = HistoriaMikrofonu.Rozpocznij(Guid.NewGuid(), Guid.NewGuid(), 5, "Host"); wpis.Zakoncz(); var koniecPoPierwszymRazie = wpis.KoniecFaktycznyUtc; Thread.Sleep(20); wpis.Zakoncz(); Assert.Equal(koniecPoPierwszymRazie, wpis.KoniecFaktycznyUtc); } }