package weather import ( "encoding/json" "net/http" "net/http/httptest" "strings" "testing" ) // FakeFuerTest gibt einen Dienst, der einen erfundenen Wetterserver befragt. // // Steht bewusst nicht in der _test.go: Auch die Server-Tests im Wurzelpaket // brauchen ihn, und kein Test in diesem Projekt fragt je wirklich bei // Open-Meteo an — das wäre langsam, unzuverlässig und benutzte einen fremden // Dienst für unsere Testläufe. func FakeFuerTest(t *testing.T, code int, grad float64) *Dienst { return fake(t, code, grad, false) } // KaputtFuerTest stellt einen Dienst, der nicht antwortet — für den Fall, den // die Oberfläche seit dem Widget-Rahmen anders behandelt als „nichts da". func KaputtFuerTest(t *testing.T) *Dienst { return fake(t, 0, 0, true) } func fake(t *testing.T, code int, grad float64, kaputt bool) *Dienst { t.Helper() srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if kaputt { w.WriteHeader(http.StatusInternalServerError) return } if strings.Contains(r.URL.Path, "search") { json.NewEncoder(w).Encode(map[string]any{"results": []map[string]any{ {"name": "Köln", "country": "Deutschland", "admin1": "Nordrhein-Westfalen", "latitude": 50.938, "longitude": 6.96}, }}) return } json.NewEncoder(w).Encode(map[string]any{"current": map[string]any{ "temperature_2m": grad, "weather_code": code, }}) })) t.Cleanup(srv.Close) d := Neu() d.wetterURL = srv.URL + "/forecast" d.sucheURL = srv.URL + "/search" return d }