Scout/pkg/client/auth_test.go
2026-08-30 23:27:30 +08:00

52 lines
1.2 KiB
Go

package client
import (
"context"
"path/filepath"
"testing"
"net/http/httptest"
"scout/internal/httpapi"
"scout/internal/registry"
"scout/internal/users"
)
func TestClientAuthentication(t *testing.T) {
store, err := registry.New(t.TempDir())
if err != nil {
t.Fatal(err)
}
userStore, err := users.New(filepath.Join(t.TempDir(), "users.json"))
if err != nil {
t.Fatal(err)
}
server := httptest.NewServer((&httpapi.Server{Registry: store, Users: userStore}).Handler())
defer server.Close()
api, err := New(server.URL)
if err != nil {
t.Fatal(err)
}
ctx := context.Background()
if _, err := api.Register(ctx, "client@example.com", "客户端用户", "client-pass-123"); err != nil {
t.Fatal(err)
}
login, err := api.Login(ctx, "client@example.com", "client-pass-123")
if err != nil {
t.Fatal(err)
}
if login.Session == "" || login.User.Email != "client@example.com" {
t.Fatalf("登录结果错误: %+v", login)
}
current, err := api.Me(ctx)
if err != nil || current.ID != login.User.ID {
t.Fatalf("当前用户错误: %+v, %v", current, err)
}
if err := api.Logout(ctx); err != nil {
t.Fatal(err)
}
if _, err := api.Me(ctx); err == nil {
t.Fatal("退出后仍可获取当前用户")
}
}