Files
mats 5d8bbcd756
Build and Publish / Metadata (push) Successful in 12s
Build and Publish / BuildAndDeployAmd64 (push) Successful in 2m2s
display notifications
2026-09-23 10:58:42 +02:00

42 lines
1.1 KiB
Go

package alerts
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
"git.tornberg.me/go-otel/internal/features"
)
func TestAlwaysOnDisplayCreatesAndUpdatesSession(t *testing.T) {
var paths []string
var bodies []map[string]any
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
paths = append(paths, r.URL.Path)
var body map[string]any
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
t.Fatal(err)
}
bodies = append(bodies, body)
if r.URL.Path == "/api/sessions" {
_, _ = w.Write([]byte(`{"id":"session-1"}`))
}
}))
defer srv.Close()
a := NewAlert(features.Spike{Service: "orders", ErrorCount: 5}, time.Now())
if err := (&AlwaysOnDisplay{URL: srv.URL}).Send(context.Background(), a); err != nil {
t.Fatal(err)
}
if strings.Join(paths, ",") != "/api/sessions,/api/sessions/session-1/status,/api/sessions/session-1/log" {
t.Fatalf("paths = %v", paths)
}
if bodies[0]["name"] != "LOW alert: orders" || bodies[1]["status"] == "" || bodies[2]["level"] != "info" {
t.Fatalf("bodies = %+v", bodies)
}
}