Fix logic

This commit is contained in:
Claudio Schaad 2025-09-03 21:28:32 +02:00
parent 3ad9e48fcd
commit c7e0f6e84c
2 changed files with 30 additions and 18 deletions

View file

@ -47,36 +47,26 @@ public static class TransportConnectionCalculator
// If we have valid connections (arriving before latest arrival time) // If we have valid connections (arriving before latest arrival time)
if (validConnections.Count > 0) if (validConnections.Count > 0)
{ {
var sortedValid = validConnections var bestValidConnection = validConnections
.OrderBy(c => c.ArrivalTime) .OrderBy(c => c.ArrivalTime)
.ToList(); .Last();
var bestValidConnection = sortedValid.Last(); if (bestValidConnection.ArrivalTime > earliestAcceptableTime)
// Check if the best valid connection arrives too early (more than maxEarlyArrivalMinutes before shift)
if (bestValidConnection.ArrivalTime < earliestAcceptableTime && lateValidConnections.Count > 0)
{ {
// 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 no connections arrive before latest arrival time, check if any arrive within acceptable late range
if (lateValidConnections.Count > 0) if (lateValidConnections.Count > 0)
{ {
var sortedLateValid = lateValidConnections var bestLateConnection = lateValidConnections
.OrderBy(c => c.ArrivalTime) .OrderBy(c => c.ArrivalTime)
.ToList(); .First();
return sortedLateValid.First(); return bestLateConnection;
} }
return null; return validConnections.FirstOrDefault();
} }
} }

View file

@ -162,6 +162,28 @@ public class TransportConnectionCalculatorTests
result.ArrivalTime.ShouldBe(T("2023-12-15T08:05:00")); result.ArrivalTime.ShouldBe(T("2023-12-15T08:05:00"));
} }
[Fact]
public void FindBestConnectionEnhanced_WithMyCase_ShouldChooseBasedOnTiming()
{
var connections = new List<TransportConnection>
{
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) private DateTimeOffset T(string dateTimeString)
{ {
return DateTimeOffset.Parse(dateTimeString); return DateTimeOffset.Parse(dateTimeString);