move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user