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 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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue