package httpapi_test import ( "context" "net/http" "net/http/httptest" "testing" "git.az-it.net/az/morz-infoboard/server/backend/internal/httpapi" "git.az-it.net/az/morz-infoboard/server/backend/internal/reqcontext" "git.az-it.net/az/morz-infoboard/server/backend/internal/store" ) func userCtx(role string) context.Context { return reqcontext.WithUser(context.Background(), &store.User{Role: role}) } func TestRequireNotRestricted_blocks_restricted(t *testing.T) { req := httptest.NewRequest(http.MethodPost, "/", nil).WithContext(userCtx("restricted")) rr := httptest.NewRecorder() httpapi.RequireNotRestricted(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Fatal("should not be called") })).ServeHTTP(rr, req) if rr.Code != http.StatusForbidden { t.Fatalf("expected 403, got %d", rr.Code) } } func TestRequireNotRestricted_allows_screen_user(t *testing.T) { req := httptest.NewRequest(http.MethodPost, "/", nil).WithContext(userCtx("screen_user")) rr := httptest.NewRecorder() called := false httpapi.RequireNotRestricted(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { called = true })).ServeHTTP(rr, req) if !called { t.Fatal("expected next to be called") } } func TestRequireNotRestricted_allows_admin(t *testing.T) { req := httptest.NewRequest(http.MethodPost, "/", nil).WithContext(userCtx("admin")) rr := httptest.NewRecorder() called := false httpapi.RequireNotRestricted(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { called = true })).ServeHTTP(rr, req) if !called { t.Fatal("expected next to be called") } } func TestRequireNotRestricted_allows_no_user(t *testing.T) { req := httptest.NewRequest(http.MethodPost, "/", nil) rr := httptest.NewRecorder() called := false httpapi.RequireNotRestricted(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { called = true })).ServeHTTP(rr, req) if !called { t.Fatal("no user in context — RequireAuth handles that, this middleware passes through") } }