attachments: handle sending messages with attachments
This commit is contained in:
@@ -244,6 +244,7 @@ func (m *MockHTTPServer) handleSendMessage(w http.ResponseWriter, r *http.Reques
|
||||
Guid: uuid.New().String(),
|
||||
Text: sendMessageReq.Body,
|
||||
Date: model.Date(time.Now()),
|
||||
AttachmentGUIDs: sendMessageReq.TransferGUIDs,
|
||||
Sender: nil, // me
|
||||
}
|
||||
|
||||
|
||||
@@ -535,27 +535,7 @@ func TestMessageQueries(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestSendMessage(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
// Mock conversation
|
||||
guid := "1234567890"
|
||||
conversation := model.Conversation{
|
||||
Date: model.Date(time.Now()),
|
||||
Participants: []string{"Alice"},
|
||||
UnreadCount: 0,
|
||||
Guid: guid,
|
||||
}
|
||||
|
||||
s.Server.AddConversation(conversation)
|
||||
|
||||
request := web.SendMessageRequest{
|
||||
ConversationGUID: "1234567890",
|
||||
Body: "This is a test.",
|
||||
TransferGUIDs: []string{},
|
||||
}
|
||||
|
||||
func trySendMessage(t *testing.T, httpServer *httptest.Server, request web.SendMessageRequest) string {
|
||||
// Encode as json
|
||||
requestJSON, err := json.Marshal(request)
|
||||
if err != nil {
|
||||
@@ -588,11 +568,38 @@ func TestSendMessage(t *testing.T) {
|
||||
t.Fatalf("Unexpected empty guid")
|
||||
}
|
||||
|
||||
return response.Guid
|
||||
}
|
||||
|
||||
func TestSendMessage(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
// Mock conversation
|
||||
guid := "1234567890"
|
||||
conversation := model.Conversation{
|
||||
Date: model.Date(time.Now()),
|
||||
Participants: []string{"Alice"},
|
||||
UnreadCount: 0,
|
||||
Guid: guid,
|
||||
}
|
||||
|
||||
s.Server.AddConversation(conversation)
|
||||
|
||||
// Send it
|
||||
request := web.SendMessageRequest{
|
||||
ConversationGUID: guid,
|
||||
Body: "hello there",
|
||||
TransferGUIDs: []string{},
|
||||
}
|
||||
|
||||
responseGuid := trySendMessage(t, httpServer, request)
|
||||
|
||||
// Make sure message is present
|
||||
messages := s.Server.MessagesForConversation(&conversation)
|
||||
found := false
|
||||
for _, message := range messages {
|
||||
if message.Guid == response.Guid {
|
||||
if message.Guid == responseGuid {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
@@ -603,12 +610,8 @@ func TestSendMessage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAttachments(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
func tryUploadAttachment(t *testing.T, testData string, httpServer *httptest.Server) string {
|
||||
// Send upload request
|
||||
testData := "hello world!"
|
||||
attachmentDataReader := strings.NewReader(testData)
|
||||
resp, err := http.Post(httpServer.URL+"/uploadAttachment?filename=test.txt", "application/data", attachmentDataReader)
|
||||
if err != nil {
|
||||
@@ -626,13 +629,11 @@ func TestAttachments(t *testing.T) {
|
||||
t.Fatalf("Error decoding response: %s", err)
|
||||
}
|
||||
|
||||
guid := response.TransferGUID
|
||||
return response.TransferGUID
|
||||
}
|
||||
|
||||
// Cleanup after ourselves
|
||||
defer s.Server.DeleteAttachment(guid)
|
||||
|
||||
// Fetch it back
|
||||
resp, err = http.Get(httpServer.URL + fmt.Sprintf("/attachment?guid=%s", guid))
|
||||
func tryFetchAttachment(t *testing.T, httpServer *httptest.Server, guid string) []byte {
|
||||
resp, err := http.Get(httpServer.URL + fmt.Sprintf("/attachment?guid=%s", guid))
|
||||
if err != nil {
|
||||
t.Fatalf("Error fetching attachment: %s", err)
|
||||
}
|
||||
@@ -642,7 +643,89 @@ func TestAttachments(t *testing.T) {
|
||||
t.Fatalf("Error reading attachment data: %s", err)
|
||||
}
|
||||
|
||||
return responseData
|
||||
}
|
||||
|
||||
func TestAttachments(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
testData := "hello world!"
|
||||
guid := tryUploadAttachment(t, testData, httpServer)
|
||||
|
||||
// Cleanup after ourselves
|
||||
defer s.Server.DeleteAttachment(guid)
|
||||
|
||||
// Fetch it back
|
||||
responseData := tryFetchAttachment(t, httpServer, guid)
|
||||
|
||||
if string(responseData) != testData {
|
||||
t.Fatalf("Didn't get expected response data: %s (got %s)", testData, responseData)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSendMessageWithAttachment(t *testing.T) {
|
||||
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
|
||||
httpServer := httptest.NewServer(s)
|
||||
|
||||
// Mock conversation
|
||||
conversation := model.Conversation{
|
||||
Date: model.Date(time.Now()),
|
||||
Participants: []string{"Alice"},
|
||||
UnreadCount: 0,
|
||||
Guid: "123456789",
|
||||
}
|
||||
|
||||
s.Server.AddConversation(conversation)
|
||||
|
||||
testData := "attachment data"
|
||||
attachmentGuid := tryUploadAttachment(t, testData, httpServer)
|
||||
|
||||
messageRequest := web.SendMessageRequest{
|
||||
ConversationGUID: conversation.Guid,
|
||||
Body: "",
|
||||
TransferGUIDs: []string{attachmentGuid},
|
||||
}
|
||||
|
||||
sentGuid := trySendMessage(t, httpServer, messageRequest)
|
||||
|
||||
// See if our message has that attachment
|
||||
resp, err := http.Get(httpServer.URL + "/messages?guid=" + conversation.Guid)
|
||||
if err != nil {
|
||||
t.Fatalf("TestMessages error: %s", err)
|
||||
}
|
||||
|
||||
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) != 1 {
|
||||
t.Fatalf("Unexpected num messages: %d (expected %d)", len(messages), 1)
|
||||
}
|
||||
|
||||
onlyMessage := messages[0]
|
||||
if onlyMessage.Guid != sentGuid {
|
||||
t.Fatalf("Unexpected guid: %s (expected %s)", onlyMessage.Guid, sentGuid)
|
||||
}
|
||||
|
||||
if len(onlyMessage.AttachmentGUIDs) != 1 {
|
||||
t.Fatalf("Message returned didn't have expected attachment guids")
|
||||
}
|
||||
|
||||
if onlyMessage.AttachmentGUIDs[0] != attachmentGuid {
|
||||
t.Fatalf("Message returned had wrong attachment guid: %s (expected %s)", onlyMessage.AttachmentGUIDs[0], attachmentGuid)
|
||||
}
|
||||
|
||||
// See if we get data back
|
||||
fetchedData := tryFetchAttachment(t, httpServer, attachmentGuid)
|
||||
if string(fetchedData) != testData {
|
||||
t.Fatalf("Sent message attachment had incorrect data: %s (expected %s)", fetchedData, testData)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user