Offline banner: label the bundled-dump fallback with its snapshot date
The no-network last resort (bundled real dump) now shows a tappable banner above the tabs — 'Offline data from 15 Aug / Pull to refresh to update prices' — so stale snapshot data is never presented as live. Banner date comes from the dump's own data_updated stamp (FuelStore.offlineDataLabel, ISO 8601 with/without fractional seconds). Cleared on any successful fetch. - BundledDumpProvider.dataUpdatedStamp (JSONSerialization, app target) - ContentView: offlineDataDate state, offlineBanner view (tip-card styling, orange wifi.slash + arrow.clockwise, tap = force refresh), refresh() clears/sets it, -forceOfflineDump QA launch hook (serves the dump and skips auto-refresh so the banner stays up for captures) - Localizable.strings: 3 keys (banner title/subtitle/a11y) - +3 tests: OfflineDataLabelTests (101 total)
This commit is contained in:
@@ -587,3 +587,22 @@ final class PriceDisplayTests: XCTestCase {
|
||||
XCTAssertEqual(FuelStore.priceTextSpoken(100.9), "£1.009")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Offline data banner label
|
||||
|
||||
final class OfflineDataLabelTests: XCTestCase {
|
||||
func testOfflineDataLabelFormatsStampWithFractionalSeconds() {
|
||||
// The bundled dump's real envelope stamp.
|
||||
XCTAssertEqual(FuelStore.offlineDataLabel(from: "2026-08-15T08:46:33.000Z"), "15 Aug")
|
||||
}
|
||||
|
||||
func testOfflineDataLabelToleratesPlainISODate() {
|
||||
XCTAssertEqual(FuelStore.offlineDataLabel(from: "2026-08-15T08:46:33Z"), "15 Aug")
|
||||
}
|
||||
|
||||
func testOfflineDataLabelNilWhenMissingOrUnparseable() {
|
||||
XCTAssertNil(FuelStore.offlineDataLabel(from: nil))
|
||||
XCTAssertNil(FuelStore.offlineDataLabel(from: ""))
|
||||
XCTAssertNil(FuelStore.offlineDataLabel(from: "not-a-date"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user