Files

78 lines
2.9 KiB
Go

package tgbot
import (
"strings"
"testing"
)
// botMessage — реальный блок из tmp/examples.md (Аватар, Книга 2).
const botMessage = `[3] #3117703 [rutracker], 2020-01-30 (https://hashurl.ru/eyJhbGc.abc):
Аватар: Легенда об Аанге / Avatar: The Last Airbender / Книга 2: Земля / Серии: 1-20 из 20 (Майкл Данте ДиМартино / Michael Dante DiMartino, Брайан Кониецко / Bryan Konietzko) [2006, США, приключения, фэнтези, DVDRip-AVC] Dub + Original
✅ (проверено) | 4 GB
сохранённая копия описания раздачи (https://hashurl.ru/eyJ.def)
magnet:?xt=urn:btih:7931AA3ED6666746012F5739D099B5BC64D72A16&tr=http%3A%2F%2Fbt2.t-ru.org%2Fann%3Fmagnet&dn=rutracker-topic-3117703
Открыть magnet в вашем клиенте (https://hashurl.ru/eyJ.ghi)
или получить .torrent: /tr_bc8ea
Оценить:
👍: /g_ad035f или 👎🏿: /r_ad035f
[список файлов] (https://download.exfreedomist.com/files/7931AA3E)
Следить: /us_bc8ea
В закладки: /mka_46d1e
cправка: /help, настройки: /settings`
func TestParseMessage_BotForward(t *testing.T) {
src, ctx, ok := ParseMessage(botMessage)
if !ok {
t.Fatal("magnet не найден")
}
if !strings.HasPrefix(src, "magnet:?xt=urn:btih:7931AA3E") {
t.Errorf("magnet = %q", src)
}
// Контекст несёт заголовок релиза и метаданные.
for _, want := range []string{"Avatar: The Last Airbender", "Книга 2", "2006", "DVDRip-AVC", "✅ (проверено) | 4 GB"} {
if !strings.Contains(ctx, want) {
t.Errorf("контекст без %q:\n%s", want, ctx)
}
}
// Мусор и ссылки вычищены.
for _, bad := range []string{"magnet:", "hashurl.ru", "/tr_", "/g_ad035f", "Следить", "cправка", "список файлов"} {
if strings.Contains(ctx, bad) {
t.Errorf("контекст содержит мусор %q:\n%s", bad, ctx)
}
}
}
func TestParseMessage_PlainMagnet(t *testing.T) {
src, ctx, ok := ParseMessage("magnet:?xt=urn:btih:ABC123&dn=x")
if !ok || src != "magnet:?xt=urn:btih:ABC123&dn=x" {
t.Errorf("src = %q, ok = %v", src, ok)
}
if ctx != "" {
t.Errorf("ожидался пустой контекст, got %q", ctx)
}
}
func TestParseMessage_MagnetWithUserText(t *testing.T) {
text := "вот сериал, второй сезон\nmagnet:?xt=urn:btih:DEF456"
src, ctx, ok := ParseMessage(text)
if !ok || !strings.HasPrefix(src, "magnet:?xt=urn:btih:DEF456") {
t.Errorf("src = %q", src)
}
if ctx != "вот сериал, второй сезон" {
t.Errorf("context = %q", ctx)
}
}
func TestParseMessage_NoMagnet(t *testing.T) {
if _, _, ok := ParseMessage("просто текст без ссылки"); ok {
t.Error("ожидалось ok=false без magnet")
}
}