Files
MeBox/internal/service/reader/search_merge_test.go
T
truewhile 6584519bd8 优化
2026-10-01 23:29:49 +08:00

74 lines
2.5 KiB
Go

package reader
import "testing"
// 同书多源合并:先到的源没有封面/简介时,必须用后面源的有效值补齐。
// 否则「有源带封面」的书在合并成一行后会是空白(legado 一源一行则不会出现)。
func TestMergeSearchResultsFillsMissingFields(t *testing.T) {
hits := []searchHit{
{book: SearchBook{
Name: "全球高武",
Author: "蛮荒帝霸",
CoverURL: "",
Origins: []SearchOrigin{{OriginName: "搜书神器", BookURL: "/a"}},
}},
{book: SearchBook{
Name: "全球高武",
Author: "蛮荒帝霸",
CoverURL: "https://res.chuangke.tv/qk/246/a3/76/2271.jpg",
Intro: "一句话简介",
Kind: "连载",
WordCount: "177.2万字",
LatestChapter: "第694章",
Origins: []SearchOrigin{{OriginName: "svip_AU文学", BookURL: "/b"}},
}},
}
got := mergeSearchResults(hits, "全球高武")
if len(got) != 1 {
t.Fatalf("合并后应只有 1 条,实际 %d", len(got))
}
book := got[0]
if book.CoverURL != "https://res.chuangke.tv/qk/246/a3/76/2271.jpg" {
t.Fatalf("封面未从其它源补齐: %q", book.CoverURL)
}
if book.Intro != "一句话简介" {
t.Fatalf("简介未补齐: %q", book.Intro)
}
if book.Kind != "连载" || book.WordCount != "177.2万字" || book.LatestChapter != "第694章" {
t.Fatalf("字段未补齐: %+v", book)
}
if len(book.Origins) != 2 {
t.Fatalf("源数 = %d, want 2", len(book.Origins))
}
}
// 已经有值的字段不能被后来的源覆盖(先到的更权威,且保证结果稳定)。
func TestMergeSearchResultsKeepsExistingFields(t *testing.T) {
hits := []searchHit{
{book: SearchBook{Name: "书", Author: "作者", CoverURL: "https://a.example.com/1.jpg", Intro: "甲的简介"}},
{book: SearchBook{Name: "书", Author: "作者", CoverURL: "https://b.example.com/2.jpg", Intro: "乙的简介"}},
}
got := mergeSearchResults(hits, "书")
if len(got) != 1 {
t.Fatalf("合并后应只有 1 条,实际 %d", len(got))
}
if got[0].CoverURL != "https://a.example.com/1.jpg" || got[0].Intro != "甲的简介" {
t.Fatalf("不该被后来的源覆盖: %+v", got[0])
}
}
// 无书名的结果直接丢弃,且不会参与合并。
func TestMergeSearchResultsSkipsEmptyName(t *testing.T) {
hits := []searchHit{
{book: SearchBook{Name: "", Author: "作者", CoverURL: "https://a.example.com/1.jpg"}},
{book: SearchBook{Name: "书", Author: "作者"}},
}
got := mergeSearchResults(hits, "书")
if len(got) != 1 || got[0].Name != "书" {
t.Fatalf("结果 = %+v", got)
}
}