Fix logic
This commit is contained in:
parent
3ad9e48fcd
commit
c7e0f6e84c
2 changed files with 30 additions and 18 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue