fix(rpc): preserve verification icons in message envelopes
This commit is contained in:
parent
cec4361d8b
commit
f0bd6c9699
8 changed files with 138 additions and 19 deletions
|
|
@ -679,3 +679,106 @@ func TestUsersGetUsersResolvesBotVerificationInOneBatch(t *testing.T) {
|
|||
verify.batchCalls, verify.peerCalls)
|
||||
}
|
||||
}
|
||||
|
||||
// TestOpeningChatMessageLookupsKeepBotVerificationIcons covers the supplemental
|
||||
// message lookups official clients issue while opening a chat. These responses
|
||||
// update the same peer cache as messages.getDialogs, so returning an unstamped
|
||||
// user/channel here makes a visible badge disappear until the dialogs response is
|
||||
// loaded again.
|
||||
func TestOpeningChatMessageLookupsKeepBotVerificationIcons(t *testing.T) {
|
||||
t.Run("private messages.getMessages", func(t *testing.T) {
|
||||
const (
|
||||
viewerID = int64(1000000001)
|
||||
targetID = int64(1000000002)
|
||||
iconID = int64(8800010)
|
||||
)
|
||||
verify := newFakeBotVerifications()
|
||||
peer := domain.Peer{Type: domain.PeerTypeUser, ID: targetID}
|
||||
verify.marks[peer] = domain.CustomVerification{
|
||||
VerifierBotID: 777000123,
|
||||
Peer: peer,
|
||||
IconDocumentID: iconID,
|
||||
Description: "Verified by Acme Trust",
|
||||
}
|
||||
r := New(Config{}, Deps{
|
||||
Messages: &captureMessages{list: domain.MessageList{
|
||||
Messages: []domain.Message{{
|
||||
ID: 7,
|
||||
OwnerUserID: viewerID,
|
||||
Peer: peer,
|
||||
From: peer,
|
||||
Date: 1700000000,
|
||||
Body: "reply source",
|
||||
}},
|
||||
Count: 1,
|
||||
}},
|
||||
Users: mapUsersService{users: map[int64]domain.User{
|
||||
viewerID: {ID: viewerID, FirstName: "Viewer"},
|
||||
targetID: {ID: targetID, FirstName: "Target"},
|
||||
}},
|
||||
BotVerifications: verify,
|
||||
}, zaptest.NewLogger(t), clock.System)
|
||||
|
||||
result, err := r.onMessagesGetMessages(
|
||||
WithUserID(context.Background(), viewerID),
|
||||
[]tg.InputMessageClass{&tg.InputMessageID{ID: 7}},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("messages.getMessages: %v", err)
|
||||
}
|
||||
box := result.(*tg.MessagesMessages)
|
||||
if len(box.Users) != 1 {
|
||||
t.Fatalf("users = %d, want target user", len(box.Users))
|
||||
}
|
||||
user := &tg.User{}
|
||||
tlRoundTrip(t, box.Users[0].(*tg.User), user)
|
||||
if icon, ok := user.GetBotVerificationIcon(); !ok || icon != iconID {
|
||||
t.Fatalf("opening-chat user bot_verification_icon = %d, ok=%v, want %d", icon, ok, iconID)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("channel channels.getMessages", func(t *testing.T) {
|
||||
const iconID = int64(8800011)
|
||||
f := newBotVerificationFixture(t, newFakeBotVerifications())
|
||||
group := f.botVerificationGroup(t, "Verified Group")
|
||||
sent, err := f.router.onMessagesSendMessage(
|
||||
WithUserID(context.Background(), f.owner.ID),
|
||||
&tg.MessagesSendMessageRequest{
|
||||
Peer: &tg.InputPeerChannel{ChannelID: group.ID, AccessHash: group.AccessHash},
|
||||
Message: "pinned source",
|
||||
RandomID: 8800011,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("send channel message: %v", err)
|
||||
}
|
||||
messageID := sent.(*tg.Updates).Updates[1].(*tg.UpdateNewChannelMessage).Message.(*tg.Message).ID
|
||||
peer := domain.Peer{Type: domain.PeerTypeChannel, ID: group.ID}
|
||||
f.verify.marks[peer] = domain.CustomVerification{
|
||||
VerifierBotID: f.bot.ID,
|
||||
Peer: peer,
|
||||
IconDocumentID: iconID,
|
||||
Description: "Verified by Acme Trust",
|
||||
}
|
||||
|
||||
result, err := f.router.onChannelsGetMessages(
|
||||
WithUserID(context.Background(), f.owner.ID),
|
||||
&tg.ChannelsGetMessagesRequest{
|
||||
Channel: &tg.InputChannel{ChannelID: group.ID, AccessHash: group.AccessHash},
|
||||
ID: []tg.InputMessageClass{&tg.InputMessageID{ID: messageID}},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("channels.getMessages: %v", err)
|
||||
}
|
||||
box := result.(*tg.MessagesMessages)
|
||||
if len(box.Chats) != 1 {
|
||||
t.Fatalf("chats = %d, want target channel", len(box.Chats))
|
||||
}
|
||||
channel := &tg.Channel{}
|
||||
tlRoundTrip(t, box.Chats[0].(*tg.Channel), channel)
|
||||
if icon, ok := channel.GetBotVerificationIcon(); !ok || icon != iconID {
|
||||
t.Fatalf("opening-chat channel bot_verification_icon = %d, ok=%v, want %d", icon, ok, iconID)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue