Files
services/threads/handler/recent_messages_test.go
Dominic Wong 8e38c8b834 multi tenant threads (#78)
* multitenant threads

* auth for v1
2021-03-25 17:33:20 +00:00

101 lines
2.7 KiB
Go

package handler_test
import (
"fmt"
"testing"
"time"
"github.com/google/uuid"
"github.com/micro/services/threads/handler"
pb "github.com/micro/services/threads/proto"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/known/wrapperspb"
)
func TestRecentMessages(t *testing.T) {
h := testHandler(t)
h.Time = time.Now
// seed some data
ids := make([]string, 3)
convos := make(map[string][]*pb.Message, 3)
for i := 0; i < 3; i++ {
var convRsp pb.CreateConversationResponse
err := h.CreateConversation(microAccountCtx(), &pb.CreateConversationRequest{
Topic: "TestRecentMessages", GroupId: uuid.New().String(),
}, &convRsp)
assert.NoError(t, err)
if err != nil {
return
}
convos[convRsp.Conversation.Id] = make([]*pb.Message, 50)
ids[i] = convRsp.Conversation.Id
for j := 0; j < 50; j++ {
var rsp pb.CreateMessageResponse
err := h.CreateMessage(microAccountCtx(), &pb.CreateMessageRequest{
ConversationId: convRsp.Conversation.Id,
AuthorId: uuid.New().String(),
Text: fmt.Sprintf("Conversation %v, Message %v", i, j),
}, &rsp)
assert.NoError(t, err)
convos[convRsp.Conversation.Id][j] = rsp.Message
}
}
t.Run("MissingConversationIDs", func(t *testing.T) {
var rsp pb.RecentMessagesResponse
err := h.RecentMessages(microAccountCtx(), &pb.RecentMessagesRequest{}, &rsp)
assert.Equal(t, handler.ErrMissingConversationIDs, err)
assert.Nil(t, rsp.Messages)
})
t.Run("LimitSet", func(t *testing.T) {
var rsp pb.RecentMessagesResponse
err := h.RecentMessages(microAccountCtx(), &pb.RecentMessagesRequest{
ConversationIds: ids,
LimitPerConversation: &wrapperspb.Int32Value{Value: 10},
}, &rsp)
assert.NoError(t, err)
if len(rsp.Messages) != 30 {
t.Fatalf("Expected %v messages but got %v", 30, len(rsp.Messages))
return
}
var expected []*pb.Message
for _, msgs := range convos {
expected = append(expected, msgs[40:]...)
}
sortMessages(expected)
sortMessages(rsp.Messages)
for i, msg := range rsp.Messages {
assertMessagesMatch(t, expected[i], msg)
}
})
t.Run("NoLimitSet", func(t *testing.T) {
reducedIDs := ids[:2]
var rsp pb.RecentMessagesResponse
err := h.RecentMessages(microAccountCtx(), &pb.RecentMessagesRequest{
ConversationIds: reducedIDs,
}, &rsp)
assert.NoError(t, err)
if len(rsp.Messages) != 50 {
t.Fatalf("Expected %v messages but got %v", 50, len(rsp.Messages))
return
}
var expected []*pb.Message
for _, id := range reducedIDs {
expected = append(expected, convos[id][25:]...)
}
sortMessages(expected)
sortMessages(rsp.Messages)
for i, msg := range rsp.Messages {
assertMessagesMatch(t, expected[i], msg)
}
})
}