chore: initial commit of ai site platform
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
78
platform/internal/authx/authx_test.go
Normal file
78
platform/internal/authx/authx_test.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package authx_test
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"aijianzhan/platform/internal/authx"
|
||||
)
|
||||
|
||||
func TestIssueAndParseToken(t *testing.T) {
|
||||
cfg := authx.JWTConfig{AccessSecret: "test-secret", AccessExpire: 3600}
|
||||
tok, exp, err := authx.IssueToken(cfg, 9, 42, "owner", 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if tok == "" || exp <= 0 {
|
||||
t.Fatal("empty token")
|
||||
}
|
||||
claims, err := authx.ParseToken(cfg, tok)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if claims.TenantID != 9 || claims.UserID != 42 {
|
||||
t.Fatalf("claims mismatch: %+v", claims)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMiddlewareRequiresJWT(t *testing.T) {
|
||||
cfg := authx.JWTConfig{AccessSecret: "test-secret", AccessExpire: 3600}
|
||||
mw := authx.Middleware(cfg, false)
|
||||
called := false
|
||||
h := mw(func(w http.ResponseWriter, r *http.Request) {
|
||||
called = true
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
|
||||
req := httptest.NewRequest(http.MethodGet, "/x", nil)
|
||||
rr := httptest.NewRecorder()
|
||||
h(rr, req)
|
||||
if rr.Code != http.StatusUnauthorized || called {
|
||||
t.Fatalf("expected 401 without token, got %d called=%v", rr.Code, called)
|
||||
}
|
||||
|
||||
tok, _, err := authx.IssueToken(cfg, 1, 2, "owner", 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req2 := httptest.NewRequest(http.MethodGet, "/x", nil)
|
||||
req2.Header.Set("Authorization", "Bearer "+tok)
|
||||
rr2 := httptest.NewRecorder()
|
||||
h(rr2, req2)
|
||||
if rr2.Code != http.StatusOK || !called {
|
||||
t.Fatalf("expected 200 with token, got %d", rr2.Code)
|
||||
}
|
||||
if authx.TenantID(req2.Context()) != 0 {
|
||||
// context is on the request passed to next; check via handler
|
||||
}
|
||||
}
|
||||
|
||||
func TestMiddlewareInjectsClaims(t *testing.T) {
|
||||
cfg := authx.JWTConfig{AccessSecret: "test-secret", AccessExpire: 3600}
|
||||
tok, _, _ := authx.IssueToken(cfg, 7, 8, "editor", 0)
|
||||
mw := authx.Middleware(cfg, false)
|
||||
var gotTenant, gotUser int64
|
||||
h := mw(func(w http.ResponseWriter, r *http.Request) {
|
||||
gotTenant = authx.TenantID(r.Context())
|
||||
gotUser = authx.UserID(r.Context())
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
req := httptest.NewRequest(http.MethodGet, "/x", nil)
|
||||
req.Header.Set("Authorization", "Bearer "+tok)
|
||||
rr := httptest.NewRecorder()
|
||||
h(rr, req)
|
||||
if gotTenant != 7 || gotUser != 8 {
|
||||
t.Fatalf("got tenant=%d user=%d", gotTenant, gotUser)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user