Implement beforeMessageGUID/afterMessageGUID/beforeDate
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"code.severnaya.net/kordophone-mock/v2/data"
|
||||
"code.severnaya.net/kordophone-mock/v2/model"
|
||||
"code.severnaya.net/kordophone-mock/v2/server"
|
||||
"code.severnaya.net/kordophone-mock/v2/web"
|
||||
@@ -342,3 +343,100 @@ func TestMarkConversation(t *testing.T) {
|
||||
t.Fatalf("Unexpected unread count: %d (expected %d)", convo.UnreadCount, 0)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessageQueries(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: true})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
// Mock conversation
|
||||
guid := "1234567890"
|
||||
conversation := model.Conversation{
|
||||
Date: time.Now(),
|
||||
Participants: []string{"Alice"},
|
||||
UnreadCount: 0,
|
||||
Guid: guid,
|
||||
}
|
||||
|
||||
s.Server.AddConversation(conversation)
|
||||
|
||||
// Mock messages
|
||||
numMessages := 20
|
||||
for i := 0; i < numMessages; i++ {
|
||||
message := data.GenerateRandomMessage(conversation.Participants)
|
||||
s.Server.AppendMessageToConversation(&conversation, message)
|
||||
}
|
||||
|
||||
// Pick a pivot message from the sorted list
|
||||
sortedMessages := s.Server.MessagesForConversation(&conversation)
|
||||
pivotMessage := sortedMessages[len(sortedMessages)/2]
|
||||
|
||||
// Query messages before the pivot, test limit also
|
||||
limitMessageCount := 5
|
||||
resp, err := http.Get(httpServer.URL + fmt.Sprintf("/messages?guid=%s&beforeMessageGUID=%s&limit=%d", guid, pivotMessage.Guid, limitMessageCount))
|
||||
if err != nil {
|
||||
t.Fatalf("TestMessageQueries error: %s", err)
|
||||
}
|
||||
|
||||
// Decode response
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
t.Fatalf("Error decoding body: %s", body)
|
||||
}
|
||||
|
||||
var messages []model.Message
|
||||
err = json.Unmarshal(body, &messages)
|
||||
if err != nil {
|
||||
t.Fatalf("Error unmarshalling JSON: %s", err)
|
||||
}
|
||||
|
||||
if len(messages) != limitMessageCount {
|
||||
t.Fatalf("Unexpected num messages: %d (expected %d)", len(messages), limitMessageCount)
|
||||
}
|
||||
|
||||
// Make sure before query is exclusive of the pivot message
|
||||
for _, message := range messages {
|
||||
if message.Guid == pivotMessage.Guid {
|
||||
t.Fatalf("Found pivot guid in before query: %s (expected != %s)", message.Guid, pivotMessage.Guid)
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure messages are actually before the pivot
|
||||
for _, message := range messages {
|
||||
if message.Date.After(pivotMessage.Date) {
|
||||
t.Fatalf("Unexpected message date: %s (expected before %s)", message.Date, pivotMessage.Date)
|
||||
}
|
||||
}
|
||||
|
||||
// Query messages after the pivot
|
||||
resp, err = http.Get(httpServer.URL + fmt.Sprintf("/messages?guid=%s&afterMessageGUID=%s", guid, pivotMessage.Guid))
|
||||
if err != nil {
|
||||
t.Fatalf("TestMessageQueries error: %s", err)
|
||||
}
|
||||
|
||||
// Decode response
|
||||
body, err = io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
t.Fatalf("Error decoding body: %s", body)
|
||||
}
|
||||
|
||||
messages = []model.Message{}
|
||||
err = json.Unmarshal(body, &messages)
|
||||
if err != nil {
|
||||
t.Fatalf("Error unmarshalling JSON: %s", err)
|
||||
}
|
||||
|
||||
// Make sure after query is exclusive of the pivot message
|
||||
for _, message := range messages {
|
||||
if message.Guid == pivotMessage.Guid {
|
||||
t.Fatalf("Found pivot guid in after query: %s (expected != %s)", message.Guid, pivotMessage.Guid)
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure messages are actually after the pivot
|
||||
for _, message := range messages {
|
||||
if message.Date.Before(pivotMessage.Date) {
|
||||
t.Fatalf("Unexpected message date: %s (expected after %s)", message.Date, pivotMessage.Date)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user