owpengram-server/internal/store/private_send_idempotency_test.go

56 lines
2.2 KiB
Go

package store
import (
"testing"
"telesrv/internal/domain"
)
func TestPrivateSendSnapshotIsDeepAndVersioned(t *testing.T) {
message := domain.Message{
ID: 7, UID: 8, RandomID: 9, OwnerUserID: 10,
Peer: domain.Peer{Type: domain.PeerTypeUser, ID: 11},
From: domain.Peer{Type: domain.PeerTypeUser, ID: 10},
Date: 12, Out: true, Body: "first", Pts: 13,
Entities: []domain.MessageEntity{{Type: domain.MessageEntityBold, Length: 5}},
Media: &domain.MessageMedia{Kind: domain.MessageMediaKindContact, Contact: &domain.MessageContact{PhoneNumber: "+1", FirstName: "Alice"}},
}
raw, err := EncodePrivateSendSnapshot(message)
if err != nil {
t.Fatalf("encode private snapshot: %v", err)
}
message.Body = "mutated"
message.Entities[0].Length = 1
message.Media.Contact.FirstName = "Mutated"
decoded, err := DecodePrivateSendSnapshot(raw)
if err != nil {
t.Fatalf("decode private snapshot: %v", err)
}
if decoded.Body != "first" || decoded.Entities[0].Length != 5 || decoded.Media.Contact.FirstName != "Alice" {
t.Fatalf("decoded private snapshot = %+v, want immutable nested graph", decoded)
}
decoded.Media.Contact.FirstName = "Second mutation"
again, err := DecodePrivateSendSnapshot(raw)
if err != nil || again.Media.Contact.FirstName != "Alice" {
t.Fatalf("second decode = %+v err=%v, want fresh graph", again, err)
}
}
func TestChannelSendSnapshotRejectsEmptyLegacyValue(t *testing.T) {
if _, err := DecodeChannelSendSnapshot([]byte(`{}`)); err == nil {
t.Fatal("empty legacy channel snapshot decoded successfully")
}
message := domain.ChannelMessage{
ChannelID: 21, ID: 22, RandomID: 23, SenderUserID: 24,
From: domain.Peer{Type: domain.PeerTypeUser, ID: 24},
Date: 25, Body: "channel", Pts: 26,
}
raw, err := EncodeChannelSendSnapshot(message)
if err != nil {
t.Fatalf("encode channel snapshot: %v", err)
}
decoded, err := DecodeChannelSendSnapshot(raw)
if err != nil || decoded.ChannelID != message.ChannelID || decoded.ID != message.ID || decoded.RandomID != message.RandomID || decoded.SenderUserID != message.SenderUserID || decoded.Body != message.Body || decoded.Pts != message.Pts {
t.Fatalf("decoded channel snapshot = %+v err=%v, want %+v", decoded, err, message)
}
}