mirror of
https://github.com/MengMengCode/VoCat.git
synced 2026-08-13 03:13:43 +08:00
- Introduced a new field `custom_phone_number` in the CardPolicy model and database schema. - Updated the API to handle custom phone number input, including validation and normalization. - Modified the CardPolicyPanel component to allow users to set and save a custom phone number. - Enhanced the settings API to include the custom phone number in responses and updates. - Added tests to ensure the correct functionality of custom phone number handling. - Removed hardcoded environment variable for VOCAT_ADDR in service files.
72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWebAddressWithPort(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
address string
|
|
port string
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{name: "IPv4", address: "0.0.0.0:7575", port: "8080", want: "0.0.0.0:8080"},
|
|
{name: "IPv6", address: "[::]:7575", port: "8443", want: "[::]:8443"},
|
|
{name: "minimum", address: "127.0.0.1:7575", port: "1", want: "127.0.0.1:1"},
|
|
{name: "maximum", address: "127.0.0.1:7575", port: "65535", want: "127.0.0.1:65535"},
|
|
{name: "zero", address: "0.0.0.0:7575", port: "0", wantErr: true},
|
|
{name: "too large", address: "0.0.0.0:7575", port: "65536", wantErr: true},
|
|
{name: "not numeric", address: "0.0.0.0:7575", port: "http", wantErr: true},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
got, _, err := webAddressWithPort(test.address, test.port)
|
|
if test.wantErr {
|
|
if !errors.Is(err, errInvalidWebPort) {
|
|
t.Fatalf("error = %v, want errInvalidWebPort", err)
|
|
}
|
|
return
|
|
}
|
|
if err != nil || got != test.want {
|
|
t.Fatalf("webAddressWithPort() = %q, %v; want %q", got, err, test.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRewriteEnvValuePreservesOtherSettings(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "env")
|
|
if err := os.WriteFile(path, []byte("VOCAT_ADMIN_PASSWORD=secret\nVOCAT_ADDR=0.0.0.0:7575\n"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := rewriteEnvValue(path, "VOCAT_ADDR", "0.0.0.0:8080"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
content, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got := string(content)
|
|
if !strings.Contains(got, "VOCAT_ADMIN_PASSWORD=secret\n") || !strings.Contains(got, "VOCAT_ADDR=0.0.0.0:8080\n") || strings.Contains(got, ":7575") {
|
|
t.Fatalf("rewritten env = %q", got)
|
|
}
|
|
if err := rewriteEnvValue(path, "VOCAT_ADDR", "0.0.0.0:9000\nVOCAT_ADMIN_PASSWORD=changed"); err == nil {
|
|
t.Fatal("environment line injection was accepted")
|
|
}
|
|
}
|
|
|
|
func TestMenuIncludesWebPortOptionInBothLanguages(t *testing.T) {
|
|
for _, lang := range []string{"zh", "en"} {
|
|
options := strings.Join(newMenu(lang).options(), "\n")
|
|
if !strings.Contains(options, "3)") || !strings.Contains(strings.ToLower(options), "web") {
|
|
t.Fatalf("%s menu options do not contain Web port entry: %q", lang, options)
|
|
}
|
|
}
|
|
}
|