package nws import ( "context" "net/http" "net/http/httptest" "testing" "gitea.maximumdirect.net/ejr/feedkit/config" "gitea.maximumdirect.net/ejr/feedkit/event" ) func TestObservationSourcePollReturnsNoEventsOn304(t *testing.T) { var call int srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { call++ switch call { case 1: w.Header().Set("ETag", `"obs-v1"`) _, _ = w.Write([]byte(`{"id":"obs-1","properties":{"timestamp":"2026-03-28T12:00:00Z"}}`)) case 2: if got := r.Header.Get("If-None-Match"); got != `"obs-v1"` { t.Fatalf("second request If-None-Match = %q", got) } w.WriteHeader(http.StatusNotModified) default: t.Fatalf("unexpected call count %d", call) } })) defer srv.Close() src, err := NewObservationSource(config.SourceConfig{ Name: "NWSObservationTest", Driver: "nws_observation", Mode: config.SourceModePoll, Params: map[string]any{ "url": srv.URL, "user_agent": "test-agent", }, }) if err != nil { t.Fatalf("NewObservationSource() error = %v", err) } first, err := src.Poll(context.Background()) if err != nil { t.Fatalf("first Poll() error = %v", err) } if len(first) != 1 { t.Fatalf("first Poll() len = %d, want 1", len(first)) } if first[0].Kind != event.Kind("observation") { t.Fatalf("first Poll() kind = %q", first[0].Kind) } second, err := src.Poll(context.Background()) if err != nil { t.Fatalf("second Poll() error = %v", err) } if len(second) != 0 { t.Fatalf("second Poll() len = %d, want 0", len(second)) } }