owpengram-server/internal/domain/ephemeral_test.go
A f49c817def feat: sync ephemeral transient messages
Sync telesrv 570ccf8 (feat(ephemeral): implement Layer 228 transient messages).

Skipped telesrv docs changes per public sync rules; normalized the public appearance seed label.
2026-07-20 16:43:27 +08:00

64 lines
2.4 KiB
Go

package domain
import (
"errors"
"testing"
"time"
)
func TestValidateEphemeralContentBoundsAllRetainedVectors(t *testing.T) {
valid := EphemeralContent{
Message: "hi 👋",
Entities: []MessageEntity{{Type: MessageEntityBold, Offset: 0, Length: 2}},
ReplyMarkup: &MessageReplyMarkup{Type: MessageReplyMarkupInline, Inline: [][]MarkupButton{{{
Type: MarkupButtonCallback, Text: "OK", Data: []byte("ok"),
}}}},
}
if err := ValidateEphemeralContent(valid); err != nil {
t.Fatalf("valid content: %v", err)
}
badBounds := valid
badBounds.Entities = []MessageEntity{{Type: MessageEntityBold, Offset: 5, Length: 2}}
if err := ValidateEphemeralContent(badBounds); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("entity bounds err=%v", err)
}
badKeyboard := valid
badKeyboard.ReplyMarkup = &MessageReplyMarkup{Type: MessageReplyMarkupKeyboard, Keyboard: [][]MarkupButton{{{
Type: MarkupButtonText, Text: "public keyboard",
}}}}
if err := ValidateEphemeralContent(badKeyboard); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("reply keyboard err=%v", err)
}
badRich := EphemeralContent{RichMessage: &MessageRichMessage{Blocks: make([]byte, MaxEphemeralRichBlocksBytes+1)}}
if err := ValidateEphemeralContent(badRich); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("rich bound err=%v", err)
}
badMedia := EphemeralContent{Media: &MessageMedia{Kind: MessageMediaKindPhoto}}
if err := ValidateEphemeralContent(badMedia); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("media shape err=%v", err)
}
}
func TestEphemeralStoredStateRejectsPartialDeviceAndInvalidTombstone(t *testing.T) {
now := time.Unix(1_800_000_000, 0)
message := EphemeralMessage{
ID: 17, Peer: Peer{Type: PeerTypeChannel, ID: 1001},
SenderUserID: 2001, ReceiverUserID: 3001, Date: int(now.Unix()), RandomID: 9,
Content: EphemeralContent{Message: "private"}, OriginDevice: EphemeralDevice{UserID: 3001},
PayloadHash: [32]byte{1}, Version: 1, CreatedAt: now, ExpiresAt: now.Add(EphemeralMessageRetention),
}
if err := message.ValidateStored(); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("partial device err=%v", err)
}
message.OriginDevice = EphemeralDevice{}
message.Deleted = true
message.Content = EphemeralContent{}
if err := message.ValidateStored(); !errors.Is(err, ErrEphemeralInvalid) {
t.Fatalf("version-one tombstone err=%v", err)
}
message.Version = 2
if err := message.ValidateStored(); err != nil {
t.Fatalf("valid tombstone err=%v", err)
}
}