Private
Public Access
1
0

Fix tests: Need to write proper date unmarshalling also

This commit is contained in:
2024-03-01 23:01:57 -08:00
parent 831636216d
commit c666083e4b
2 changed files with 39 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
package model package model
import ( import (
"errors"
"fmt" "fmt"
"time" "time"
) )
@@ -8,7 +9,11 @@ import (
type Date time.Time type Date time.Time
func (d Date) Equal(other Date) bool { func (d Date) Equal(other Date) bool {
return time.Time(d).Equal(time.Time(other)) // usec and nsec are lost in ISO8601 conversion
dr := time.Time(d).Round(time.Minute)
or := time.Time(other).Round(time.Minute)
return dr.Equal(or)
} }
func (d Date) After(other Date) bool { func (d Date) After(other Date) bool {
@@ -23,8 +28,26 @@ func (d Date) Format(layout string) string {
return time.Time(d).Format(layout) return time.Time(d).Format(layout)
} }
func (t Date) MarshalJSON() ([]byte, error) { func (d Date) MarshalJSON() ([]byte, error) {
// Must use ISO8601 // Must use ISO8601
formatted := fmt.Sprintf("\"%s\"", time.Time(t).Format("2006-01-02T15:04:05+00:00")) formatted := fmt.Sprintf("\"%s\"", time.Time(d).Format("2006-01-02T15:04:05+00:00"))
return []byte(formatted), nil return []byte(formatted), nil
} }
func (d *Date) UnmarshalJSON(data []byte) error {
if len(data) < 2 || data[0] != '"' || data[len(data)-1] != '"' {
return errors.New("Time.UnmarshalJSON: input is not a JSON string")
}
data = data[len(`"`) : len(data)-len(`"`)]
var err error
var t time.Time
t, err = time.ParseInLocation("2006-01-02T15:04:05+00:00", string(data), time.Now().Location())
if err != nil {
return err
}
*d = Date(t)
return nil
}

View File

@@ -59,7 +59,7 @@ func TestConversations(t *testing.T) {
httpServer := httptest.NewServer(server) httpServer := httptest.NewServer(server)
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice", "Bob"}, Participants: []string{"Alice", "Bob"},
UnreadCount: 1, UnreadCount: 1,
LastMessagePreview: "Hello world", LastMessagePreview: "Hello world",
@@ -102,7 +102,7 @@ func TestMessages(t *testing.T) {
const text = "This is a test." const text = "This is a test."
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{sender}, Participants: []string{sender},
UnreadCount: 1, UnreadCount: 1,
Guid: "1234567890", Guid: "1234567890",
@@ -113,7 +113,7 @@ func TestMessages(t *testing.T) {
message := model.Message{ message := model.Message{
Text: text, Text: text,
Sender: &conversation.Participants[0], Sender: &conversation.Participants[0],
Date: time.Now(), Date: model.Date(time.Now()),
} }
server.Server.AppendMessageToConversation(&conversation, message) server.Server.AppendMessageToConversation(&conversation, message)
@@ -245,7 +245,7 @@ func TestUpdates(t *testing.T) {
// Mock conversation // Mock conversation
guid := "1234567890" guid := "1234567890"
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice"}, Participants: []string{"Alice"},
UnreadCount: 0, UnreadCount: 0,
Guid: guid, Guid: guid,
@@ -256,7 +256,7 @@ func TestUpdates(t *testing.T) {
message := model.Message{ message := model.Message{
Text: "This is a test.", Text: "This is a test.",
Sender: &conversation.Participants[0], Sender: &conversation.Participants[0],
Date: time.Now(), Date: model.Date(time.Now()),
} }
// This should enqueue an update item // This should enqueue an update item
@@ -318,7 +318,7 @@ func TestUpdatesWebsocket(t *testing.T) {
// Mock conversation // Mock conversation
guid := "1234567890" guid := "1234567890"
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice"}, Participants: []string{"Alice"},
UnreadCount: 0, UnreadCount: 0,
Guid: guid, Guid: guid,
@@ -329,7 +329,7 @@ func TestUpdatesWebsocket(t *testing.T) {
message := model.Message{ message := model.Message{
Text: "This is a test.", Text: "This is a test.",
Sender: &conversation.Participants[0], Sender: &conversation.Participants[0],
Date: time.Now(), Date: model.Date(time.Now()),
} }
// Open websocket connection // Open websocket connection
@@ -402,7 +402,7 @@ func TestMarkConversation(t *testing.T) {
// Mock conversation // Mock conversation
guid := "1234567890" guid := "1234567890"
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice"}, Participants: []string{"Alice"},
UnreadCount: 0, UnreadCount: 0,
Guid: guid, Guid: guid,
@@ -414,7 +414,7 @@ func TestMarkConversation(t *testing.T) {
message := model.Message{ message := model.Message{
Text: "This is a test.", Text: "This is a test.",
Sender: &conversation.Participants[0], Sender: &conversation.Participants[0],
Date: time.Now(), Date: model.Date(time.Now()),
} }
s.Server.ReceiveMessage(&conversation, message) s.Server.ReceiveMessage(&conversation, message)
@@ -445,7 +445,7 @@ func TestMessageQueries(t *testing.T) {
// Mock conversation // Mock conversation
guid := "1234567890" guid := "1234567890"
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice"}, Participants: []string{"Alice"},
UnreadCount: 0, UnreadCount: 0,
Guid: guid, Guid: guid,
@@ -497,7 +497,7 @@ func TestMessageQueries(t *testing.T) {
// Make sure messages are actually before the pivot // Make sure messages are actually before the pivot
for _, message := range messages { for _, message := range messages {
if message.Date.After(pivotMessage.Date) { if message.Date.After(pivotMessage.Date) {
t.Fatalf("Unexpected message date: %s (expected before %s)", message.Date, pivotMessage.Date) t.Fatalf("Unexpected message date.")
} }
} }
@@ -529,7 +529,7 @@ func TestMessageQueries(t *testing.T) {
// Make sure messages are actually after the pivot // Make sure messages are actually after the pivot
for _, message := range messages { for _, message := range messages {
if message.Date.Before(pivotMessage.Date) { if message.Date.Before(pivotMessage.Date) {
t.Fatalf("Unexpected message date: %s (expected after %s)", message.Date, pivotMessage.Date) t.Fatalf("Unexpected message date")
} }
} }
@@ -542,7 +542,7 @@ func TestSendMessage(t *testing.T) {
// Mock conversation // Mock conversation
guid := "1234567890" guid := "1234567890"
conversation := model.Conversation{ conversation := model.Conversation{
Date: time.Now(), Date: model.Date(time.Now()),
Participants: []string{"Alice"}, Participants: []string{"Alice"},
UnreadCount: 0, UnreadCount: 0,
Guid: guid, Guid: guid,