mirror of
https://github.com/MengMengCode/VoCat.git
synced 2026-08-20 14:53:42 +08:00
109 lines
3.2 KiB
Go
109 lines
3.2 KiB
Go
package server
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIncomingCallNotificationTextFormatting(t *testing.T) {
|
|
now := time.Date(2026, 8, 20, 10, 30, 0, 0, time.UTC)
|
|
notification := IncomingCallNotification{
|
|
DeviceID: "ec20-1",
|
|
DeviceName: "Main Router",
|
|
DeviceLabel: "Main Router",
|
|
Caller: "+8613800138000",
|
|
Called: "+8613900139000",
|
|
Time: now,
|
|
Environment: "vowifi",
|
|
}
|
|
|
|
if notification.Title() != "收到来电" {
|
|
t.Errorf("Title() = %q, want '收到来电'", notification.Title())
|
|
}
|
|
|
|
text := notification.Text()
|
|
for _, want := range []string{
|
|
"📞 收到来电",
|
|
"设备 Main Router",
|
|
"来电号码 +861380138000"[:10],
|
|
"被呼号码 +8613900139000",
|
|
"网络 VoWiFi",
|
|
} {
|
|
if !strings.Contains(text, want) {
|
|
t.Errorf("Text() omitted %q:\n%s", want, text)
|
|
}
|
|
}
|
|
|
|
notification.Environment = "cellular"
|
|
if !strings.Contains(notification.Text(), "网络 基站直连") {
|
|
t.Errorf("Text() in cellular mode omitted '网络 基站直连':\n%s", notification.Text())
|
|
}
|
|
}
|
|
|
|
func TestIncomingCallDeduplication(t *testing.T) {
|
|
now := time.Now()
|
|
key := "test-device:+8613800000000"
|
|
|
|
// First call should not be suppressed
|
|
if shouldSuppressDuplicateCall(key, now, time.Minute) {
|
|
t.Fatal("first call unexpectedly suppressed")
|
|
}
|
|
|
|
// Immediate duplicate should be suppressed
|
|
if !shouldSuppressDuplicateCall(key, now.Add(5*time.Second), time.Minute) {
|
|
t.Fatal("duplicate call within window was not suppressed")
|
|
}
|
|
|
|
// Call after window should be allowed
|
|
if shouldSuppressDuplicateCall(key, now.Add(70*time.Second), time.Minute) {
|
|
t.Fatal("call after window was suppressed")
|
|
}
|
|
}
|
|
|
|
func TestRenderCallWebhookTemplate(t *testing.T) {
|
|
now := time.Date(2026, 8, 20, 10, 30, 0, 0, time.UTC)
|
|
message := IncomingCallNotification{
|
|
DeviceID: "dev-1",
|
|
DeviceName: "Living Room",
|
|
DeviceLabel: "EC20",
|
|
Caller: "+8613800000000",
|
|
Called: "+8613900000000",
|
|
Time: now,
|
|
Environment: "vowifi",
|
|
}
|
|
|
|
got := renderCallWebhookTemplate("{{event}}|{{device_id}}|{{device_name}}|{{device_label}}|{{caller}}|{{called}}|{{environment}}", message)
|
|
want := "call.received|dev-1|Living Room|EC20|+8613800000000|+8613900000000|vowifi"
|
|
if got != want {
|
|
t.Fatalf("renderCallWebhookTemplate() = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestWecomAndLarkCallValues(t *testing.T) {
|
|
location := time.FixedZone("UTC+8", 8*60*60)
|
|
now := time.Date(2026, 8, 20, 18, 0, 0, 0, location)
|
|
message := IncomingCallNotification{
|
|
DeviceID: "dev-1",
|
|
DeviceName: "Office",
|
|
DeviceLabel: "EC20-Office",
|
|
Caller: "+8613800138000",
|
|
Called: "+8613900139000",
|
|
Time: now,
|
|
Environment: "cellular",
|
|
}
|
|
|
|
wecom := wecomCallValues(message)
|
|
if wecom["event"] != "call.received" || wecom["title"] != "收到来电" || wecom["number"] != "+8613800138000" {
|
|
t.Fatalf("wecomCallValues = %#v", wecom)
|
|
}
|
|
if !strings.Contains(wecom["message"], "网络 基站直连") {
|
|
t.Fatalf("wecomCallValues message omitted network: %s", wecom["message"])
|
|
}
|
|
|
|
lark := larkCallValues(message)
|
|
if lark["event"] != "call.received" || lark["title"] != "收到来电" || lark["device_label"] != "EC20-Office" {
|
|
t.Fatalf("larkCallValues = %#v", lark)
|
|
}
|
|
}
|