77 lines
2.7 KiB
Go
77 lines
2.7 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"unicode/utf16"
|
|
)
|
|
|
|
func TestWelcomeMessageContentAndFingerprint(t *testing.T) {
|
|
peer := Peer{Type: PeerTypeChannel, ID: 42}
|
|
content := WelcomeMessageContent{Message: "Welcome 👋"}
|
|
if err := content.Validate(); err != nil {
|
|
t.Fatalf("valid content: %v", err)
|
|
}
|
|
first, err := WelcomeCreateFingerprint(peer, 7, 99, content)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
second, err := WelcomeCreateFingerprint(peer, 7, 99, content)
|
|
if err != nil || first != second || first == ([32]byte{}) {
|
|
t.Fatalf("deterministic fingerprint = %x/%x err=%v", first, second, err)
|
|
}
|
|
changed, err := WelcomeCreateFingerprint(peer, 7, 99, WelcomeMessageContent{Message: "Different"})
|
|
if err != nil || changed == first {
|
|
t.Fatalf("changed fingerprint = %x err=%v", changed, err)
|
|
}
|
|
if err := (WelcomeMessageContent{Message: "text", InvertMedia: true}).Validate(); !errors.Is(err, ErrWelcomeMessageInvalid) {
|
|
t.Fatalf("invert without media err = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestWelcomeMessageEditFields(t *testing.T) {
|
|
current := WelcomeMessageContent{Message: "before", NoForwards: true}
|
|
updated, err := (WelcomeMessageEditFields{
|
|
SetMessage: true, Message: "after", SetEntities: true,
|
|
}).Apply(current)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if updated.Message != "after" || !updated.NoForwards || len(updated.Entities) != 0 {
|
|
t.Fatalf("updated content = %+v", updated)
|
|
}
|
|
if _, err := (WelcomeMessageEditFields{}).Apply(current); !errors.Is(err, ErrWelcomeMessageInvalid) {
|
|
t.Fatalf("empty edit err = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestNextWelcomeRevision(t *testing.T) {
|
|
if next, err := NextWelcomeRevision(InitialWelcomeRevision); err != nil || next != 2 {
|
|
t.Fatalf("next revision = %d,%v", next, err)
|
|
}
|
|
if _, err := NextWelcomeRevision(0); !errors.Is(err, ErrWelcomeMessageRevisionOverflow) {
|
|
t.Fatalf("zero revision err = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestOfficialWelcomeMessageLinksUpdatesChannel(t *testing.T) {
|
|
body := "Welcome! Join " + officialUpdatesChannelMention + " for updates."
|
|
msg, err := OfficialWelcomeMessage(1780243200, body, 1_700_000_000)
|
|
if err != nil {
|
|
t.Fatalf("body %q: %v", body, err)
|
|
}
|
|
if len(msg.Entities) != 1 {
|
|
t.Fatalf("body %q: entities = %+v, want one mention", body, msg.Entities)
|
|
}
|
|
ent := msg.Entities[0]
|
|
if ent.Type != MessageEntityMention {
|
|
t.Fatalf("entity type = %q, want mention", ent.Type)
|
|
}
|
|
units := utf16.Encode([]rune(msg.Body))
|
|
if ent.Offset < 0 || ent.Length <= 0 || ent.Offset+ent.Length > len(units) {
|
|
t.Fatalf("entity %+v out of bounds for body of %d utf16 units", ent, len(units))
|
|
}
|
|
if got := string(utf16.Decode(units[ent.Offset : ent.Offset+ent.Length])); got != officialUpdatesChannelMention {
|
|
t.Fatalf("entity spans %q, want %q", got, officialUpdatesChannelMention)
|
|
}
|
|
}
|