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("退出后仍可获取当前用户") } }