vibe-proxy/backend/sdk/auth/manager_test.go
2026-08-24 00:10:41 +02:00

111 lines
2.7 KiB
Go

package auth
import (
"context"
"encoding/json"
"os"
"path/filepath"
"testing"
"time"
"github.com/router-for-me/CLIProxyAPI/v7/internal/config"
coreauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"
)
type dummyAuthenticator struct {
provider string
record *coreauth.Auth
}
func (d *dummyAuthenticator) Provider() string {
return d.provider
}
func (d *dummyAuthenticator) Login(ctx context.Context, cfg *config.Config, opts *LoginOptions) (*coreauth.Auth, error) {
return d.record, nil
}
func (d *dummyAuthenticator) RefreshLead() *time.Duration {
return nil
}
func TestManagerLogin_PreservesExistingAuthFileMetadata(t *testing.T) {
authDir := t.TempDir()
fileName := "demo.json"
filePath := filepath.Join(authDir, fileName)
// Pre-populate existing auth file with custom settings
existing := map[string]any{
"type": "demo",
"email": "user@example.com",
"access_token": "old-token",
"prefix": "my-prefix",
"websockets": false,
"note": "important note",
"weight": float64(10),
}
raw, errMarshal := json.Marshal(existing)
if errMarshal != nil {
t.Fatalf("marshal error: %v", errMarshal)
}
if errWrite := os.WriteFile(filePath, raw, 0o600); errWrite != nil {
t.Fatalf("write error: %v", errWrite)
}
newRecord := &coreauth.Auth{
ID: fileName,
FileName: fileName,
Provider: "demo",
Metadata: map[string]any{
"type": "demo",
"email": "user@example.com",
"access_token": "new-token",
},
}
store := NewFileTokenStore()
store.SetBaseDir(authDir)
auth := &dummyAuthenticator{
provider: "demo",
record: newRecord,
}
mgr := NewManager(store, auth)
cfg := &config.Config{
AuthDir: authDir,
}
_, savedPath, errLogin := mgr.Login(context.Background(), "demo", cfg, nil)
if errLogin != nil {
t.Fatalf("Login error: %v", errLogin)
}
if savedPath != filePath {
t.Fatalf("savedPath = %s, want %s", savedPath, filePath)
}
savedRaw, errRead := os.ReadFile(filePath)
if errRead != nil {
t.Fatalf("ReadFile error: %v", errRead)
}
var saved map[string]any
if errUnmarshal := json.Unmarshal(savedRaw, &saved); errUnmarshal != nil {
t.Fatalf("Unmarshal error: %v", errUnmarshal)
}
if saved["access_token"] != "new-token" {
t.Errorf("access_token = %v, want new-token", saved["access_token"])
}
if saved["prefix"] != "my-prefix" {
t.Errorf("prefix = %v, want my-prefix", saved["prefix"])
}
if saved["websockets"] != false {
t.Errorf("websockets = %v, want false", saved["websockets"])
}
if saved["note"] != "important note" {
t.Errorf("note = %v, want important note", saved["note"])
}
if saved["weight"] != float64(10) {
t.Errorf("weight = %v, want 10", saved["weight"])
}
}