owpengram-server/internal/domain/media_category_test.go

51 lines
3 KiB
Go

package domain
import (
"reflect"
"testing"
)
func TestClassifyMediaCategories(t *testing.T) {
doc := func(attrs ...DocumentAttribute) *MessageMedia {
return &MessageMedia{Kind: MessageMediaKindDocument, Document: &Document{Attributes: attrs}}
}
urlEnt := []MessageEntity{{Type: MessageEntityURL}}
textURLEnt := []MessageEntity{{Type: MessageEntityTextURL}}
emailEnt := []MessageEntity{{Type: MessageEntityEmail}}
cases := []struct {
name string
media *MessageMedia
entities []MessageEntity
want []MediaCategory
}{
{"nil media no entities", nil, nil, []MediaCategory{}},
{"photo", &MessageMedia{Kind: MessageMediaKindPhoto, Photo: &Photo{}}, nil, []MediaCategory{MediaCategoryPhoto}},
{"poll", &MessageMedia{Kind: MessageMediaKindPoll}, nil, []MediaCategory{MediaCategoryPoll}},
{"video", doc(DocumentAttribute{Kind: DocAttrVideo}), nil, []MediaCategory{MediaCategoryVideo}},
{"round video note", doc(DocumentAttribute{Kind: DocAttrVideo, RoundMessage: true}), nil, []MediaCategory{MediaCategoryRoundVideo}},
{"gif animation", doc(DocumentAttribute{Kind: DocAttrAnimated}), nil, []MediaCategory{MediaCategoryGif}},
{"music", doc(DocumentAttribute{Kind: DocAttrAudio}), nil, []MediaCategory{MediaCategoryMusic}},
{"voice", doc(DocumentAttribute{Kind: DocAttrAudio, Voice: true}), nil, []MediaCategory{MediaCategoryVoice}},
{"generic file", doc(DocumentAttribute{Kind: DocAttrFilename, FileName: "x.pdf"}), nil, []MediaCategory{MediaCategoryFile}},
{"sticker excluded", doc(DocumentAttribute{Kind: DocAttrSticker}), nil, []MediaCategory{}},
{"animated sticker excluded", doc(DocumentAttribute{Kind: DocAttrSticker}, DocumentAttribute{Kind: DocAttrAnimated}), nil, []MediaCategory{}},
{"photo with url", &MessageMedia{Kind: MessageMediaKindPhoto, Photo: &Photo{}}, urlEnt, []MediaCategory{MediaCategoryPhoto, MediaCategoryURL}},
{"text-only url", nil, urlEnt, []MediaCategory{MediaCategoryURL}},
{"text-only text_url", nil, textURLEnt, []MediaCategory{MediaCategoryURL}},
{"text-only email", nil, emailEnt, []MediaCategory{MediaCategoryURL}},
{"webpage media", &MessageMedia{Kind: MessageMediaKindWebPage, WebPage: &MessageWebPage{State: MessageWebPageStateDone, ID: 1, URL: "https://example.test"}}, nil, []MediaCategory{MediaCategoryURL}},
{"webpage media with url entity deduped", &MessageMedia{Kind: MessageMediaKindWebPage, WebPage: &MessageWebPage{State: MessageWebPageStateDone, ID: 1, URL: "https://example.test"}}, urlEnt, []MediaCategory{MediaCategoryURL}},
{"file with link", doc(DocumentAttribute{Kind: DocAttrFilename}), urlEnt, []MediaCategory{MediaCategoryFile, MediaCategoryURL}},
{"geo not indexed", &MessageMedia{Kind: MessageMediaKindGeo}, nil, []MediaCategory{}},
{"contact not indexed", &MessageMedia{Kind: MessageMediaKindContact}, nil, []MediaCategory{}},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
got := ClassifyMediaCategories(tc.media, tc.entities)
if !reflect.DeepEqual(got, tc.want) {
t.Fatalf("ClassifyMediaCategories = %v, want %v", got, tc.want)
}
})
}
}