39 lines
1.4 KiB
Go
39 lines
1.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"git.pcux.cn/xuans/Smail/config"
|
|
"git.pcux.cn/xuans/Smail/dto/response"
|
|
"git.pcux.cn/xuans/Smail/models"
|
|
"git.pcux.cn/xuans/Smail/services/access"
|
|
"git.pcux.cn/xuans/Smail/session"
|
|
appcontext "git.pcux.cn/xuans/Smail/utils/context"
|
|
"github.com/alexedwards/scs/v2"
|
|
)
|
|
|
|
func TestCompletedLoginSetsAuditActor(t *testing.T) {
|
|
previousConfig, previousSession := config.Instance, session.Instance
|
|
t.Cleanup(func() { config.Instance, session.Instance = previousConfig, previousSession })
|
|
config.Instance = &config.Config{Domain: "example.test"}
|
|
session.Instance = scs.New()
|
|
loaded, err := session.Instance.Load(context.Background(), "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ctx := &appcontext.Context{Context: loaded}
|
|
request := httptest.NewRequest("POST", "https://example.test/api/security/login/verify", nil).WithContext(loaded)
|
|
writer := httptest.NewRecorder()
|
|
completeLoginSession(ctx, writer, request, &models.User{ID: 42, Account: "audit-probe", Role: string(access.RoleSuperAdmin)})
|
|
var result response.Response
|
|
if err := json.Unmarshal(writer.Body.Bytes(), &result); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if result.ErrorNo != 0 || ctx.UserID != 42 || ctx.UserAccount != "audit-probe" || ctx.Role != access.RoleSuperAdmin {
|
|
t.Fatalf("completed login lost audit actor: code=%d id=%d role=%s", result.ErrorNo, ctx.UserID, ctx.Role)
|
|
}
|
|
}
|