All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
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))
|
|
}
|
|
}
|