mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-15 23:22:59 +08:00
65 lines
2.4 KiB
Go
65 lines
2.4 KiB
Go
//go:build unit
|
|
|
|
package service
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/config"
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/claude"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetClaudeCodeClientVersionPriority(t *testing.T) {
|
|
for _, tt := range []struct {
|
|
name string
|
|
manual string
|
|
synced string
|
|
want string
|
|
}{
|
|
{name: "手动值优先", manual: "2.1.280", synced: "2.1.281", want: "2.1.280"},
|
|
{name: "归一化手动值", manual: " v2.1.280 ", synced: "2.1.281", want: "2.1.280"},
|
|
{name: "跟随同步值", synced: "2.1.281", want: "2.1.281"},
|
|
{name: "无效手动值回退", manual: "invalid", synced: "2.1.281", want: "2.1.281"},
|
|
{name: "无效同步值回退", synced: "2.1.9", want: claude.CLIVersion()},
|
|
{name: "未配置时回退", want: claude.CLIVersion()},
|
|
} {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
repo := &authSourceDefaultsRepoStub{values: map[string]string{
|
|
SettingKeyClaudeCodeClientVersion: tt.manual,
|
|
SettingKeyClaudeCodeClientVersionSynced: tt.synced,
|
|
}}
|
|
svc := NewSettingService(repo, &config.Config{})
|
|
require.Equal(t, tt.want, svc.GetClaudeCodeClientVersion(context.Background()))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUpdateSettingsClaudeCodeVersionTakesEffectImmediately(t *testing.T) {
|
|
ctx := context.Background()
|
|
repo := &authSourceDefaultsRepoStub{values: map[string]string{
|
|
SettingKeyClaudeCodeClientVersionSynced: "2.1.281",
|
|
}}
|
|
svc := NewSettingService(repo, &config.Config{})
|
|
resetGatewayForwardingSettingsCacheForTest(t)
|
|
defer svc.refreshCachedSettings(&SystemSettings{})
|
|
require.Equal(t, "2.1.281", svc.GetClaudeCodeClientVersion(ctx))
|
|
|
|
settings := &SystemSettings{
|
|
ClaudeCodeClientVersion: "2.1.280",
|
|
ClaudeCodeVersionAutoSyncEnabled: true,
|
|
}
|
|
require.NoError(t, svc.UpdateSettings(ctx, settings))
|
|
require.Equal(t, "2.1.280", svc.GetClaudeCodeClientVersion(ctx), "保存手动版本后应立即生效")
|
|
require.NotContains(t, repo.updates, SettingKeyClaudeCodeClientVersionSynced)
|
|
require.Equal(t, "2.1.281", repo.values[SettingKeyClaudeCodeClientVersionSynced])
|
|
|
|
// 清空手动值并关闭后续同步时,仍保留并使用已有同步值。
|
|
settings.ClaudeCodeClientVersion = ""
|
|
settings.ClaudeCodeVersionAutoSyncEnabled = false
|
|
require.NoError(t, svc.UpdateSettings(ctx, settings))
|
|
require.Equal(t, "2.1.281", svc.GetClaudeCodeClientVersion(ctx))
|
|
require.Equal(t, "false", repo.values[SettingKeyClaudeCodeVersionAutoSyncEnabled])
|
|
}
|