@@ -2,6 +2,7 @@ namespace MADE.Data.Converters.Tests.Tests
22{
33 using System ;
44 using System . Diagnostics . CodeAnalysis ;
5+ using MADE . Data . Converters . Constants ;
56 using MADE . Data . Converters . Extensions ;
67 using NUnit . Framework ;
78 using Shouldly ;
@@ -132,5 +133,186 @@ public void ShouldSetDateTimeIfProvidedTimeAsHoursMinutesSecondsAndMilliseconds(
132133 dateTime . TimeOfDay . ShouldBe ( expectedTime ) ;
133134 }
134135 }
136+
137+ public class WhenRoundingToNearestHour
138+ {
139+ [ Test ]
140+ public void ShouldRoundUpIfAfterHalfHour ( )
141+ {
142+ // Arrange
143+ int expectedHour = 10 ;
144+ var dateTime = new DateTime ( 2021 , 5 , 12 , 9 , 31 , 0 ) ;
145+
146+ // Act
147+ DateTime nearestHour = dateTime . ToNearestHour ( ) ;
148+
149+ // Assert
150+ nearestHour . Hour . ShouldBe ( expectedHour ) ;
151+ }
152+
153+ [ Test ]
154+ public void ShouldRoundDownIfBeforeHalfHour ( )
155+ {
156+ // Arrange
157+ int expectedHour = 9 ;
158+ var dateTime = new DateTime ( 2021 , 5 , 12 , 9 , 29 , 0 ) ;
159+
160+ // Act
161+ DateTime nearestHour = dateTime . ToNearestHour ( ) ;
162+
163+ // Assert
164+ nearestHour . Hour . ShouldBe ( expectedHour ) ;
165+ }
166+ }
167+
168+ public class WhenGettingStartOfDay
169+ {
170+ [ Test ]
171+ public void ShouldReturnDateTimeAtMidnight ( )
172+ {
173+ // Arrange
174+ var expectedTime = new TimeSpan ( 0 , 0 , 0 ) ;
175+ var dateTime = new DateTime ( 2021 , 5 , 12 , 9 , 29 , 0 ) ;
176+
177+ // Act
178+ DateTime startOfDay = dateTime . StartOfDay ( ) ;
179+
180+ // Assert
181+ startOfDay . Date . ShouldBe ( dateTime . Date ) ;
182+ startOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
183+ }
184+ }
185+
186+ public class WhenGettingEndOfDay
187+ {
188+ [ Test ]
189+ public void ShouldReturnDateTimeAtJustBeforeMidnight ( )
190+ {
191+ // Arrange
192+ TimeSpan expectedTime = DateTimeConstants . EndOfDayTime ;
193+ var dateTime = new DateTime ( 2021 , 5 , 12 , 9 , 29 , 0 ) ;
194+
195+ // Act
196+ DateTime endOfDay = dateTime . EndOfDay ( ) ;
197+
198+ // Assert
199+ endOfDay . Date . ShouldBe ( dateTime . Date ) ;
200+ endOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
201+ }
202+ }
203+
204+ public class WhenGettingStartOfWeek
205+ {
206+ [ Test ]
207+ public void ShouldReturnFirstDayOfWeekAtMidnight ( )
208+ {
209+ // Arrange
210+ var expectedDate = new DateTime ( 2021 , 5 , 9 ) ;
211+ var expectedTime = new TimeSpan ( 0 , 0 , 0 ) ;
212+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
213+
214+ // Act
215+ DateTime startOfDay = dateTime . StartOfWeek ( ) ;
216+
217+ // Assert
218+ startOfDay . Date . ShouldBe ( expectedDate . Date ) ;
219+ startOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
220+ }
221+ }
222+
223+ public class WhenGettingEndOfWeek
224+ {
225+ [ Test ]
226+ public void ShouldReturnLastDayOfWeekAtJustBeforeMidnight ( )
227+ {
228+ // Arrange
229+ var expectedDate = new DateTime ( 2021 , 5 , 16 ) ;
230+ TimeSpan expectedTime = DateTimeConstants . EndOfDayTime ;
231+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
232+
233+ // Act
234+ DateTime endOfDay = dateTime . EndOfWeek ( ) ;
235+
236+ // Assert
237+ endOfDay . Date . ShouldBe ( expectedDate . Date ) ;
238+ endOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
239+ }
240+ }
241+
242+ public class WhenGettingStartOfMonth
243+ {
244+ [ Test ]
245+ public void ShouldReturnFirstDayOfMonthAtMidnight ( )
246+ {
247+ // Arrange
248+ var expectedDate = new DateTime ( 2021 , 5 , 1 ) ;
249+ var expectedTime = new TimeSpan ( 0 , 0 , 0 ) ;
250+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
251+
252+ // Act
253+ DateTime startOfDay = dateTime . StartOfMonth ( ) ;
254+
255+ // Assert
256+ startOfDay . Date . ShouldBe ( expectedDate . Date ) ;
257+ startOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
258+ }
259+ }
260+
261+ public class WhenGettingEndOfMonth
262+ {
263+ [ Test ]
264+ public void ShouldReturnLastDayOfMonthAtJustBeforeMidnight ( )
265+ {
266+ // Arrange
267+ var expectedDate = new DateTime ( 2021 , 5 , 31 ) ;
268+ TimeSpan expectedTime = DateTimeConstants . EndOfDayTime ;
269+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
270+
271+ // Act
272+ DateTime endOfDay = dateTime . EndOfMonth ( ) ;
273+
274+ // Assert
275+ endOfDay . Date . ShouldBe ( expectedDate . Date ) ;
276+ endOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
277+ }
278+ }
279+
280+ public class WhenGettingStartOfYear
281+ {
282+ [ Test ]
283+ public void ShouldReturnFirstDayOfYearAtMidnight ( )
284+ {
285+ // Arrange
286+ var expectedDate = new DateTime ( 2021 , 1 , 1 ) ;
287+ var expectedTime = new TimeSpan ( 0 , 0 , 0 ) ;
288+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
289+
290+ // Act
291+ DateTime startOfDay = dateTime . StartOfYear ( ) ;
292+
293+ // Assert
294+ startOfDay . Date . ShouldBe ( expectedDate . Date ) ;
295+ startOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
296+ }
297+ }
298+
299+ public class WhenGettingEndOfYear
300+ {
301+ [ Test ]
302+ public void ShouldReturnLastDayOfYearAtJustBeforeMidnight ( )
303+ {
304+ // Arrange
305+ var expectedDate = new DateTime ( 2021 , 12 , 31 ) ;
306+ TimeSpan expectedTime = DateTimeConstants . EndOfDayTime ;
307+ var dateTime = new DateTime ( 2021 , 05 , 12 , 9 , 29 , 0 ) ;
308+
309+ // Act
310+ DateTime endOfDay = dateTime . EndOfYear ( ) ;
311+
312+ // Assert
313+ endOfDay . Date . ShouldBe ( expectedDate . Date ) ;
314+ endOfDay . TimeOfDay . ShouldBe ( expectedTime ) ;
315+ }
316+ }
135317 }
136318}
0 commit comments