Split long messages when send to telegram
This commit is contained in:
125
internal/adapter/telegram/split_test.go
Normal file
125
internal/adapter/telegram/split_test.go
Normal file
@@ -0,0 +1,125 @@
|
||||
package telegram
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTelegramMessageSender_splitMessageByWords(t *testing.T) {
|
||||
sender := &TelegramMessageSender{}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
text string
|
||||
maxLen int
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "Short text should return as is",
|
||||
text: "Привет мир",
|
||||
maxLen: 25,
|
||||
expected: []string{
|
||||
"Привет мир",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text exactly at limit",
|
||||
text: "Это тестовый текст который ровно соответствует лимиту",
|
||||
maxLen: 35,
|
||||
expected: []string{
|
||||
"Это тестовый текст который ровно ",
|
||||
"соответствует ",
|
||||
"лимиту",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with word boundaries",
|
||||
text: "Это очень длинный текст для проверки работы функции разделения сообщения",
|
||||
maxLen: 25,
|
||||
expected: []string{
|
||||
"Это очень длинный текст ",
|
||||
"для проверки работы ",
|
||||
"функции разделения ",
|
||||
"сообщения",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with long words",
|
||||
text: "Этот текст содержит оченьдлинноеслово которое не должно быть разбито",
|
||||
maxLen: 20,
|
||||
expected: []string{
|
||||
"Этот текст содержит ",
|
||||
"оченьдлинноеслово ",
|
||||
"которое не должно ",
|
||||
"быть ",
|
||||
"разбито",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with multiple spaces",
|
||||
text: "Этот текст имеет много пробелов",
|
||||
maxLen: 20,
|
||||
expected: []string{
|
||||
"Этот текст ",
|
||||
"имеет много ",
|
||||
"пробелов",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with Russian characters and punctuation",
|
||||
text: "Привет! Как дела? Это тестовая строка для проверки работы функции.",
|
||||
maxLen: 25,
|
||||
expected: []string{
|
||||
"Привет! Как дела? Это ",
|
||||
"тестовая строка для ",
|
||||
"проверки работы ",
|
||||
"функции.",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Single word longer than maxLen",
|
||||
text: "Некотороедлинноеслово",
|
||||
maxLen: 10,
|
||||
expected: []string{
|
||||
"Некотороед",
|
||||
"линноеслов",
|
||||
"о",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with mixed Russian and English",
|
||||
text: "Привет Hello мир World текст для проверки",
|
||||
maxLen: 20,
|
||||
expected: []string{
|
||||
"Привет Hello мир ",
|
||||
"World текст для ",
|
||||
"проверки",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Text with special characters",
|
||||
text: "Тест с символами: @#$%^&*()_+-=[]{}|;':\",./<>?",
|
||||
maxLen: 25,
|
||||
expected: []string{
|
||||
"Тест с символами: ",
|
||||
"@#$%^&*()_+-=[]{}|;':\",./",
|
||||
"<>?",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := sender.splitMessageByWords(tt.text, tt.maxLen)
|
||||
if len(result) != len(tt.expected) {
|
||||
t.Errorf("splitMessageByWords() length = %d, want %d", len(result), len(tt.expected))
|
||||
return
|
||||
}
|
||||
|
||||
for i, expectedPart := range tt.expected {
|
||||
if result[i] != expectedPart {
|
||||
t.Errorf("splitMessageByWords() part %d = %q, want %q", i, result[i], expectedPart)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user