Retire the Best Value proximity alert option; move Key sheet copy into a tested model
- Alerts: drop the alert-type picker and the Best Value alert path, so proximity alerts always follow the cheapest station. A stored `bestValue` selection now falls back to cheapest when loaded. - Key sheet: the price-rating, savings, station-label and favourite wording comes from `KeySheetContent` in Shared/FuelSavings.swift — a Foundation-only model with tests that pin the exact meaning of each indicator — and the sheet is built from that model rather than inline strings. - BACKLOG: record the plan to restore Best Value proximity alerts behind one shared evaluator (user-location baseline, a single disclosed qualification rule, and real/Test alert parity). - Bump CURRENT_PROJECT_VERSION to 29.
This commit is contained in:
@@ -257,3 +257,39 @@ final class StationRecommendationBadgeTests: XCTestCase {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
final class KeySheetContentTests: XCTestCase {
|
||||
func testPriceRatingsExplainTheImplementedRAGBoundaries() {
|
||||
XCTAssertEqual(KeySheetContent.priceRatings, [
|
||||
.init(label: "Good price", description: "Within 1.5p/L of the cheapest."),
|
||||
.init(label: "Okay", description: "More than 1.5p/L, up to 4p/L above the cheapest."),
|
||||
.init(label: "Pricey", description: "More than 4p/L above the cheapest.")
|
||||
])
|
||||
}
|
||||
|
||||
func testSavingsExplainVerdictsWithoutImplyingMinimumSavingQualification() {
|
||||
XCTAssertEqual(KeySheetContent.savings, [
|
||||
.init(label: "Saves", description: "You’ll save money compared with your closest station, including travel costs."),
|
||||
.init(label: "Break even", description: "The saving or extra cost is negligible."),
|
||||
.init(label: "Costs more", description: "Filling up here costs more than at your closest station, including travel.")
|
||||
])
|
||||
XCTAssertFalse(KeySheetContent.savings.contains { $0.label == "Small saving" })
|
||||
}
|
||||
|
||||
func testStationLabelsDescribeTheCurrentQualificationAndRangeRules() {
|
||||
XCTAssertEqual(KeySheetContent.stationLabels, [
|
||||
.init(label: "BEST VALUE", description: "Meets your minimum saving after travel costs."),
|
||||
.init(label: "CHEAPEST", description: "The lowest fuel price per litre within your selected range."),
|
||||
.init(label: "CLOSEST", description: "The nearest station by journey distance."),
|
||||
.init(label: "TOP", description: "The cheapest station in your Favourites for the selected fuel.")
|
||||
])
|
||||
}
|
||||
|
||||
func testFavouriteAndHelpCopyRemainPinned() {
|
||||
XCTAssertEqual(
|
||||
KeySheetContent.favourite,
|
||||
.init(label: "Favourites", description: "Star a station to save it to your Favourites.")
|
||||
)
|
||||
XCTAssertEqual(KeySheetContent.helpTitle, "How does Best Value work?")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,3 +31,12 @@ final class FuelStoreBestValueThresholdTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final class FuelStoreAlertModeTests: XCTestCase {
|
||||
func testLegacyBestValueSelectionLoadsAsCheapest() {
|
||||
FuelStore.saveAlertsMode(.bestValue)
|
||||
defer { FuelStore.saveAlertsMode(.cheapest) }
|
||||
|
||||
XCTAssertEqual(FuelStore.loadAlertsMode(), .cheapest)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user