From ca4923f5635e2696b4e59d01fec4866b568d4f23 Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Mon, 2 Dec 2019 18:25:55 +0200 Subject: [PATCH] Tests for message formatters, fix broken timestamp tests --- telegram/utils.go | 4 +- telegram/utils_test.go | 474 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 471 insertions(+), 7 deletions(-) diff --git a/telegram/utils.go b/telegram/utils.go index 6ec4405..8b3eb13 100644 --- a/telegram/utils.go +++ b/telegram/utils.go @@ -222,7 +222,7 @@ func (c *Client) formatMessage(chatID int64, messageID int64, preview bool, mess str.WriteString(fmt.Sprintf("%v | %s | ", message.Id, c.formatContact(message.SenderUserId))) // TODO: timezone if !preview { - str.WriteString(time.Unix(int64(message.Date), 0).Format("02 Jan 2006 15:04:05 | ")) + str.WriteString(time.Unix(int64(message.Date), 0).UTC().Format("02 Jan 2006 15:04:05 | ")) } var text string @@ -344,8 +344,8 @@ func (c *Client) contentToFilename(content client.MessageContent) (*client.File, case client.TypeMessagePhoto: photo, _ := content.(*client.MessagePhoto) sizes := photo.Photo.Sizes - file := sizes[len(sizes)-1].Photo if len(sizes) > 1 { + file := sizes[len(sizes)-1].Photo return file, strconv.Itoa(int(file.Id)) + ".jpg" } else { return nil, "" diff --git a/telegram/utils_test.go b/telegram/utils_test.go index 8b1b025..7371f7f 100644 --- a/telegram/utils_test.go +++ b/telegram/utils_test.go @@ -4,10 +4,12 @@ import ( "testing" "time" + "dev.narayana.im/narayana/telegabber/config" + "github.com/zelenin/go-tdlib/client" ) -const testTimeFormat string = "15:03 02/01/2006" +const testTimeFormat string = "15:04 02/01/2006" func TestOnlineStatus(t *testing.T) { show, status := userStatusToText(client.UserStatus(&client.UserStatusOnline{})) @@ -27,8 +29,9 @@ func TestOnlineOfflineAway(t *testing.T) { timestamp := time.Now().Unix() - 3599 time := time.Unix(timestamp, 0) show, status := userStatusToText(client.UserStatus(&client.UserStatusOffline{WasOnline: int32(timestamp)})) - if show != "away" || status != "Last seen at "+time.Format(testTimeFormat) { - t.Errorf("Wrong away status: %v, %v", show, status) + trueStatus := "Last seen at " + time.Format(testTimeFormat) + if show != "away" || status != trueStatus { + t.Errorf("Wrong away status: %v, %v, should be %v", show, status, trueStatus) } } @@ -36,7 +39,468 @@ func TestOnlineOfflineXa(t *testing.T) { timestamp := time.Now().Unix() - 3601 time := time.Unix(timestamp, 0) show, status := userStatusToText(client.UserStatus(&client.UserStatusOffline{WasOnline: int32(timestamp)})) - if show != "xa" || status != "Last seen at "+time.Format(testTimeFormat) { - t.Errorf("Wrong xa status: %v, %v", show, status) + trueStatus := "Last seen at " + time.Format(testTimeFormat) + if show != "xa" || status != trueStatus { + t.Errorf("Wrong xa status: %v, %v, should be %v", show, status, trueStatus) + } +} + +func TestFormatMessageOneline(t *testing.T) { + message := client.Message{ + Id: 42, + Content: &client.MessageText{ + Text: &client.FormattedText{ + Text: "tist", + }, + }, + } + + text := (&Client{}).formatMessage(0, 0, true, &message) + if text != "42 | | tist" { + t.Errorf("Wrong oneline message formatting: %v", text) + } +} + +func TestFormatMessageMultiline(t *testing.T) { + message := client.Message{ + Id: 42, + Content: &client.MessageText{ + Text: &client.FormattedText{ + Text: "tist\nziz", + }, + }, + } + + text := (&Client{}).formatMessage(0, 0, true, &message) + if text != "42 | | tist" { + t.Errorf("Wrong multiline message formatting: %v", text) + } +} + +func TestFormatMessageOnelinePreview(t *testing.T) { + message := client.Message{ + Id: 42, + Date: 1200000000, + Content: &client.MessageText{ + Text: &client.FormattedText{ + Text: "tist", + }, + }, + } + + text := (&Client{}).formatMessage(0, 0, false, &message) + if text != "42 | | 10 Jan 2008 21:20:00 | tist" { + t.Errorf("Wrong oneline preview message formatting: %v", text) + } +} + +func TestFormatMessageMultilinePreview(t *testing.T) { + message := client.Message{ + Id: 42, + Date: 1200000000, + Content: &client.MessageText{ + Text: &client.FormattedText{ + Text: "tist\nziz", + }, + }, + } + + text := (&Client{}).formatMessage(0, 0, false, &message) + if text != "42 | | 10 Jan 2008 21:20:00 | tist\nziz" { + t.Errorf("Wrong multiline preview message formatting: %v", text) + } +} + +func TestFormatContent(t *testing.T) { + file := client.File{ + Size: 23899, + Remote: &client.RemoteFile{ + Id: "tist", + }, + } + c := Client{ + content: &config.TelegramContentConfig{ + Link: "localhvost", + }, + } + + content := c.formatContent(&file, "a.jpg") + if content != "a.jpg (23 kbytes) | localhvost/b0896d9e9f1de7d2af59b080c3f0947b838c5c6c64f71c68a4b690a15de2ccf8.jpg" { + t.Errorf("Wrong file label: %v", content) + } +} + +func TestMessageToTextSticker(t *testing.T) { + sticker := client.Message{ + Content: &client.MessageSticker{ + Sticker: &client.Sticker{ + Emoji: "💩", + }, + }, + } + text := (&Client{}).messageToText(&sticker) + if text != "💩" { + t.Errorf("Not poop") + } +} + +func TestMessageToTextGroup(t *testing.T) { + group := client.Message{ + Content: &client.MessageBasicGroupChatCreate{}, + } + text := (&Client{}).messageToText(&group) + if text != "has created chat" { + t.Errorf("Who created the group?") + } +} + +func TestMessageToTextSupergroup(t *testing.T) { + supergroup := client.Message{ + Content: &client.MessageSupergroupChatCreate{}, + } + text := (&Client{}).messageToText(&supergroup) + if text != "has created chat" { + t.Errorf("Who created the supergroup?") + } +} + +func TestMessageChatJoin(t *testing.T) { + join := client.Message{ + Content: &client.MessageChatJoinByLink{}, + } + text := (&Client{}).messageToText(&join) + if text != "joined chat via invite link" { + t.Errorf("Non-joined") + } +} + +func TestMessageChatAddNoMembers(t *testing.T) { + add := client.Message{ + Content: &client.MessageChatAddMembers{}, + } + text := (&Client{}).messageToText(&add) + if text != "invited " { + t.Errorf("Invited someone anyway") + } +} + +func TestMessageChatChangeTitle(t *testing.T) { + title := client.Message{ + Content: &client.MessageChatChangeTitle{ + Title: "Anime", + }, + } + text := (&Client{}).messageToText(&title) + if text != "chat title set to: Anime" { + t.Errorf("How to patch KDE2 for FreeBSD?") + } +} + +func TestMessageLocation(t *testing.T) { + location := client.Message{ + Content: &client.MessageLocation{ + Location: &client.Location{ + Latitude: 50.8, + Longitude: 42.0167, + }, + }, + } + text := (&Client{}).messageToText(&location) + if text != "coordinates: 50.8,42.0167 | https://www.google.com/maps/search/50.8,42.0167/" { + t.Errorf("Excuse me, I'm lost") + } +} + +func TestMessagePhoto(t *testing.T) { + photo := client.Message{ + Content: &client.MessagePhoto{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&photo) + if text != "tist" { + t.Errorf("Wrong photo label") + } +} + +func TestMessageAudio(t *testing.T) { + audio := client.Message{ + Content: &client.MessageAudio{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&audio) + if text != "tist" { + t.Errorf("Wrong audio label") + } +} + +func TestMessageVideo(t *testing.T) { + video := client.Message{ + Content: &client.MessageVideo{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&video) + if text != "tist" { + t.Errorf("Wrong video label") + } +} + +func TestMessageDocument(t *testing.T) { + document := client.Message{ + Content: &client.MessageDocument{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&document) + if text != "tist" { + t.Errorf("Wrong document label") + } +} + +func TestMessageText(t *testing.T) { + textMessage := client.Message{ + Content: &client.MessageText{ + Text: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&textMessage) + if text != "tist" { + t.Errorf("Wrong text message") + } +} + +func TestMessageVoice(t *testing.T) { + voice := client.Message{ + Content: &client.MessageVoiceNote{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&voice) + if text != "tist" { + t.Errorf("Wrong voice label") + } +} + +func TestMessageVideoNote(t *testing.T) { + videoNote := client.Message{ + Content: &client.MessageVideoNote{}, + } + text := (&Client{}).messageToText(&videoNote) + if text != "" { + t.Errorf("Wrong video note label") + } +} + +func TestMessageAnimation(t *testing.T) { + animation := client.Message{ + Content: &client.MessageAnimation{ + Caption: &client.FormattedText{ + Text: "tist", + }, + }, + } + text := (&Client{}).messageToText(&animation) + if text != "tist" { + t.Errorf("Wrong animation label") + } +} + +func TestMessageUnknown(t *testing.T) { + unknown := client.Message{ + Content: &client.MessageExpiredPhoto{}, + } + text := (&Client{}).messageToText(&unknown) + if text != "unknown message (messageExpiredPhoto)" { + t.Errorf("Wrong label for unknown message") + } +} + +func TestContentToFilenameSticker(t *testing.T) { + sticker := client.MessageSticker{ + Sticker: &client.Sticker{}, + } + _, filename := (&Client{}).contentToFilename(&sticker) + if filename != "sticker.webp" { + t.Errorf("Wrong sticker filename") + } +} + +func TestContentToFilenameVoice(t *testing.T) { + voice := client.MessageVoiceNote{ + VoiceNote: &client.VoiceNote{ + Duration: 56, + }, + } + _, filename := (&Client{}).contentToFilename(&voice) + if filename != "voice note (56 s.).oga" { + t.Errorf("Wrong voice note filename") + } +} + +func TestContentToFilenameVideoNote(t *testing.T) { + video := client.MessageVideoNote{ + VideoNote: &client.VideoNote{ + Duration: 56, + }, + } + _, filename := (&Client{}).contentToFilename(&video) + if filename != "video note (56 s.).mp4" { + t.Errorf("Wrong video note filename") + } +} + +func TestContentToFilenameAnimation(t *testing.T) { + animation := client.MessageAnimation{ + Animation: &client.Animation{}, + } + _, filename := (&Client{}).contentToFilename(&animation) + if filename != "animation.mp4" { + t.Errorf("Wrong animation filename") + } +} + +func TestContentToFilenamePhoto(t *testing.T) { + photo := client.MessagePhoto{ + Photo: &client.Photo{ + Sizes: []*client.PhotoSize{ + &client.PhotoSize{ + Photo: &client.File{}, + }, + &client.PhotoSize{ + Photo: &client.File{ + Id: 56, + }, + }, + }, + }, + } + _, filename := (&Client{}).contentToFilename(&photo) + if filename != "56.jpg" { + t.Errorf("Wrong photo filename") + } +} + +func TestContentToFilenamePhotoNoSizes(t *testing.T) { + photo := client.MessagePhoto{ + Photo: &client.Photo{ + Sizes: []*client.PhotoSize{}, + }, + } + _, filename := (&Client{}).contentToFilename(&photo) + if filename != "" { + t.Errorf("Wrong filename of sizeless photo") + } +} + +func TestContentToFilenameAudio(t *testing.T) { + audio := client.MessageAudio{ + Audio: &client.Audio{ + FileName: "swine.mp3", + }, + } + _, filename := (&Client{}).contentToFilename(&audio) + if filename != "swine.mp3" { + t.Errorf("Not oinking, shame on you!") + } +} + +func TestContentToFilenameVideo(t *testing.T) { + video := client.MessageVideo{ + Video: &client.Video{ + FileName: "swine.3gp", + }, + } + _, filename := (&Client{}).contentToFilename(&video) + if filename != "swine.3gp" { + t.Errorf("Not pigdancing, shame on you!") + } +} + +func TestContentToFilenameDocument(t *testing.T) { + document := client.MessageDocument{ + Document: &client.Document{ + FileName: "swine.doc", + }, + } + _, filename := (&Client{}).contentToFilename(&document) + if filename != "swine.doc" { + t.Errorf("Not hoofstomping, shame on you!") + } +} + +func TestContentToFilenameUnknown(t *testing.T) { + unknown := client.MessageExpiredPhoto{} + _, filename := (&Client{}).contentToFilename(&unknown) + if filename != "" { + t.Errorf("Wrong filename of unknown content") + } +} + +func TestMessageToPrefix1(t *testing.T) { + message := client.Message{ + Id: 42, + IsOutgoing: true, + ForwardInfo: &client.MessageForwardInfo{ + Origin: &client.MessageForwardOriginHiddenUser{ + SenderName: "ziz", + }, + }, + } + prefix := (&Client{}).messageToPrefix(&message, "") + if prefix != "➡ 42 | fwd: anonymous (ziz)" { + t.Errorf("Wrong prefix: %v", prefix) + } +} + +func TestMessageToPrefix2(t *testing.T) { + message := client.Message{ + Id: 56, + ForwardInfo: &client.MessageForwardInfo{ + Origin: &client.MessageForwardOriginChannel{ + AuthorSignature: "zaz", + }, + }, + } + prefix := (&Client{}).messageToPrefix(&message, "") + if prefix != "⬅ 56 | fwd: (zaz)" { + t.Errorf("Wrong prefix: %v", prefix) + } +} + +func TestMessageToPrefix3(t *testing.T) { + message := client.Message{ + Id: 56, + ForwardInfo: &client.MessageForwardInfo{ + Origin: &client.MessageForwardOriginChannel{}, + }, + } + prefix := (&Client{}).messageToPrefix(&message, "a.jpg") + if prefix != "⬅ 56 | fwd: | file: a.jpg" { + t.Errorf("Wrong prefix: %v", prefix) + } +} + +func TestMessageToPrefix4(t *testing.T) { + message := client.Message{ + Id: 23, + IsOutgoing: true, + } + prefix := (&Client{}).messageToPrefix(&message, "") + if prefix != "➡ 23" { + t.Errorf("Wrong prefix: %v", prefix) } }