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,68 @@
package memory
import (
"context"
"errors"
"testing"
"telesrv/internal/domain"
)
// TestChannelStoreResolveWebPage 验证频道 WebPageResolve 模式:只换 media、不碰 body/edit_date
// 事件为 channel_web_page幂等。
func TestChannelStoreResolveWebPage(t *testing.T) {
st := NewChannelStore()
ctx := context.Background()
const creator = int64(1000000301)
const url = "https://example.com/c"
urlHash := domain.WebPageURLHash(url)
created, err := st.CreateChannel(ctx, domain.CreateChannelRequest{
CreatorUserID: creator, Title: "WP", Megagroup: true, Date: 1700000000,
})
if err != nil {
t.Fatalf("create channel: %v", err)
}
channelID := created.Channel.ID
sent, err := st.SendChannelMessage(ctx, domain.SendChannelMessageRequest{
UserID: creator, ChannelID: channelID, Message: "see " + url, Date: 1700000000,
Media: &domain.MessageMedia{Kind: domain.MessageMediaKindWebPage, WebPage: &domain.MessageWebPage{State: domain.MessageWebPageStatePending, ID: urlHash, URL: url}},
})
if err != nil {
t.Fatalf("send channel message: %v", err)
}
done := &domain.MessageMedia{Kind: domain.MessageMediaKindWebPage, WebPage: &domain.MessageWebPage{State: domain.MessageWebPageStateDone, ID: urlHash, URL: url, Title: "Example"}}
resolveReq := domain.EditChannelMessageRequest{
UserID: creator, ChannelID: channelID, ID: sent.Message.ID,
Media: done, WebPageResolve: true, ExpectedWebPageID: urlHash,
}
res, err := st.EditChannelMessage(ctx, resolveReq)
if err != nil {
t.Fatalf("EditChannelMessage(WebPageResolve): %v", err)
}
if res.Event.Type != domain.ChannelUpdateWebPage {
t.Fatalf("event type = %q, want channel_web_page", res.Event.Type)
}
if res.Message.Media == nil || res.Message.Media.WebPage == nil || res.Message.Media.WebPage.State != domain.MessageWebPageStateDone {
t.Fatalf("message media not resolved: %+v", res.Message.Media)
}
if res.Message.Body != "see "+url || res.Message.EditDate != 0 {
t.Fatalf("body/edit_date changed: body=%q edit_date=%d", res.Message.Body, res.Message.EditDate)
}
if _, err := st.EditChannelMessage(ctx, resolveReq); !errors.Is(err, domain.ErrMessageNotModified) {
t.Fatalf("re-resolve err = %v, want ErrMessageNotModified", err)
}
// 错误的 expectedID → 不替换。
_, err = st.EditChannelMessage(ctx, domain.EditChannelMessageRequest{
UserID: creator, ChannelID: channelID, ID: sent.Message.ID,
Media: &domain.MessageMedia{Kind: domain.MessageMediaKindWebPage, WebPage: &domain.MessageWebPage{State: domain.MessageWebPageStateDone, ID: 999, URL: url}},
WebPageResolve: true, ExpectedWebPageID: 999,
})
if !errors.Is(err, domain.ErrMessageNotModified) {
t.Fatalf("wrong-id resolve err = %v, want ErrMessageNotModified (already resolved, not pending)", err)
}
}