Favourites: drag-and-drop reorder per fuel; stored order drives single-widget favourite
This commit is contained in:
@@ -292,6 +292,40 @@ final class FavouriteRefreshTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
final class FavouriteReorderTests: XCTestCase {
|
||||
private func entry(_ id: String, _ fuel: FuelType) -> FavouriteEntry {
|
||||
FavouriteEntry(station: FuelStation(id: id, name: id, brand: "X", address: "", postcode: "", lat: 0, lng: 0, prices: [fuel: 140.0], priceUpdated: nil), fuel: fuel)
|
||||
}
|
||||
|
||||
func testReorderMovesWithinFuelAndKeepsOthersRelativeOrder() {
|
||||
// e10: a, b, c | diesel: d
|
||||
let list = [entry("a", .e10), entry("b", .e10), entry("c", .e10), entry("d", .diesel)]
|
||||
// Move c (index 2) to the front (offset 0) of the e10 list.
|
||||
let moved = FuelStore.reorderedFavourites(list, fuel: .e10, fromOffsets: [2], toOffset: 0)
|
||||
XCTAssertEqual(moved.map(\.station.id), ["c", "a", "b", "d"], "c moves to front; diesel stays last")
|
||||
}
|
||||
|
||||
func testReorderPreservesFuelBlockPosition() {
|
||||
// diesel first block, then e10 block: d, e | a, b, c
|
||||
let list = [entry("d", .diesel), entry("e", .diesel), entry("a", .e10), entry("b", .e10), entry("c", .e10)]
|
||||
// Move a (e10 index 0) to the e10 block end (offset 3 within e10).
|
||||
let moved = FuelStore.reorderedFavourites(list, fuel: .e10, fromOffsets: [0], toOffset: 3)
|
||||
XCTAssertEqual(moved.map(\.station.id), ["d", "e", "b", "c", "a"], "e10 block stays in place after diesel block")
|
||||
}
|
||||
|
||||
func testReorderFirstBecomesSingleWidgetFavourite() {
|
||||
let list = [entry("x", .e10), entry("y", .e10), entry("z", .e10)]
|
||||
let moved = FuelStore.reorderedFavourites(list, fuel: .e10, fromOffsets: [2], toOffset: 0)
|
||||
XCTAssertEqual(moved.first?.station.id, "z", "first stored favourite = single-widget favourite")
|
||||
}
|
||||
|
||||
func testReorderMultipleFuelsUntouched() {
|
||||
let list = [entry("a", .e10), entry("b", .e10), entry("d", .diesel), entry("p", .e5)]
|
||||
let moved = FuelStore.reorderedFavourites(list, fuel: .e10, fromOffsets: [0], toOffset: 2)
|
||||
XCTAssertEqual(moved.map(\.station.id), ["b", "a", "d", "p"], "e10 reorder leaves other fuels' relative order intact")
|
||||
}
|
||||
}
|
||||
|
||||
final class AlertsFuelTests: XCTestCase {
|
||||
func testAlertsFuelRoundTrips() {
|
||||
FuelStore.saveAlertsFuel(.diesel)
|
||||
|
||||
Reference in New Issue
Block a user