using Core.Parsers.EventOccurrence; using NUnit.Framework; namespace Tests.Parsers.EventOccurrence; [TestFixture] public class TimeParser_Tests { [Test] public void Parse_NOON_Returns12PM() { // Act var result = TimeParser.Parse("NOON"); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(12, 0, 0))); } [Test] public void Parse_TBD_ReturnsMidnight() { // Act var result = TimeParser.Parse("TBD"); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0))); } [Test] public void Parse_TBD_CaseInsensitive_ReturnsMidnight() { // Act var result = TimeParser.Parse("tbd"); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0))); } [Test] public void Parse_AMTime_ReturnsCorrectTime() { // Act var result = TimeParser.Parse("10:30 a.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0))); } [Test] public void Parse_PMTime_ReturnsCorrectTime() { // Act var result = TimeParser.Parse("3:45 p.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(15, 45, 0))); } [Test] public void Parse_TimeRange_ExtractsStartTime() { // Act var result = TimeParser.Parse("10:00 a.m. - 12:00 p.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(10, 0, 0))); } [Test] public void Parse_TimeRangeWithNOON_ExtractsStartTime() { // Act var result = TimeParser.Parse("10:30 a.m. - NOON"); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0))); } [Test] public void Parse_TimeWithoutMinutes_ReturnsCorrectTime() { // Act var result = TimeParser.Parse("3 p.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(15, 0, 0))); } [Test] public void Parse_TimeWithoutColon_ReturnsCorrectTime() { // Act var result = TimeParser.Parse("1030 a.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0))); } [Test] public void Parse_12PM_Returns12PM_NotMidnight() { // Act var result = TimeParser.Parse("12:00 p.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(12, 0, 0))); } [Test] public void Parse_12AM_ReturnsMidnight() { // Act var result = TimeParser.Parse("12:00 a.m."); // Assert Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0))); } [Test] public void Parse_InvalidFormat_ThrowsFormatException() { // Act & Assert Assert.Throws(() => TimeParser.Parse("invalid time format")); } [Test] public void ExtractStartTime_Range_ReturnsStartTime() { // Act var result = TimeParser.ExtractStartTime("10:00 a.m. - 12:00 p.m."); // Assert Assert.That(result, Is.EqualTo("10:00 a.m.")); } [Test] public void ExtractStartTime_NoRange_ReturnsOriginal() { // Act var result = TimeParser.ExtractStartTime("3:00 p.m."); // Assert Assert.That(result, Is.EqualTo("3:00 p.m.")); } [Test] public void ExtractStartTime_RangeWithNOON_ReturnsStartTime() { // Act var result = TimeParser.ExtractStartTime("10:30 a.m. - NOON"); // Assert Assert.That(result, Is.EqualTo("10:30 a.m.")); } }