chore: refresh gramsrv public release

This commit is contained in:
A 2026-06-30 14:37:43 +08:00
parent 75cebe8dbf
commit 70b6820474
1274 changed files with 378751 additions and 59919 deletions

View file

@ -0,0 +1,84 @@
package rpc
import (
"testing"
"github.com/gotd/td/tg"
"telesrv/internal/domain"
)
// DrKLO 的 UserObject.isUserSelf 只看 user.self flag;服务端任何把"请求者自己的 user"
// 用 self=false 形态下发的路径,都会让 Android putUsers 覆盖账号缓存,Saved Messages
// 退化为普通自聊。本测试锁定几个曾漏 self 分支的 channel/global 历史转换出口:viewer
// 自己出现在 users 集合时必须带 self 标志。
// selfFlag 在 users 里定位 viewer,返回其 self 标志(找不到时 fail)。
func selfFlag(t *testing.T, users []tg.UserClass, viewerID int64) bool {
t.Helper()
for _, uc := range users {
u, ok := uc.(*tg.User)
if !ok || u.ID != viewerID {
continue
}
return u.Self
}
t.Fatalf("viewer %d missing from users slice", viewerID)
return false
}
func TestChannelHistoryMessagesMarksViewerSelf(t *testing.T) {
const viewer = int64(1001)
history := domain.ChannelHistory{
Channel: domain.Channel{ID: 40, AccessHash: 7, Megagroup: true},
Users: []domain.User{
{ID: viewer, AccessHash: 5, FirstName: "Me"},
{ID: 2002, AccessHash: 6, FirstName: "Other"},
},
}
out, ok := tgChannelHistoryMessages(viewer, history).(*tg.MessagesChannelMessages)
if !ok {
t.Fatalf("expected MessagesChannelMessages, got %T", tgChannelHistoryMessages(viewer, history))
}
if !selfFlag(t, out.Users, viewer) {
t.Fatal("viewer's own user must carry self flag in channel history (Saved Messages cache integrity)")
}
if selfFlag(t, out.Users, 2002) {
t.Fatal("other user must not carry self flag")
}
}
func TestChannelSearchPostsMessagesMarksViewerSelf(t *testing.T) {
const viewer = int64(1001)
history := domain.ChannelHistory{
Channel: domain.Channel{ID: 40, AccessHash: 7, Megagroup: true},
Count: 5, // 触发 MessagesMessagesSlice 分支
Channels: []domain.Channel{{ID: 40, AccessHash: 7, Megagroup: true}},
Users: []domain.User{{ID: viewer, AccessHash: 5, FirstName: "Me"}},
}
slice, ok := tgChannelSearchPostsMessages(viewer, history).(*tg.MessagesMessagesSlice)
if !ok {
t.Fatalf("expected MessagesMessagesSlice, got %T", tgChannelSearchPostsMessages(viewer, history))
}
if !selfFlag(t, slice.Users, viewer) {
t.Fatal("viewer self flag lost in channel post search")
}
}
func TestGlobalSearchMessagesMarksViewerSelf(t *testing.T) {
const viewer = int64(1001)
private := domain.MessageList{Users: []domain.User{{ID: viewer, AccessHash: 5, FirstName: "Me"}}}
channel := domain.ChannelHistory{Users: []domain.User{{ID: viewer, AccessHash: 5, FirstName: "Me"}}}
switch out := tgGlobalSearchMessages(viewer, 50, private, channel).(type) {
case *tg.MessagesMessages:
if !selfFlag(t, out.Users, viewer) {
t.Fatal("viewer self flag lost in global search (messages)")
}
case *tg.MessagesMessagesSlice:
if !selfFlag(t, out.Users, viewer) {
t.Fatal("viewer self flag lost in global search (slice)")
}
default:
t.Fatalf("unexpected global search result type %T", out)
}
}