chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
77
internal/rpc/messages_webpage_preview_rpc_test.go
Normal file
77
internal/rpc/messages_webpage_preview_rpc_test.go
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/gotd/td/tg"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
// TestWebPagePreviewMedia 验证 getWebPagePreview 的 media 决策:done 卡片→messageMediaWebPage,
|
||||
// 无链接/解析失败/非 done 一律 messageMediaEmpty(绝不返回 pending、绝不报错)。
|
||||
func TestWebPagePreviewMedia(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
urlEntities := []tg.MessageEntityClass{&tg.MessageEntityURL{Offset: 0, Length: 9}} // "https://x"
|
||||
|
||||
doneCard := domain.MessageWebPage{
|
||||
State: domain.MessageWebPageStateDone,
|
||||
ID: 42,
|
||||
URL: "https://x",
|
||||
DisplayURL: "x",
|
||||
Title: "Hello",
|
||||
Photo: &domain.Photo{
|
||||
ID: 7, AccessHash: 8, DCID: 2,
|
||||
Sizes: []domain.PhotoSize{{Kind: domain.PhotoSizeKindDefault, Type: "x", W: 320, H: 200, Size: 1024}},
|
||||
},
|
||||
}
|
||||
|
||||
files := &fakeFiles{resolveWebPageFn: func(string) (domain.MessageWebPage, error) { return doneCard, nil }}
|
||||
r := &Router{deps: Deps{Files: files}}
|
||||
|
||||
t.Run("done-card", func(t *testing.T) {
|
||||
media := r.webPagePreviewMedia(ctx, "https://x", urlEntities)
|
||||
wrap, ok := media.(*tg.MessageMediaWebPage)
|
||||
if !ok {
|
||||
t.Fatalf("media = %T, want *tg.MessageMediaWebPage", media)
|
||||
}
|
||||
page, ok := wrap.Webpage.(*tg.WebPage)
|
||||
if !ok {
|
||||
t.Fatalf("webpage = %T, want *tg.WebPage", wrap.Webpage)
|
||||
}
|
||||
if v, _ := page.GetTitle(); v != "Hello" {
|
||||
t.Fatalf("title = %q, want Hello", v)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("no-url", func(t *testing.T) {
|
||||
if media := r.webPagePreviewMedia(ctx, "plain text", nil); !isEmptyMedia(media) {
|
||||
t.Fatalf("media = %T, want empty", media)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("resolve-error-degrades", func(t *testing.T) {
|
||||
files.resolveWebPageFn = func(string) (domain.MessageWebPage, error) {
|
||||
return domain.MessageWebPage{}, errors.New("boom")
|
||||
}
|
||||
if media := r.webPagePreviewMedia(ctx, "https://x", urlEntities); !isEmptyMedia(media) {
|
||||
t.Fatalf("media = %T, want empty on error", media)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("non-done-state-degrades", func(t *testing.T) {
|
||||
files.resolveWebPageFn = func(string) (domain.MessageWebPage, error) {
|
||||
return domain.MessageWebPage{State: domain.MessageWebPageStateEmpty, ID: 1, URL: "https://x"}, nil
|
||||
}
|
||||
if media := r.webPagePreviewMedia(ctx, "https://x", urlEntities); !isEmptyMedia(media) {
|
||||
t.Fatalf("media = %T, want empty for empty-state webpage", media)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func isEmptyMedia(m tg.MessageMediaClass) bool {
|
||||
_, ok := m.(*tg.MessageMediaEmpty)
|
||||
return ok
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue