65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package rpc
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/gotd/td/tg"
|
||
|
||
"telesrv/internal/domain"
|
||
)
|
||
|
||
// TestDifferenceNewMessageKeepsPinServiceReply 验证差分输出的 pin 服务
|
||
// 消息保留 reply 头(reply_to_msg_id = 接收方视角被置顶消息 id);缺失
|
||
// 时 TDesktop 渲染 "pinned Deleted message"。
|
||
func TestDifferenceNewMessageKeepsPinServiceReply(t *testing.T) {
|
||
const bobID = int64(1000000042)
|
||
const aliceID = int64(1000000041)
|
||
event := domain.UpdateEvent{
|
||
UserID: bobID,
|
||
Type: domain.UpdateEventNewMessage,
|
||
Pts: 351,
|
||
PtsCount: 1,
|
||
Date: 1700000900,
|
||
Message: domain.Message{
|
||
ID: 117,
|
||
OwnerUserID: bobID,
|
||
Peer: domain.Peer{Type: domain.PeerTypeUser, ID: aliceID},
|
||
From: domain.Peer{Type: domain.PeerTypeUser, ID: aliceID},
|
||
Date: 1700000900,
|
||
Media: &domain.MessageMedia{
|
||
Kind: domain.MessageMediaKindService,
|
||
ServiceAction: &domain.MessageServiceAction{Kind: domain.MessageServiceActionPinMessage},
|
||
},
|
||
ReplyTo: &domain.MessageReply{
|
||
MessageID: 115,
|
||
Peer: domain.Peer{Type: domain.PeerTypeUser, ID: aliceID},
|
||
},
|
||
},
|
||
}
|
||
diff := domain.UpdateDifference{
|
||
State: domain.UpdateState{Pts: 351, Date: 1700000901},
|
||
Events: []domain.UpdateEvent{event},
|
||
}
|
||
out, ok := tgUpdatesDifference(bobID, diff).(*tg.UpdatesDifference)
|
||
if !ok {
|
||
t.Fatalf("difference type = %T, want *tg.UpdatesDifference", tgUpdatesDifference(bobID, diff))
|
||
}
|
||
if len(out.NewMessages) != 1 {
|
||
t.Fatalf("new messages = %d, want 1", len(out.NewMessages))
|
||
}
|
||
svc, ok := out.NewMessages[0].(*tg.MessageService)
|
||
if !ok {
|
||
t.Fatalf("message type = %T, want messageService", out.NewMessages[0])
|
||
}
|
||
if _, ok := svc.Action.(*tg.MessageActionPinMessage); !ok {
|
||
t.Fatalf("action = %T, want messageActionPinMessage", svc.Action)
|
||
}
|
||
reply, ok := svc.GetReplyTo()
|
||
if !ok {
|
||
t.Fatalf("difference 服务消息丢失 reply 头(TDesktop 将渲染 pinned Deleted message)")
|
||
}
|
||
header, ok := reply.(*tg.MessageReplyHeader)
|
||
if !ok || header.ReplyToMsgID != 115 {
|
||
t.Fatalf("reply header = %+v, want reply_to_msg_id=115", reply)
|
||
}
|
||
}
|