Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
2.8 kB · 111 lines
Go
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112package 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"]) }}