.menu a ist spezifischer als .d-app — die Kacheln bekamen dadurch padding 6px 8px und text-align left statt ihrer eigenen Werte. Das faellt in der HoneyBar auf, nicht auf dem Schreibtisch: dort steht die Schublade in .startmenu und wird spezifisch genug angesprochen. Reihenfolge half nicht, nur Spezifitaet. Dazu ein Waechter: Ein Backtick in einem Kommentar von honeybar.js beendet die Vorlagenzeichenkette mitten im CSS und zerlegt die Datei — zweimal passiert, jetzt bricht der Test.
88 lines
2.5 KiB
Go
88 lines
2.5 KiB
Go
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
|
|
}
|
|
}
|
|
}
|