package service import ( "path/filepath" "testing" "github.com/mhsanaei/3x-ui/v3/internal/database" ) func setupSettingTestDB(t *testing.T) { t.Helper() if err := database.InitDB(filepath.Join(t.TempDir(), "x-ui.db")); err != nil { t.Fatal(err) } t.Cleanup(func() { if err := database.CloseDB(); err != nil { t.Fatal(err) } }) } func TestSanitizePublicHTTPURLBlocksPrivateAddressUnlessAllowed(t *testing.T) { if _, err := SanitizePublicHTTPURL("http://127.0.0.1:8080/hook", false); err == nil { t.Fatal("expected localhost URL to be blocked") } if got, err := SanitizePublicHTTPURL("http://127.0.0.1:8080/hook", true); err != nil || got != "http://127.0.0.1:8080/hook" { t.Fatalf("allowPrivate result = %q, %v", got, err) } } func TestGetSecret_FallbacksOnEmptyDatabaseSetting(t *testing.T) { setupSettingTestDB(t) s := &SettingService{} if err := s.saveSetting("secret", ""); err != nil { t.Fatal(err) } secretBytes, err := s.GetSecret() if err != nil { t.Fatalf("unexpected error: %v", err) } secret := string(secretBytes) if len(secret) != 32 { t.Fatalf("secret length = %d, want 32-byte non-empty string", len(secret)) } persisted, err := s.getString("secret") if err != nil { t.Fatalf("failed to retrieve persisted secret: %v", err) } if persisted != secret { t.Fatalf("persisted secret = %q, want %q", persisted, secret) } }