package main import ( "encoding/json" "net/http" "net/http/httptest" "os" "strings" "testing" "honeyos/internal/store" "honeyos/internal/weather" ) // Ohne eingestellten Ort ist 204 die richtige Antwort: kein Fehler, nur nichts // zu zeigen. Die Leiste lässt das Symbol dann weg, statt etwas zu melden. func TestOhneOrtGibtEsKeinWetter(t *testing.T) { s := newTestServer(t, "") // ohne Anbieter: offener Betrieb, kein Anmelden nötig s.wetter = weather.FakeFuerTest(t, 0, 20) rec := httptest.NewRecorder() s.routes().ServeHTTP(rec, httptest.NewRequest("GET", "/api/weather", nil)) if rec.Code != http.StatusNoContent { t.Fatalf("ohne Ort erwartet 204, bekam %d", rec.Code) } } func TestMitOrtKommtDasWetter(t *testing.T) { s := newTestServer(t, "") s.wetter = weather.FakeFuerTest(t, 3, 8.6) if err := s.store.SetSettings(store.LocalSub, map[string]string{ "weatherCity": "Köln", "weatherLat": "50.938", "weatherLon": "6.96", }); err != nil { t.Fatal(err) } rec := httptest.NewRecorder() s.routes().ServeHTTP(rec, httptest.NewRequest("GET", "/api/weather", nil)) if rec.Code != http.StatusOK { t.Fatalf("erwartet 200, bekam %d: %s", rec.Code, rec.Body) } var w weather.Wetter json.Unmarshal(rec.Body.Bytes(), &w) if w.Ort != "Köln" || w.Glyph != "wolke" { t.Fatalf("falsches Wetter: %+v", w) } } // Die HoneyBar bringt ihr CSS und ihr Markup in Vorlagenzeichenketten mit. // Ein Backtick in einem Kommentar beendet die Zeichenkette mittendrin — die // Datei ist dann kaputt, und zwar nur in der HoneyBar, nicht auf dem // Schreibtisch. Genau das ist zweimal passiert; deshalb dieser Wächter. func TestHoneyBarOhneBacktickInKommentaren(t *testing.T) { b, err := os.ReadFile("web/honeybar/honeybar.js") if err != nil { t.Fatal(err) } src := string(b) imBlock := false for nr, zeile := range strings.Split(src, "\n") { rest := zeile for { if imBlock { ende := strings.Index(rest, "*/") if ende < 0 { if strings.Contains(rest, "`") { t.Errorf("Zeile %d: Backtick in einem Kommentar — das beendet die Vorlagenzeichenkette:\n %s", nr+1, strings.TrimSpace(zeile)) } break } if strings.Contains(rest[:ende], "`") { t.Errorf("Zeile %d: Backtick in einem Kommentar — das beendet die Vorlagenzeichenkette:\n %s", nr+1, strings.TrimSpace(zeile)) } rest = rest[ende+2:] imBlock = false continue } start := strings.Index(rest, "/*") if start < 0 { break } rest = rest[start+2:] imBlock = true } } }