remindwall / RWPureSwift / Tests / EditSettingsNewTests / BusSettings / AddDriveTests.swift
Back to remindwall — Current RemindWall
import ComposableArchitecture
import Dao
import DependenciesTestSupport
import Foundation
import Testing
import TrafficAPI
@testable import EditSettingsNew_BusSettings
@MainActor
@Suite("AddDrive Feature Tests", .dependencies {
$0.defaultDatabase = try! $0.appDatabase()
$0.uuid = .incrementing
})
struct AddDriveTests {
@Test("search loads results; selecting fills the label")
func searchAndSelect() async {
let store = TestStore(initialState: AddDriveFeature.State(sortOrder: 0)) {
AddDriveFeature()
} withDependencies: {
$0.placeSearch.search = { _ in [schoolPlace] }
}
await store.send(.queryChanged("maple")) {
$0.query = "maple"
}
await store.send(.searchTapped) {
$0.isSearching = true
}
await store.receive(\._resultsLoaded) {
$0.isSearching = false
$0.results = [schoolPlace]
}
await store.send(.placeSelected(schoolPlace)) {
$0.selectedPlace = schoolPlace
$0.label = "Maple Elementary"
}
#expect(store.state.canSave)
}
@Test("save emits a draft carrying coords, label and normal minutes")
func saveDraft() async {
var state = AddDriveFeature.State(sortOrder: 3)
state.selectedPlace = schoolPlace
state.label = "School run"
state.normalMinutes = 12
let store = TestStore(initialState: state) {
AddDriveFeature()
}
store.exhaustivity = .off
await store.send(.saveButtonTapped)
await store.receive(.delegate(.saveRoute(
MonitoredRoute.Draft(
label: "School run",
destinationLatitude: 47.5423, destinationLongitude: -122.3866,
destinationName: "Maple Elementary", normalMinutes: 12, sortOrder: 3,
window: nil, enabled: true
)
)))
}
@Test("a failed search surfaces the error, an empty one says so")
func searchFailures() async {
let store = TestStore(initialState: AddDriveFeature.State(sortOrder: 0)) {
AddDriveFeature()
} withDependencies: {
$0.placeSearch.search = { _ in [] }
}
await store.send(.queryChanged("nowhere")) { $0.query = "nowhere" }
await store.send(.searchTapped) { $0.isSearching = true }
await store.receive(\._resultsLoaded) {
$0.isSearching = false
$0.errorMessage = "No places found"
}
}
}
private let schoolPlace = FoundPlace(
id: "p1", name: "Maple Elementary", address: "402 School Rd, Seattle",
latitude: 47.5423, longitude: -122.3866
)