feat: sync iOS compatibility support
This commit is contained in:
parent
1f646ef024
commit
50803a604c
32 changed files with 871 additions and 78 deletions
61
internal/rpc/messages_recent_locations_test.go
Normal file
61
internal/rpc/messages_recent_locations_test.go
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/gotd/td/tg"
|
||||
"github.com/gotd/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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue