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