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 (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;
}
}
// 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();
}
}

View file

@ -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<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)
{
return DateTimeOffset.Parse(dateTimeString);