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

103 lines
2.6 KiB
Go

package message
import (
"context"
"testing"
"github.com/go-faster/errors"
"github.com/stretchr/testify/require"
"go.mau.fi/mautrix-telegram/pkg/gotd/telegram/message/peer"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
type testResolver struct {
t *testing.T
expectedDomain string
expected tg.InputPeerClass
}
func (r *testResolver) ResolveDomain(ctx context.Context, domain string) (tg.InputPeerClass, error) {
return r.expectResolve(ctx, domain)
}
func (r *testResolver) ResolvePhone(ctx context.Context, phone string) (tg.InputPeerClass, error) {
return r.expectResolve(ctx, phone)
}
func (r *testResolver) expectResolve(_ context.Context, domain string) (tg.InputPeerClass, error) {
if domain != r.expectedDomain {
err := errors.Errorf("expected domain %q, got %q", r.expectedDomain, domain)
r.t.Error(err)
return nil, err
}
return r.expected, nil
}
func resolver(t *testing.T, expectedDomain string, expected tg.InputPeerClass) peer.Resolver {
return &testResolver{t, expectedDomain, expected}
}
type answerable struct {
ID int
UserID int64
}
func (a answerable) GetPeer() tg.PeerClass {
return &tg.PeerUser{UserID: a.UserID}
}
func (a answerable) GetMessage() tg.MessageClass {
return &tg.Message{
ID: a.ID,
PeerID: a.GetPeer(),
}
}
func TestResolve(t *testing.T) {
a := require.New(t)
ctx := context.Background()
expected := &tg.InputPeerUser{UserID: 10, AccessHash: 10}
s := NewSender(nil).WithResolver(resolver(t, "durov", expected))
check := func(req *RequestBuilder, expected tg.InputPeerClass) {
p, err := req.AsInputPeer(ctx)
a.NoError(err)
a.Equal(expected, p)
}
check(s.Self(), &tg.InputPeerSelf{})
check(s.To(expected), expected)
check(s.Resolve("durov"), expected)
check(s.ResolveDomain("@durov"), expected)
check(s.ResolveDeeplink("https://t.me/durov"), expected)
uctx := tg.Entities{Users: map[int64]*tg.User{
expected.UserID: {ID: expected.UserID, AccessHash: expected.AccessHash, Username: "durov"},
}}
ans := answerable{ID: 10, UserID: expected.UserID}
check(s.Peer(uctx, ans), expected)
check(s.Answer(uctx, ans), expected)
}
func TestSender_ResolvePhone(t *testing.T) {
a := require.New(t)
ctx := context.Background()
expected := &tg.InputPeerChannel{ChannelID: 10, AccessHash: 10}
s := NewSender(nil).WithResolver(resolver(t, "13115552368", expected))
check := func(req *RequestBuilder, expected tg.InputPeerClass) {
p, err := req.AsInputPeer(ctx)
a.NoError(err)
a.Equal(expected, p)
}
// If there's somethin' strange
// in your neighborhood
check(s.Resolve("+13115552368"), expected)
// Who ya gonna call
// Ghostb...!
check(s.Resolve("+1 (311) 555-2368"), expected)
}