diff --git a/Services/TransportConnectionCalculator.cs b/Services/TransportConnectionCalculator.cs index c8bebf2..98d3f16 100644 --- a/Services/TransportConnectionCalculator.cs +++ b/Services/TransportConnectionCalculator.cs @@ -47,36 +47,26 @@ public static class TransportConnectionCalculator // If we have valid connections (arriving before latest arrival time) if (validConnections.Count > 0) { - var sortedValid = validConnections + var bestValidConnection = validConnections .OrderBy(c => c.ArrivalTime) - .ToList(); + .Last(); - var bestValidConnection = sortedValid.Last(); - - // Check if the best valid connection arrives too early (more than maxEarlyArrivalMinutes before shift) - if (bestValidConnection.ArrivalTime < earliestAcceptableTime && lateValidConnections.Count > 0) + if (bestValidConnection.ArrivalTime > earliestAcceptableTime) { - // Return the earliest connection that arrives after latest arrival time but within acceptable range - var sortedLateValid = lateValidConnections - .OrderBy(c => c.ArrivalTime) - .ToList(); - - return sortedLateValid.First(); + return bestValidConnection; } - - return bestValidConnection; } // If no connections arrive before latest arrival time, check if any arrive within acceptable late range if (lateValidConnections.Count > 0) { - var sortedLateValid = lateValidConnections + var bestLateConnection = lateValidConnections .OrderBy(c => c.ArrivalTime) - .ToList(); + .First(); - return sortedLateValid.First(); + return bestLateConnection; } - return null; + return validConnections.FirstOrDefault(); } } \ No newline at end of file diff --git a/ShiftScheduler.Services.Tests/TransportConnectionCalculatorTests.cs b/ShiftScheduler.Services.Tests/TransportConnectionCalculatorTests.cs index 26724dd..c89b81b 100644 --- a/ShiftScheduler.Services.Tests/TransportConnectionCalculatorTests.cs +++ b/ShiftScheduler.Services.Tests/TransportConnectionCalculatorTests.cs @@ -162,6 +162,28 @@ public class TransportConnectionCalculatorTests result.ArrivalTime.ShouldBe(T("2023-12-15T08:05:00")); } + [Fact] + public void FindBestConnectionEnhanced_WithMyCase_ShouldChooseBasedOnTiming() + { + var connections = new List + { + new(arrivalTime: "2025-09-01T11:41:00"), + new(arrivalTime: "2025-09-01T12:41:00"), + new(arrivalTime: "2025-09-01T13:41:00"), + new(arrivalTime: "2025-09-01T14:41:00"), + new(arrivalTime: "2025-09-01T15:41:00") + }; + var shiftStartTime = T("2025-09-01T15:30:00"); + + var result = TransportConnectionCalculator.FindBestConnection( + connections, + new ConnectionPickArgument(shiftStartTime, 10, 60, 15), + loggerMock.Object); + + result.ShouldNotBeNull(); + result.ArrivalTime.ShouldBe(T("2025-09-01T14:41:00")); + } + private DateTimeOffset T(string dateTimeString) { return DateTimeOffset.Parse(dateTimeString);