fix: resolve travel anchor ID collision for repeat city pairs

Include segment index in travel anchor IDs ("travel:INDEX:from->to")
so Follow Team trips visiting the same city pair multiple times get
unique, independently addressable travel segments. Prevents override
dictionary collisions and incorrect validDayRange lookups.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-11 10:57:53 -06:00
parent 633f7d883f
commit ff6f4b6c2c
12 changed files with 291 additions and 79 deletions

View File

@@ -182,7 +182,7 @@ final class ItineraryTravelConstraintTests: XCTestCase {
}
controller.reloadData(
days: [dayData],
travelValidRanges: ["travel:chicago->detroit": 1...1],
travelValidRanges: ["travel:0:chicago->detroit": 1...1],
itineraryItems: [chicagoGame, travel]
)
@@ -214,7 +214,7 @@ final class ItineraryTravelConstraintTests: XCTestCase {
}
controller.reloadData(
days: [day1, day2, day3],
travelValidRanges: ["travel:chicago->detroit": 2...3],
travelValidRanges: ["travel:0:chicago->detroit": 2...3],
itineraryItems: [travelModelItem]
)
@@ -222,7 +222,7 @@ final class ItineraryTravelConstraintTests: XCTestCase {
// Move travel (row 2) to row 3 (after Day3 header = Day 3)
controller.tableView(controller.tableView, moveRowAt: IndexPath(row: 2, section: 0), to: IndexPath(row: 3, section: 0))
XCTAssertEqual(capturedTravelId, "travel:chicago->detroit")
XCTAssertEqual(capturedTravelId, "travel:0:chicago->detroit")
XCTAssertEqual(capturedDay, 3, "Travel should now be on Day 3")
}
@@ -231,7 +231,7 @@ final class ItineraryTravelConstraintTests: XCTestCase {
func test_moveValidation_travel_snapsToValidDayRange() {
// Given: Travel with valid range Days 2-3
let travel = H.makeTravelSegment(from: "Chicago", to: "Detroit")
let travelId = "travel:chicago->detroit"
let travelId = "travel:0:chicago->detroit"
let travelItem = ItineraryRowItem.travel(travel, dayNumber: 2)
let travelModelItem = H.makeTravelItem(from: "Chicago", to: "Detroit", day: 2, sortOrder: 1.0)