using LehrerApp.Core.Models; using LehrerApp.Core.Services; using Xunit; namespace LehrerApp.Tests; public class GroupMembershipServiceTests { [Fact] public void IsActiveOn_BeruecksichtigtEinUndAustrittAuchBeiGanzemJahr() { var membership = new GroupMembership { Period = MembershipPeriod.FullYear, JoinedAt = new DateOnly(2025, 9, 1), LeftAt = new DateOnly(2025, 10, 15), }; Assert.False(GroupMembershipService.IsActiveOn(membership, new DateOnly(2025, 8, 31))); Assert.True(GroupMembershipService.IsActiveOn(membership, new DateOnly(2025, 9, 1))); Assert.True(GroupMembershipService.IsActiveOn(membership, new DateOnly(2025, 10, 15))); Assert.False(GroupMembershipService.IsActiveOn(membership, new DateOnly(2025, 10, 16))); } [Theory] [InlineData(2025, 12, 1, true)] [InlineData(2026, 1, 31, true)] [InlineData(2026, 2, 1, false)] public void IsActiveOn_BeruecksichtigtHalbjahresmodus(int year, int month, int day, bool expected) { var membership = new GroupMembership { Period = MembershipPeriod.H1Only }; Assert.Equal(expected, GroupMembershipService.IsActiveOn(membership, new DateOnly(year, month, day))); } [Fact] public void Overlaps_FindetTeilweiseZugehoerigkeitImHalbjahr() { var membership = new GroupMembership { Period = MembershipPeriod.Custom, JoinedAt = new DateOnly(2025, 12, 15), LeftAt = new DateOnly(2026, 3, 10), }; var h1 = GroupMembershipService.SchoolYearPeriod("2025/26", SchoolYearPeriodKind.H1); var h2 = GroupMembershipService.SchoolYearPeriod("2025/26", SchoolYearPeriodKind.H2); Assert.True(GroupMembershipService.Overlaps(membership, h1.From, h1.To)); Assert.True(GroupMembershipService.Overlaps(membership, h2.From, h2.To)); Assert.False(GroupMembershipService.Overlaps(membership, new DateOnly(2026, 4, 1), new DateOnly(2026, 7, 31))); } }