owpengram-server/internal/rpc/messages_recent_locations_test.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)
}
}