82 lines
2.3 KiB
Go
82 lines
2.3 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"inbox/internal/base/timeutil"
|
|
sqlitestore "inbox/internal/store/sqlite"
|
|
)
|
|
|
|
func TestDashboardWorkflowBoardMissingWorkspace(t *testing.T) {
|
|
clock := timeutil.FixedClock{Time: time.Date(2026, 3, 13, 18, 30, 0, 0, time.UTC)}
|
|
store, err := sqlitestore.OpenInMemory(clock)
|
|
if err != nil {
|
|
t.Fatalf("OpenInMemory() error = %v", err)
|
|
}
|
|
defer store.Close()
|
|
|
|
handler := NewHandler(store, clock)
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v2/dashboard/workflow/board?workspace=blog", nil)
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusNotFound {
|
|
t.Fatalf("GET workflow board status = %d body=%s", rec.Code, rec.Body.String())
|
|
}
|
|
|
|
var payload struct {
|
|
Error string `json:"error"`
|
|
}
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil {
|
|
t.Fatalf("decode response: %v", err)
|
|
}
|
|
if !strings.Contains(payload.Error, "workspace not found: blog") {
|
|
t.Fatalf("unexpected error payload: %#v", payload)
|
|
}
|
|
}
|
|
|
|
func TestDashboardRolesWithoutWorkspaceReturnsGlobalRoster(t *testing.T) {
|
|
clock := timeutil.FixedClock{Time: time.Date(2026, 3, 13, 18, 30, 0, 0, time.UTC)}
|
|
store, err := sqlitestore.OpenInMemory(clock)
|
|
if err != nil {
|
|
t.Fatalf("OpenInMemory() error = %v", err)
|
|
}
|
|
defer store.Close()
|
|
|
|
handler := NewHandler(store, clock)
|
|
req := httptest.NewRequest(http.MethodGet, "/api/v2/dashboard/roles", nil)
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, req)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("GET dashboard roles status = %d body=%s", rec.Code, rec.Body.String())
|
|
}
|
|
|
|
var payload struct {
|
|
Roles []struct {
|
|
Name string `json:"name"`
|
|
Pending int `json:"pending"`
|
|
Session any `json:"session"`
|
|
} `json:"roles"`
|
|
}
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil {
|
|
t.Fatalf("decode response: %v", err)
|
|
}
|
|
if len(payload.Roles) != 2 {
|
|
t.Fatalf("expected 2 enabled builtin roles, got %d", len(payload.Roles))
|
|
}
|
|
for _, item := range payload.Roles {
|
|
if item.Pending != 0 {
|
|
t.Fatalf("expected %s pending=0 in global mode, got %d", item.Name, item.Pending)
|
|
}
|
|
if item.Session != nil {
|
|
t.Fatalf("expected %s session=nil in global mode, got %#v", item.Name, item.Session)
|
|
}
|
|
}
|
|
}
|