using Omika.Core.Domain.Exceptions; using Omika.Core.Domain.ValueObjects; namespace Omika.Tests.Domain; /// /// Tests de l'objet de valeur . /// public class DateTimeRangeTests { [Fact] public void DateTimeRange_RejectsEndBeforeStart() { var start = new DateTime(2026, 1, 10, 9, 0, 0); var end = new DateTime(2026, 1, 10, 8, 0, 0); Assert.Throws(() => new DateTimeRange(start, end)); } [Fact] public void DateTimeRange_AcceptsEqualDates() { var instant = new DateTime(2026, 1, 10, 9, 0, 0); var range = new DateTimeRange(instant, instant); Assert.Equal(TimeSpan.Zero, range.Duration); } [Fact] public void DateTimeRange_ComputesDurationAndContains() { var range = new DateTimeRange( new DateTime(2026, 1, 10, 9, 0, 0), new DateTime(2026, 1, 10, 11, 30, 0)); Assert.Equal(TimeSpan.FromMinutes(150), range.Duration); Assert.True(range.Contains(new DateTime(2026, 1, 10, 10, 0, 0))); Assert.False(range.Contains(new DateTime(2026, 1, 10, 12, 0, 0))); } [Fact] public void DateTimeRange_DetectsOverlap() { var a = new DateTimeRange( new DateTime(2026, 1, 10, 9, 0, 0), new DateTime(2026, 1, 10, 11, 0, 0)); var b = new DateTimeRange( new DateTime(2026, 1, 10, 10, 0, 0), new DateTime(2026, 1, 10, 12, 0, 0)); var c = new DateTimeRange( new DateTime(2026, 1, 10, 13, 0, 0), new DateTime(2026, 1, 10, 14, 0, 0)); Assert.True(a.Overlaps(b)); Assert.False(a.Overlaps(c)); } }