63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildOAuthMetadataUserID_FallbackWithoutAccountUUID(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
|
|
parsed := &ParsedRequest{
|
|
Model: "claude-sonnet-4-5",
|
|
Stream: true,
|
|
MetadataUserID: "",
|
|
System: nil,
|
|
Messages: nil,
|
|
}
|
|
|
|
account := &Account{
|
|
ID: 123,
|
|
Type: AccountTypeOAuth,
|
|
Extra: map[string]any{}, // intentionally missing account_uuid / claude_user_id
|
|
}
|
|
|
|
fp := &Fingerprint{ClientID: "deadbeef"} // should be used as user id in legacy format
|
|
|
|
got := svc.buildOAuthMetadataUserID(parsed, account, fp)
|
|
require.NotEmpty(t, got)
|
|
|
|
// Legacy format: user_{client}_account__session_{uuid}
|
|
re := regexp.MustCompile(`^user_[a-zA-Z0-9]+_account__session_[a-f0-9-]{36}$`)
|
|
require.True(t, re.MatchString(got), "unexpected user_id format: %s", got)
|
|
}
|
|
|
|
func TestBuildOAuthMetadataUserID_UsesAccountUUIDWhenPresent(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
|
|
parsed := &ParsedRequest{
|
|
Model: "claude-sonnet-4-5",
|
|
Stream: true,
|
|
MetadataUserID: "",
|
|
}
|
|
|
|
account := &Account{
|
|
ID: 123,
|
|
Type: AccountTypeOAuth,
|
|
Extra: map[string]any{
|
|
"account_uuid": "acc-uuid",
|
|
"claude_user_id": "clientid123",
|
|
"anthropic_user_id": "",
|
|
},
|
|
}
|
|
|
|
got := svc.buildOAuthMetadataUserID(parsed, account, nil)
|
|
require.NotEmpty(t, got)
|
|
|
|
// New format: user_{client}_account_{account_uuid}_session_{uuid}
|
|
re := regexp.MustCompile(`^user_clientid123_account_acc-uuid_session_[a-f0-9-]{36}$`)
|
|
require.True(t, re.MatchString(got), "unexpected user_id format: %s", got)
|
|
}
|