Ctrl K
ComunidadGuías…

internal/domain/ephemeral_test.go

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

Archivo original ↗Preguntar a KiBot
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)
	}
}