Ctrl K
ComunidadGuías…

internal/domain/botapi_update_test.go

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

Archivo original ↗Preguntar a KiBot
package domain

import (
	"bytes"
	"encoding/json"
	"testing"
	"time"
)

func TestBotAPIEphemeralPayloadCannotSerializePrivateRoutingState(t *testing.T) {
	now := time.Unix(1_800_000_000, 0)
	reply := EphemeralMessage{
		ID: 16, Peer: Peer{Type: PeerTypeChannel, ID: 1001},
		SenderUserID: 3001, ReceiverUserID: 2001, Date: int(now.Unix()) - 1,
		Content: EphemeralContent{Message: "prompt"}, Version: 1, ExpiresAt: now.Add(EphemeralMessageRetention),
	}
	payload := NewBotAPIEphemeralPayload(EphemeralMessage{
		ID: 17, Peer: Peer{Type: PeerTypeChannel, ID: 1001},
		SenderUserID: 2001, ReceiverUserID: 3001, Date: int(now.Unix()),
		RandomID: 99, ReplyToEphemeralID: reply.ID, Content: EphemeralContent{Message: "private"},
		OriginDevice: EphemeralDevice{UserID: 2001, BusinessAuthKeyID: [8]byte{1, 2, 3}, SessionID: 44},
		PayloadHash:  [32]byte{5, 6, 7}, Version: 1,
		CreatedAt: now, ExpiresAt: now.Add(EphemeralMessageRetention), BotAPIReply: &reply,
	})
	raw, err := json.Marshal(payload)
	if err != nil {
		t.Fatal(err)
	}
	for _, privateField := range [][]byte{
		[]byte("RandomID"), []byte("OriginDevice"), []byte("BusinessAuthKeyID"),
		[]byte("SessionID"), []byte("PayloadHash"), []byte("CreatedAt"),
	} {
		if bytes.Contains(raw, privateField) {
			t.Fatalf("durable Bot API envelope leaked %s: %s", privateField, raw)
		}
	}
	if payload.Validate() != nil || payload.Message.ID != 17 || payload.Message.Content.Message != "private" || payload.Message.ExpiresAt.IsZero() ||
		payload.ReplyTo == nil || payload.ReplyTo.ID != reply.ID {
		t.Fatalf("public payload=%+v", payload)
	}
}