Skip to content

Commit 67a948c

Browse files
committed
Added new DateTime validation extensions for IsInRange and weekday/end validation
1 parent 5f62fbd commit 67a948c

2 files changed

Lines changed: 159 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
namespace MADE.Data.Validation.Extensions
2+
{
3+
using System;
4+
5+
/// <summary>
6+
/// Defines a collection of data validation extensions for <see cref="DateTime"/> objects.
7+
/// </summary>
8+
public static class DateTimeExtensions
9+
{
10+
/// <summary>
11+
/// Determines whether a <see cref="DateTime"/> is within a valid range.
12+
/// </summary>
13+
/// <param name="date">The <see cref="DateTime"/> to check.</param>
14+
/// <param name="from">The lower bound of the range.</param>
15+
/// <param name="to">The upper bound of the range.</param>
16+
/// <returns>True if the date is within the valid range.</returns>
17+
public static bool IsInRange(this DateTime date, DateTime from, DateTime to)
18+
{
19+
return date >= from && date <= to;
20+
}
21+
22+
/// <summary>
23+
/// Determines whether a <see cref="DateTime"/> is a day of the week other than Sunday or Saturday.
24+
/// </summary>
25+
/// <param name="date">The <see cref="DateTime"/> to check.</param>
26+
/// <returns>True if the day of week is between Monday and Friday; otherwise, false.</returns>
27+
public static bool IsWeekday(this DateTime date)
28+
{
29+
return date.DayOfWeek >= DayOfWeek.Monday && date.DayOfWeek <= DayOfWeek.Friday;
30+
}
31+
32+
/// <summary>
33+
/// Determines whether a <see cref="DateTime"/> is a day of the week other than Monday through Friday.
34+
/// </summary>
35+
/// <param name="date">The <see cref="DateTime"/> to check.</param>
36+
/// <returns>True if the day of week is Saturday or Sunday; otherwise, false.</returns>
37+
public static bool IsWeekend(this DateTime date)
38+
{
39+
return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
40+
}
41+
}
42+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
namespace MADE.Data.Validation.Tests.Tests
2+
{
3+
using System;
4+
using System.Diagnostics.CodeAnalysis;
5+
using System.Globalization;
6+
using MADE.Data.Validation.Extensions;
7+
using NUnit.Framework;
8+
using Shouldly;
9+
10+
[ExcludeFromCodeCoverage]
11+
[TestFixture]
12+
public class DateTimeExtensionsTests
13+
{
14+
public class WhenDeterminingWhetherDateIsInRange
15+
{
16+
[TestCase("07/01/2021", "01/01/2021", "12/31/2021")]
17+
[TestCase("07/01/2021 12:00:00", "07/01/2021 09:00:00", "07/01/2021 15:00:00")]
18+
public void ShouldBeTrueIfInRange(string dateVal, string fromVal, string toVal)
19+
{
20+
// Arrange
21+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
22+
var from = DateTime.Parse(fromVal, new CultureInfo("en-US"));
23+
var to = DateTime.Parse(toVal, new CultureInfo("en-US"));
24+
25+
// Act
26+
bool isInRange = date.IsInRange(from, to);
27+
28+
// Assert
29+
isInRange.ShouldBeTrue();
30+
}
31+
32+
[TestCase("07/01/2021", "01/01/2020", "12/31/2020")]
33+
[TestCase("07/01/2021 00:00:00", "07/01/2021 09:00:00", "07/01/2021 15:00:00")]
34+
public void ShouldBeFalseIfNotInRange(string dateVal, string fromVal, string toVal)
35+
{
36+
// Arrange
37+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
38+
var from = DateTime.Parse(fromVal, new CultureInfo("en-US"));
39+
var to = DateTime.Parse(toVal, new CultureInfo("en-US"));
40+
41+
// Act
42+
bool isInRange = date.IsInRange(from, to);
43+
44+
// Assert
45+
isInRange.ShouldBeFalse();
46+
}
47+
}
48+
49+
public class WhenDeterminingWeekdays
50+
{
51+
[TestCase("05/10/2021")]
52+
[TestCase("05/11/2021")]
53+
[TestCase("05/12/2021")]
54+
[TestCase("05/13/2021")]
55+
[TestCase("05/14/2021")]
56+
public void ShouldBeTrueIfWeekday(string dateVal)
57+
{
58+
// Arrange
59+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
60+
61+
// Act
62+
bool isWeekday = date.IsWeekday();
63+
64+
// Assert
65+
isWeekday.ShouldBeTrue();
66+
}
67+
68+
[TestCase("05/15/2021")]
69+
[TestCase("05/16/2021")]
70+
public void ShouldBeFalseIfNotWeekday(string dateVal)
71+
{
72+
// Arrange
73+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
74+
75+
// Act
76+
bool isWeekday = date.IsWeekday();
77+
78+
// Assert
79+
isWeekday.ShouldBeFalse();
80+
}
81+
}
82+
83+
public class WhenDeterminingWeekends
84+
{
85+
[TestCase("05/15/2021")]
86+
[TestCase("05/16/2021")]
87+
public void ShouldBeTrueIfWeekend(string dateVal)
88+
{
89+
// Arrange
90+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
91+
92+
// Act
93+
bool isWeekend = date.IsWeekend();
94+
95+
// Assert
96+
isWeekend.ShouldBeTrue();
97+
}
98+
99+
[TestCase("05/10/2021")]
100+
[TestCase("05/11/2021")]
101+
[TestCase("05/12/2021")]
102+
[TestCase("05/13/2021")]
103+
[TestCase("05/14/2021")]
104+
public void ShouldBeFalseIfNotWeekend(string dateVal)
105+
{
106+
// Arrange
107+
var date = DateTime.Parse(dateVal, new CultureInfo("en-US"));
108+
109+
// Act
110+
bool isWeekend = date.IsWeekend();
111+
112+
// Assert
113+
isWeekend.ShouldBeFalse();
114+
}
115+
}
116+
}
117+
}

0 commit comments

Comments
 (0)