telegabber/telegram/utils_test.go

544 lines
13 KiB
Go

package telegram
import (
"testing"
"time"
"dev.narayana.im/narayana/telegabber/config"
"dev.narayana.im/narayana/telegabber/persistence"
"github.com/zelenin/go-tdlib/client"
)
const testTimeFormat string = "15:04 02/01/2006"
func TestOnlineStatus(t *testing.T) {
c := Client{
DelayedStatuses: make(map[int64]*DelayedStatus),
}
show, status, presenceType := (&c).userStatusToText(client.UserStatus(&client.UserStatusOnline{}), 0)
if show != "" || status != "Online" || presenceType != "" {
t.Errorf("Wrong online status: %v, %v", show, status)
}
}
func TestOnlineRecently(t *testing.T) {
show, status, presenceType := (&Client{}).userStatusToText(client.UserStatus(&client.UserStatusRecently{}), 0)
if show != "dnd" || status != "Last seen recently" || presenceType != "" {
t.Errorf("Wrong recently status: %v, %v", show, status)
}
}
func TestOnlineOfflineAway(t *testing.T) {
location, _ := time.LoadLocation("Europe/Berlin")
timestamp := time.Now().In(location).Unix() - 3599
tm := time.Unix(timestamp, 0).In(location)
c := &Client{
Session: &persistence.Session{
Timezone: "+01:00",
},
}
show, status, presenceType := c.userStatusToText(client.UserStatus(&client.UserStatusOffline{WasOnline: int32(timestamp)}), 0)
trueStatus := "Last seen at " + tm.Format(testTimeFormat)
if show != "away" || status != trueStatus || presenceType != "" {
t.Errorf("Wrong away status: %v, %v, should be %v", show, status, trueStatus)
}
}
func TestOnlineOfflineXa(t *testing.T) {
timestamp := time.Now().Unix() - 3601
tm := time.Unix(timestamp, 0).UTC()
c := &Client{
Session: &persistence.Session{},
}
show, status, presenceType := c.userStatusToText(client.UserStatus(&client.UserStatusOffline{WasOnline: int32(timestamp)}), 0)
trueStatus := "Last seen at " + tm.Format(testTimeFormat)
if show != "xa" || status != trueStatus || presenceType != "" {
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",
},
},
}
c := &Client{
Session: &persistence.Session{},
}
text := c.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",
},
},
}
c := &Client{
Session: &persistence.Session{},
}
text := c.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,
Local: &client.LocalFile{
Path: "c:/Documents and Settings/blabla.jpg",
},
Remote: &client.RemoteFile{
UniqueId: "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, false)
if text != "💩" {
t.Errorf("Not poop")
}
}
func TestMessageToTextGroup(t *testing.T) {
group := client.Message{
Content: &client.MessageBasicGroupChatCreate{},
}
text := (&Client{}).messageToText(&group, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
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, false)
if text != "tist" {
t.Errorf("Wrong voice label")
}
}
func TestMessageVideoNote(t *testing.T) {
videoNote := client.Message{
Content: &client.MessageVideoNote{},
}
text := (&Client{}).messageToText(&videoNote, false)
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, false)
if text != "tist" {
t.Errorf("Wrong animation label")
}
}
func TestMessageUnknown(t *testing.T) {
unknown := client.Message{
Content: &client.MessageExpiredPhoto{},
}
text := (&Client{}).messageToText(&unknown, false)
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",
Audio: &client.File{
Local: &client.LocalFile{
Path: "C:/WINNT/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",
Video: &client.File{
Local: &client.LocalFile{
Path: "C:/Document and Settings/Svinarchuk-PC/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",
Document: &client.File{
Local: &client.LocalFile{
Path: "D:/My Documents/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{Session: &persistence.Session{}}).messageToPrefix(&message, "")
if prefix != "➡ 42 | fwd: 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{Session: &persistence.Session{}}).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{Session: &persistence.Session{AsciiArrows: true}}).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{Session: &persistence.Session{AsciiArrows: true}}).messageToPrefix(&message, "")
if prefix != "> 23" {
t.Errorf("Wrong prefix: %v", prefix)
}
}