package apis import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" "strings" "testing" ) func TestInitAuthEndpoints_authSignin(t *testing.T) { _, err := InitUser("admin", "password") if err != nil { t.Fatal(err) } r := gin.Default() SetupRouter(r, nil) reqBody := loginRequest{Username: "admin", Password: "password"} strReqBody, _ := json.Marshal(reqBody) w := httptest.NewRecorder() req, _ := http.NewRequest("POST", "/gui/auth/signin", strings.NewReader(string(strReqBody))) r.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) assert.JSONEq(t, `{"valid": true}`, w.Body.String()) setCookie := w.Header().Get("Set-Cookie") assert.True(t, strings.Contains(setCookie, "CLORTHO_AUTH=")) } func TestInitAuthEndpoints_authSignout(t *testing.T) { _, err := InitUser("admin", "admin") if err != nil { t.Fatal(err) } r := gin.Default() SetupRouter(r, nil) reqBody := loginRequest{Username: "admin", Password: "admin"} strReqBody, _ := json.Marshal(reqBody) w := httptest.NewRecorder() req, _ := http.NewRequest("POST", "/gui/auth/signout", strings.NewReader(string(strReqBody))) r.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) assert.JSONEq(t, `{}`, w.Body.String()) setCookie := w.Header().Get("Set-Cookie") assert.True(t, strings.Contains(setCookie, "CLORTHO_AUTH=")) } func TestInitAuthEndpoints_getMe(t *testing.T) { user, err := InitUser("admin", "password") if err != nil { t.Fatal(err) } r := gin.Default() SetupRouter(r, MockAuthMiddleware(*user)) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/gui/auth/me", nil) r.ServeHTTP(w, req) strUser, _ := json.Marshal(user) assert.Equal(t, 200, w.Code) assert.JSONEq(t, fmt.Sprintf(`{"loggedIn": true, "user": %s}`, strUser), w.Body.String()) }