fix: preserve formatted date message entities
This commit is contained in:
parent
53105b6823
commit
03b785ebf4
10 changed files with 214 additions and 31 deletions
|
|
@ -243,6 +243,13 @@ type messageEntityJSON struct {
|
|||
Language string `json:"language,omitempty"`
|
||||
DocumentID int64 `json:"document_id,omitempty"`
|
||||
Collapsed bool `json:"collapsed,omitempty"`
|
||||
Date int `json:"date,omitempty"`
|
||||
Relative bool `json:"relative,omitempty"`
|
||||
ShortTime bool `json:"short_time,omitempty"`
|
||||
LongTime bool `json:"long_time,omitempty"`
|
||||
ShortDate bool `json:"short_date,omitempty"`
|
||||
LongDate bool `json:"long_date,omitempty"`
|
||||
DayOfWeek bool `json:"day_of_week,omitempty"`
|
||||
}
|
||||
|
||||
func encodeMessageEntities(entities []domain.MessageEntity) ([]byte, error) {
|
||||
|
|
@ -260,6 +267,13 @@ func encodeMessageEntities(entities []domain.MessageEntity) ([]byte, error) {
|
|||
Language: entity.Language,
|
||||
DocumentID: entity.DocumentID,
|
||||
Collapsed: entity.Collapsed,
|
||||
Date: entity.Date,
|
||||
Relative: entity.Relative,
|
||||
ShortTime: entity.ShortTime,
|
||||
LongTime: entity.LongTime,
|
||||
ShortDate: entity.ShortDate,
|
||||
LongDate: entity.LongDate,
|
||||
DayOfWeek: entity.DayOfWeek,
|
||||
})
|
||||
}
|
||||
raw, err := json.Marshal(wire)
|
||||
|
|
@ -288,6 +302,13 @@ func decodeMessageEntities(raw string) ([]domain.MessageEntity, error) {
|
|||
Language: entity.Language,
|
||||
DocumentID: entity.DocumentID,
|
||||
Collapsed: entity.Collapsed,
|
||||
Date: entity.Date,
|
||||
Relative: entity.Relative,
|
||||
ShortTime: entity.ShortTime,
|
||||
LongTime: entity.LongTime,
|
||||
ShortDate: entity.ShortDate,
|
||||
LongDate: entity.LongDate,
|
||||
DayOfWeek: entity.DayOfWeek,
|
||||
})
|
||||
}
|
||||
return out, nil
|
||||
|
|
|
|||
33
internal/store/postgres/message_helpers_test.go
Normal file
33
internal/store/postgres/message_helpers_test.go
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package postgres
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
func TestMessageEntityJSONRoundTripPreservesFormattedDate(t *testing.T) {
|
||||
in := []domain.MessageEntity{
|
||||
{
|
||||
Type: domain.MessageEntityFormattedDate,
|
||||
Offset: 2,
|
||||
Length: 5,
|
||||
Date: 1773436800,
|
||||
Relative: true,
|
||||
ShortTime: true,
|
||||
LongDate: true,
|
||||
DayOfWeek: true,
|
||||
},
|
||||
}
|
||||
raw, err := encodeMessageEntities(in)
|
||||
if err != nil {
|
||||
t.Fatalf("encodeMessageEntities: %v", err)
|
||||
}
|
||||
out, err := decodeMessageEntities(string(raw))
|
||||
if err != nil {
|
||||
t.Fatalf("decodeMessageEntities: %v", err)
|
||||
}
|
||||
if !sameMessageEntities(in, out) {
|
||||
t.Fatalf("round-trip entities = %+v raw=%s, want %+v", out, raw, in)
|
||||
}
|
||||
}
|
||||
|
|
@ -43,7 +43,10 @@ func TestMessageStoreSendPrivateTextRoundTrip(t *testing.T) {
|
|||
RecipientUserID: recipient.ID,
|
||||
RandomID: 123456,
|
||||
Message: "hello from pg",
|
||||
Entities: []domain.MessageEntity{{Type: domain.MessageEntityBold, Offset: 0, Length: 5}},
|
||||
Entities: []domain.MessageEntity{
|
||||
{Type: domain.MessageEntityBold, Offset: 0, Length: 5},
|
||||
{Type: domain.MessageEntityFormattedDate, Offset: 6, Length: 4, Date: 1773436800, ShortTime: true, LongDate: true},
|
||||
},
|
||||
Date: 1700000200,
|
||||
OriginAuthKeyID: originAuthKeyID,
|
||||
OriginSessionID: 77,
|
||||
|
|
@ -73,6 +76,9 @@ func TestMessageStoreSendPrivateTextRoundTrip(t *testing.T) {
|
|||
if len(senderHistory.Messages) != 1 || len(recipientHistory.Messages) != 1 {
|
||||
t.Fatalf("history sizes = sender %d recipient %d, want both owner partitions populated", len(senderHistory.Messages), len(recipientHistory.Messages))
|
||||
}
|
||||
if !sameMessageEntities(senderHistory.Messages[0].Entities, req.Entities) || !sameMessageEntities(recipientHistory.Messages[0].Entities, req.Entities) {
|
||||
t.Fatalf("history entities sender=%+v recipient=%+v, want %+v", senderHistory.Messages[0].Entities, recipientHistory.Messages[0].Entities, req.Entities)
|
||||
}
|
||||
|
||||
events, err := NewUpdateEventStore(pool).ListAfter(ctx, recipient.ID, 0, 10)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue