mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-08 19:27:14 +00:00
9f76a66dcf
* feat(settings): add subInfoNodeEnable and status template settings * feat(sub): add dummy info node and status configs for raw links * feat(sub): support dummy info node in clash and json subscriptions * feat(ui): add subscription info node switch and status templates to settings * style: apply gofumpt formatting * fix(sub): address review feedback on subscription info node - Restore GetSubs contract to avoid unintended remark expansions on non-subscription-body calls. - Exclude dummy info node from Clash PROXY select group when active server nodes exist. - Track hasEnabledClient and set traffic.Enable in JSON and Clash paths so status tokens evaluate correctly. - Deterministically sort client emails across subscriptions before selecting primaryEmail. - Consolidate duplicated info-node evaluation logic into resolveInfoNodeRemark helper. - Remove redundant pure-getter test from setting_sub_info_node_test.go. Co-Authored-By: Claude Code <noreply@anthropic.com> --------- Co-authored-by: Claude Code <noreply@anthropic.com>
45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package service
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSubInfoNodeSettingsDefaultsAndPersists(t *testing.T) {
|
|
setupSettingTestDB(t)
|
|
s := &SettingService{}
|
|
|
|
settings, err := s.GetAllSetting()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if settings.SubInfoNodeEnable {
|
|
t.Fatal("expected default SubInfoNodeEnable false")
|
|
}
|
|
if settings.SubExpiredTemplate != DefaultSubExpiredTemplate {
|
|
t.Fatalf("expected default SubExpiredTemplate %q, got %q", DefaultSubExpiredTemplate, settings.SubExpiredTemplate)
|
|
}
|
|
if settings.SubTrafficDepletedTemplate != DefaultSubTrafficDepletedTemplate {
|
|
t.Fatalf("expected default SubTrafficDepletedTemplate %q, got %q", DefaultSubTrafficDepletedTemplate, settings.SubTrafficDepletedTemplate)
|
|
}
|
|
|
|
settings.SubInfoNodeEnable = true
|
|
settings.SubExpiredTemplate = "custom expired"
|
|
settings.SubTrafficDepletedTemplate = "custom depleted"
|
|
if err := s.UpdateAllSetting(settings, SecretClears{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
gotEnabled, err := s.GetSubInfoNodeEnable()
|
|
if err != nil || !gotEnabled {
|
|
t.Fatalf("expected true, got %v, err %v", gotEnabled, err)
|
|
}
|
|
gotExp, err := s.GetSubExpiredTemplate()
|
|
if err != nil || gotExp != "custom expired" {
|
|
t.Fatalf("expected 'custom expired', got %q, err %v", gotExp, err)
|
|
}
|
|
gotDep, err := s.GetSubTrafficDepletedTemplate()
|
|
if err != nil || gotDep != "custom depleted" {
|
|
t.Fatalf("expected 'custom depleted', got %q, err %v", gotDep, err)
|
|
}
|
|
}
|