61 lines
2.1 KiB
Go
61 lines
2.1 KiB
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/iamxvbaba/td/tg"
|
|
"github.com/iamxvbaba/td/tgerr"
|
|
)
|
|
|
|
func TestMessagesGetRecentLocationsReturnsOnlyGeoLive(t *testing.T) {
|
|
r, owner, friend := newMediaTestRouter(t)
|
|
ctx := WithUserID(context.Background(), owner.ID)
|
|
peer := &tg.InputPeerUser{UserID: friend.ID, AccessHash: friend.AccessHash}
|
|
|
|
if _, err := r.onMessagesSendMessage(ctx, &tg.MessagesSendMessageRequest{
|
|
Peer: peer, Message: "not a location", RandomID: 73001,
|
|
}); err != nil {
|
|
t.Fatalf("send text: %v", err)
|
|
}
|
|
want := sendTestLiveLocation(t, r, owner.ID, peer, 73002, 900)
|
|
|
|
result, err := r.onMessagesGetRecentLocations(ctx, &tg.MessagesGetRecentLocationsRequest{Peer: peer, Limit: 20})
|
|
if err != nil {
|
|
t.Fatalf("getRecentLocations: %v", err)
|
|
}
|
|
var messages []tg.MessageClass
|
|
switch value := result.(type) {
|
|
case *tg.MessagesMessages:
|
|
messages = value.Messages
|
|
case *tg.MessagesMessagesSlice:
|
|
messages = value.Messages
|
|
default:
|
|
t.Fatalf("getRecentLocations = %T", result)
|
|
}
|
|
if len(messages) != 1 {
|
|
t.Fatalf("recent location messages = %d, want 1", len(messages))
|
|
}
|
|
got, ok := messages[0].(*tg.Message)
|
|
if !ok || got.ID != want.ID {
|
|
t.Fatalf("recent location = %#v, want id %d", messages[0], want.ID)
|
|
}
|
|
if _, ok := got.Media.(*tg.MessageMediaGeoLive); !ok {
|
|
t.Fatalf("recent location media = %T, want MessageMediaGeoLive", got.Media)
|
|
}
|
|
}
|
|
|
|
func TestMessagesGetRecentLocationsValidatesLimitAndAccessHash(t *testing.T) {
|
|
r, owner, friend := newMediaTestRouter(t)
|
|
ctx := WithUserID(context.Background(), owner.ID)
|
|
if _, err := r.onMessagesGetRecentLocations(ctx, &tg.MessagesGetRecentLocationsRequest{
|
|
Peer: &tg.InputPeerUser{UserID: friend.ID, AccessHash: friend.AccessHash}, Limit: maxSearchResultsLimit + 1,
|
|
}); err == nil || !tgerr.Is(err, "LIMIT_INVALID") {
|
|
t.Fatalf("oversized limit err = %v, want LIMIT_INVALID", err)
|
|
}
|
|
if _, err := r.onMessagesGetRecentLocations(ctx, &tg.MessagesGetRecentLocationsRequest{
|
|
Peer: &tg.InputPeerUser{UserID: friend.ID, AccessHash: friend.AccessHash + 1}, Limit: 20,
|
|
}); err == nil || !tgerr.Is(err, "USER_ID_INVALID") {
|
|
t.Fatalf("bad access hash err = %v, want USER_ID_INVALID", err)
|
|
}
|
|
}
|