package control import ( "bytes" "encoding/json" "net/http" "net/http/httptest" "testing" cfgpkg "github.com/jan/fm-rds-tx/internal/config" ) func TestHealthz(t *testing.T) { srv := NewServer(cfgpkg.Default()) req := httptest.NewRequest(http.MethodGet, "/healthz", nil) rec := httptest.NewRecorder() srv.Handler().ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("unexpected status: %d", rec.Code) } } func TestStatus(t *testing.T) { srv := NewServer(cfgpkg.Default()) req := httptest.NewRequest(http.MethodGet, "/status", nil) rec := httptest.NewRecorder() srv.Handler().ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("unexpected status: %d", rec.Code) } var body map[string]any if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil { t.Fatalf("decode body: %v", err) } if body["service"] != "fm-rds-tx" { t.Fatalf("unexpected service: %v", body["service"]) } } func TestDryRunEndpoint(t *testing.T) { srv := NewServer(cfgpkg.Default()) req := httptest.NewRequest(http.MethodGet, "/dry-run", nil) rec := httptest.NewRecorder() srv.Handler().ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("unexpected status: %d", rec.Code) } var body map[string]any if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil { t.Fatalf("decode body: %v", err) } if body["mode"] != "dry-run" { t.Fatalf("unexpected mode: %v", body["mode"]) } } func TestConfigPatch(t *testing.T) { srv := NewServer(cfgpkg.Default()) body := []byte(`{"toneLeftHz":900,"radioText":"hello world"}`) req := httptest.NewRequest(http.MethodPost, "/config", bytes.NewReader(body)) rec := httptest.NewRecorder() srv.Handler().ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("unexpected status: %d body=%s", rec.Code, rec.Body.String()) } getReq := httptest.NewRequest(http.MethodGet, "/config", nil) getRec := httptest.NewRecorder() srv.Handler().ServeHTTP(getRec, getReq) if getRec.Code != http.StatusOK { t.Fatalf("unexpected status: %d", getRec.Code) } }