Ctrl K
ComunidadGuías…

internal/domain/message_entity_autodetect_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package domain

import (
	"reflect"
	"strings"
	"testing"
)

func TestDetectAutomaticMessageEntitiesUsesUTF16AndWhitespaceBoundaries(t *testing.T) {
	message := "اعلان 🚀\n\n@matrixG"
	want := []MessageEntity{{Type: MessageEntityMention, Offset: 10, Length: 8}}
	if got := DetectAutomaticMessageEntities(message, nil); !reflect.DeepEqual(got, want) {
		t.Fatalf("entities = %+v, want %+v", got, want)
	}
}

func TestDetectAutomaticMessageEntitiesCoversLexicalTypes(t *testing.T) {
	message := "@alice #golang $USD /help@matrix_bot"
	want := []MessageEntity{
		{Type: MessageEntityMention, Offset: 0, Length: 6},
		{Type: MessageEntityHashtag, Offset: 7, Length: 7},
		{Type: MessageEntityCashtag, Offset: 15, Length: 4},
		{Type: MessageEntityBotCommand, Offset: 20, Length: 16},
	}
	if got := DetectAutomaticMessageEntities(message, nil); !reflect.DeepEqual(got, want) {
		t.Fatalf("entities = %+v, want %+v", got, want)
	}
}

func TestDetectAutomaticMessageEntitiesSkipsEmailURLsAndOccupiedRanges(t *testing.T) {
	message := "mail bob@example.com https://t.me/@scam github.com/@other @real"
	got := DetectAutomaticMessageEntities(message, []MessageEntitySpan{{Offset: 58, Length: 5}})
	if len(got) != 0 {
		t.Fatalf("entities = %+v, want no email, URL-path or occupied mention", got)
	}
}

func TestDetectAutomaticMessageEntitiesMentionBoundaries(t *testing.T) {
	tests := []struct {
		name    string
		message string
		want    []MessageEntity
	}{
		{
			name:    "maximum username length",
			message: "\n@" + strings.Repeat("a", 32),
			want:    []MessageEntity{{Type: MessageEntityMention, Offset: 1, Length: 33}},
		},
		{
			name:    "username too long",
			message: "@" + strings.Repeat("a", 33),
		},
		{
			name:    "unicode word prefix",
			message: "نام@matrixG",
		},
		{
			name:    "duplicate at prefix",
			message: "@@matrixG",
		},
		{
			name:    "punctuation boundary",
			message: "(@matrixG)",
			want:    []MessageEntity{{Type: MessageEntityMention, Offset: 1, Length: 8}},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := DetectAutomaticMessageEntities(tt.message, nil); !reflect.DeepEqual(got, tt.want) {
				t.Fatalf("entities = %+v, want %+v", got, tt.want)
			}
		})
	}
}

func TestDetectAutomaticMessageEntitiesCapsDerivedEntities(t *testing.T) {
	message := strings.Repeat("@a ", MaxMessageEntityCount+1)
	got := DetectAutomaticMessageEntities(message, nil)
	if len(got) != MaxMessageEntityCount {
		t.Fatalf("entity count = %d, want %d", len(got), MaxMessageEntityCount)
	}
}