58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
using Omika.Core.Domain.Exceptions;
|
|
using Omika.Core.Domain.ValueObjects;
|
|
|
|
namespace Omika.Tests.Domain;
|
|
|
|
/// <summary>
|
|
/// Tests de l'objet de valeur <see cref="DateTimeRange"/>.
|
|
/// </summary>
|
|
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<DomainValidationException>(() => 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));
|
|
}
|
|
}
|