Files
tomswallapi/internal/server/status_test.go
T
unkin-agent f2197c2189
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
Accept applied/reverted/failed in device status reports
2026-10-05 13:52:07 +11:00

46 lines
1.2 KiB
Go

package server
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.unkin.net/unkin/tomswallapi/internal/model"
)
func TestStatusReportNormalize(t *testing.T) {
tests := []struct {
in model.ApplyStatus
want model.ApplyStatus
wantErr bool
}{
{in: "", want: model.StatusApplied},
{in: model.StatusApplied, want: model.StatusApplied},
{in: model.StatusReverted, want: model.StatusReverted},
{in: model.StatusFailed, want: model.StatusFailed},
{in: "rolledback", wantErr: true},
}
for _, tt := range tests {
r := model.StatusReport{Status: tt.in, Generation: 3}
err := r.Normalize()
if (err != nil) != tt.wantErr || (!tt.wantErr && r.Status != tt.want) {
t.Errorf("Normalize(%q) = %q, %v", tt.in, r.Status, err)
}
}
}
func TestHandleDeviceStatusRejectsBadPayload(t *testing.T) {
s := &Server{} // nil store: a 400 must return before any DB access
for _, body := range []string{
`{"status":"rolledback","generation":3}`,
`{"generation":3,"bogus":1}`,
} {
rec := httptest.NewRecorder()
s.handleDeviceStatus(rec, httptest.NewRequest(http.MethodPost, "/", strings.NewReader(body)))
if rec.Code != http.StatusBadRequest {
t.Errorf("%s: got %d, want 400", body, rec.Code)
}
}
}