Files
mautrix-telegram/pkg/gotd/telegram/message/peer/resolve_test.go
T
2025-06-27 20:03:37 -07:00

106 lines
2.2 KiB
Go

package peer
import (
"context"
"fmt"
"strconv"
"testing"
"github.com/stretchr/testify/require"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
func resolver(t *testing.T, expectedDomain string, expected tg.InputPeerClass) Resolver {
return &mockResolver{
domain: expectedDomain,
peer: expected,
t: t,
}
}
func TestSender_Resolve(t *testing.T) {
formats := []struct {
fmt string
wantErr bool
}{
{`%s`, false},
{`@%s`, false},
{`t.me/%s`, false},
{`t.me/%s/`, false},
{`https://t.me/%s`, false},
{`https://t.me/%s/`, false},
{`tg:resolve?domain=%s`, false},
{`tg://resolve?domain=%s`, false},
{`https://t.co/%s`, true},
{`rt://resolve?domain=%s`, true},
}
tests := []struct {
name string
domain string
wantErr bool
}{
{"Good", "telegram", false},
{"Good with numbers", "telegram123", false},
{"Good with _", "telegram_test", false},
{"Good with numbers and _", "telegram_test123", false},
{"Bad", "_gotd_test", true},
{"Bad", "gotd_test_", true},
{"Bad", "_gotd_test123", true},
{"Bad", "gotd.test", true},
}
for _, format := range formats {
t.Run(format.fmt, func(t *testing.T) {
for _, tt := range tests {
name := tt.name
if tt.wantErr {
name = fmt.Sprintf("%s (%q)", tt.name, tt.domain)
}
expected := &tg.InputPeerUser{
UserID: 1,
AccessHash: 10,
}
t.Run(name, func(t *testing.T) {
a := require.New(t)
p, err := Resolve(
resolver(t, tt.domain, expected),
fmt.Sprintf(format.fmt, tt.domain),
)(context.Background())
if tt.wantErr || format.wantErr {
a.Error(err)
return
}
a.NoError(err)
a.Equal(expected, p)
})
}
})
}
}
func Test_cleanupPhone(t *testing.T) {
tests := []struct {
phone string
want string
}{
{"+13115552368", "13115552368"},
{"+1 (311) 555-0123", "13115550123"},
{"+1 311 555-6162", "13115556162"},
{"13115556162", "13115556162"},
{"123gotd_test", "123"},
}
for _, tt := range tests {
t.Run(tt.phone, func(t *testing.T) {
r := cleanupPhone(tt.phone)
require.Equal(t, tt.want, r)
_, err := strconv.ParseInt(r, 10, 64)
require.NoError(t, err)
})
}
}