First release of open core
This commit is contained in:
111
pkg/auth/auth_handlers_test.go
Normal file
111
pkg/auth/auth_handlers_test.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"epigas.gitea.cloud/RiskRancher/core/pkg/datastore"
|
||||
)
|
||||
|
||||
func setupTestAuth(t *testing.T) (*Handler, *sql.DB) {
|
||||
db := datastore.InitDB(":memory:")
|
||||
|
||||
store := datastore.NewSQLiteStore(db)
|
||||
|
||||
h := NewHandler(store)
|
||||
|
||||
return h, db
|
||||
}
|
||||
|
||||
func TestAuthHandlers(t *testing.T) {
|
||||
a, db := setupTestAuth(t)
|
||||
defer db.Close()
|
||||
|
||||
t.Run("Successful Registration", func(t *testing.T) {
|
||||
payload := map[string]string{
|
||||
"email": "admin@RiskRancher.com",
|
||||
"full_name": "Doc Holliday",
|
||||
"password": "SuperSecretPassword123!",
|
||||
"global_role": "Sheriff", // Use a valid role!
|
||||
}
|
||||
body, _ := json.Marshal(payload)
|
||||
|
||||
req := httptest.NewRequest(http.MethodPost, "/api/auth/register", bytes.NewBuffer(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
rr := httptest.NewRecorder()
|
||||
|
||||
a.HandleRegister(rr, req)
|
||||
|
||||
if rr.Code != http.StatusCreated {
|
||||
t.Fatalf("Expected 201 Created for registration, got %d", rr.Code)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Successful Login Issues Cookie", func(t *testing.T) {
|
||||
payload := map[string]string{
|
||||
"email": "admin@RiskRancher.com",
|
||||
"password": "SuperSecretPassword123!",
|
||||
}
|
||||
body, _ := json.Marshal(payload)
|
||||
|
||||
req := httptest.NewRequest(http.MethodPost, "/api/auth/login", bytes.NewBuffer(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
rr := httptest.NewRecorder()
|
||||
|
||||
a.HandleLogin(rr, req)
|
||||
|
||||
if rr.Code != http.StatusOK {
|
||||
t.Fatalf("Expected 200 OK for successful login, got %d", rr.Code)
|
||||
}
|
||||
|
||||
cookies := rr.Result().Cookies()
|
||||
if len(cookies) == 0 {
|
||||
t.Fatalf("Expected a session cookie to be set, but none was found")
|
||||
}
|
||||
if cookies[0].Name != "session_token" {
|
||||
t.Errorf("Expected cookie named 'session_token', got '%s'", cookies[0].Name)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Failed Login Rejects Access", func(t *testing.T) {
|
||||
payload := map[string]string{
|
||||
"email": "admin@RiskRancher.com",
|
||||
"password": "WrongPassword!",
|
||||
}
|
||||
body, _ := json.Marshal(payload)
|
||||
|
||||
req := httptest.NewRequest(http.MethodPost, "/api/auth/login", bytes.NewBuffer(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
rr := httptest.NewRecorder()
|
||||
|
||||
a.HandleLogin(rr, req)
|
||||
|
||||
if rr.Code != http.StatusUnauthorized {
|
||||
t.Fatalf("Expected 401 Unauthorized for wrong password, got %d", rr.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestHandleLogout(t *testing.T) {
|
||||
a, db := setupTestAuth(t)
|
||||
defer db.Close()
|
||||
|
||||
req := httptest.NewRequest(http.MethodPost, "/api/auth/logout", nil)
|
||||
|
||||
cookie := &http.Cookie{
|
||||
Name: SessionCookieName,
|
||||
Value: "fake-session-token-123",
|
||||
}
|
||||
req.AddCookie(cookie)
|
||||
|
||||
rr := httptest.NewRecorder()
|
||||
a.HandleLogout(rr, req)
|
||||
|
||||
if rr.Code != http.StatusOK {
|
||||
t.Fatalf("Expected 200 OK, got %d. Body: %s", rr.Code, rr.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user