DateTimeTests.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. namespace DesktopClock.Tests;
  3. public class DateTimeTests
  4. {
  5. [Theory]
  6. [InlineData("2024-07-15T00:00:00Z", "00:00:00")]
  7. [InlineData("2024-07-15T00:00:00Z", "01:00:00")]
  8. [InlineData("0001-01-01T00:00:00Z", "00:00:00")]
  9. public void ToDateTimeOffset_ShouldConvertDateTimeToExpectedOffset(string dateTimeString, string offsetString)
  10. {
  11. // Arrange
  12. var dateTime = DateTime.Parse(dateTimeString);
  13. var offset = TimeSpan.Parse(offsetString);
  14. // Act
  15. var dateTimeOffset = dateTime.ToDateTimeOffset(offset);
  16. // Assert
  17. Assert.Equal(new DateTimeOffset(dateTime.Ticks, offset), dateTimeOffset);
  18. }
  19. [Theory]
  20. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:30:45.456Z", true)] // Different millisecond
  21. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:30:46.123Z", false)] // Different second
  22. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:31:45.123Z", false)] // Different minute
  23. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T13:30:45.123Z", false)] // Different hour
  24. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-19T12:30:45.123Z", false)] // Different day
  25. [InlineData("2024-07-18T12:30:45.123Z", "2024-08-18T12:30:45.123Z", false)] // Different month
  26. [InlineData("2024-07-18T12:30:45.123Z", "2025-07-18T12:30:45.123Z", false)] // Different year
  27. public void AreEqualExcludingMilliseconds(string dt1String, string dt2String, bool expected)
  28. {
  29. // Arrange
  30. var dt1 = DateTimeOffset.Parse(dt1String);
  31. var dt2 = DateTimeOffset.Parse(dt2String);
  32. // Act
  33. var result = dt1.AreEqualExcludingMilliseconds(dt2);
  34. // Assert
  35. Assert.Equal(expected, result);
  36. }
  37. [Theory]
  38. [InlineData("2024-07-18T12:30:00Z", "2024-07-18T12:30:00Z", 60, true)] // Countdown reached
  39. [InlineData("2024-07-18T12:29:00Z", "2024-07-18T12:30:00Z", 60, false)] // Not yet reached, not on interval
  40. [InlineData("2024-07-18T12:30:30Z", "2024-07-18T12:30:01Z", 30, true)] // On interval
  41. [InlineData("2024-07-18T12:30:01Z", "2024-07-18T12:30:00Z", 30, true)] // Countdown on interval
  42. public void IsOnInterval(string dtString, string countdownToString, int intervalSeconds, bool expected)
  43. {
  44. // Arrange
  45. var dateTime = DateTimeOffset.Parse(dtString);
  46. var countdownTo = DateTimeOffset.Parse(countdownToString);
  47. var interval = TimeSpan.FromSeconds(intervalSeconds);
  48. // Act
  49. var result = DateTimeUtil.IsOnInterval(dateTime, countdownTo, interval);
  50. // Assert
  51. Assert.Equal(expected, result);
  52. }
  53. [Theory]
  54. [InlineData("dddd, MMMM dd", "Monday, January 01")]
  55. [InlineData("yyyy-MM-dd", "2024-01-01")]
  56. [InlineData("HH:mm:ss", "00:00:00")]
  57. [InlineData("MMMM dd, yyyy", "January 01, 2024")]
  58. public void FromFormat_CreatesCorrectExample(string format, string expected)
  59. {
  60. // Arrange
  61. var dateTimeOffset = new DateTime(2024, 01, 01);
  62. // Act
  63. var dateFormatExample = DateFormatExample.FromFormat(format, dateTimeOffset);
  64. // Assert
  65. Assert.Equal(format, dateFormatExample.Format);
  66. Assert.Equal(expected, dateFormatExample.Example);
  67. }
  68. }