Files
access-handler/db_test.go
2025-10-24 16:29:37 +02:00

181 lines
4.2 KiB
Go

package AccessHandler
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"gitea.tecamino.com/paadi/access-handler/models"
"github.com/gin-gonic/gin"
"github.com/go-playground/assert/v2"
)
func TestAccesshandlerLogin(t *testing.T) {
t.Log("start access handler test")
t.Log("initialize accessHandler")
accessHandler, err := NewAccessHandler(".", nil)
if err != nil {
t.Fatal(err)
}
t.Log("add another user")
err = accessHandler.AddNewUser("guest", "guest@gmail.com", "passwordd1", "admin")
if err != nil {
t.Log(err)
}
t.Log("get user id 1")
result, err := accessHandler.GetUserByKey("user_name", "admin", false)
if err != nil {
t.Fatal(err)
}
t.Log(result)
t.Log("get all users")
result, err = accessHandler.GetUserById(0)
if err != nil {
t.Fatal(err)
}
t.Log(result)
t.Log("get user by key")
result, err = accessHandler.GetUserByKey("password", "passwordd", false)
if err != nil {
t.Fatal(err)
}
t.Log(result)
t.Log("get user by key and like")
result, err = accessHandler.GetUserByKey("user_name", "a*", true)
if err != nil {
t.Fatal(err)
}
t.Log(result)
// var user_name string = "admin1"
// if len(result) > 0 {
// if result[0].Name == user_name {
// user_name = "admin"
// }
// t.Log("update user to ", user_name)
// accessHandler.UpdateUserByKey(models.User{
// Name: user_name,
// }, "user_name", result[0].Name)
// }
t.Log("read user again")
result, err = accessHandler.GetUserByKey("user_name", "a*", true)
if err != nil {
t.Fatal(err)
}
t.Log(result)
// t.Log("delete user id 1")
// err = accessHandler.DeleteUserByKey("user_name", user_name, false)
// if err != nil {
// t.Fatal(err)
// }
t.Log("read user again")
result, err = accessHandler.GetUserById(0)
if err != nil {
t.Fatal(err)
}
t.Log(result)
t.Log("read admin permissions")
result1, err := accessHandler.GetRoleByKey("role", "admin", false)
if err != nil {
t.Fatal(err)
}
t.Log(result1)
}
func TestLoginHandler(t *testing.T) {
gin.SetMode(gin.TestMode)
// Setup your AccessHandler and router
aH, err := NewAccessHandler(".", nil)
if err != nil {
t.Fatal(err)
}
r := gin.Default()
SetMiddlewareLogger(r, aH.GetLogger())
r.POST("/login", aH.Login)
r.POST("/login/refresh", aH.Refresh)
r.GET("/login/me", aH.Me)
r.GET("/logout", aH.Logout)
middleware := r.Group("", aH.AuthMiddleware())
auth := middleware.Group("/members", aH.AuthorizeRole(""))
auth.GET("", func(ctx *gin.Context) {
ctx.JSON(http.StatusOK, "ok")
})
// ---- Step 1: Perform login ----
user := models.User{
Name: "guest",
Password: "passwordd1",
}
jsonBody, _ := json.Marshal(user)
req, _ := http.NewRequest(http.MethodPost, "/login", bytes.NewBuffer(jsonBody))
req.Header.Set("Content-Type", "application/json")
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
t.Log("Login response:", w.Body.String())
assert.Equal(t, http.StatusOK, w.Code)
// ---- Step 2: Extract cookies ----
cookies := w.Result().Cookies()
var accessCookie *http.Cookie
var refreshCookie *http.Cookie
for _, c := range cookies {
switch c.Name {
case "refresh_token":
refreshCookie = c
case "access_token":
accessCookie = c
}
}
if refreshCookie == nil {
t.Fatal("refresh_token cookie not found")
}
type request struct {
Name string
Method string
Path string
Cookie *http.Cookie
}
var requests []request
requests = append(requests,
request{Name: "Refresh", Method: "POST", Path: "/login/refresh", Cookie: refreshCookie},
request{Name: "Me", Method: "GET", Path: "/login/me", Cookie: accessCookie},
request{Name: "Authorization", Method: "GET", Path: "/members", Cookie: accessCookie},
request{Name: "Logout", Method: "GET", Path: "/logout", Cookie: refreshCookie},
)
for _, request := range requests {
req, _ := http.NewRequest(request.Method, request.Path, nil)
if request.Cookie != nil {
req.AddCookie(request.Cookie) // attach refresh_token cookie
}
w := httptest.NewRecorder()
r.ServeHTTP(w, req)
t.Log(request.Name+" response:", w.Body.String())
assert.Equal(t, http.StatusOK, w.Code)
}
}