Private
Public Access
1
0

attachments: handle sending messages with attachments

This commit is contained in:
2024-04-07 21:50:08 -07:00
parent 95b358e66e
commit b47132fd05
2 changed files with 121 additions and 37 deletions

View File

@@ -241,10 +241,11 @@ func (m *MockHTTPServer) handleSendMessage(w http.ResponseWriter, r *http.Reques
// Create Message // Create Message
message := model.Message{ message := model.Message{
Guid: uuid.New().String(), Guid: uuid.New().String(),
Text: sendMessageReq.Body, Text: sendMessageReq.Body,
Date: model.Date(time.Now()), Date: model.Date(time.Now()),
Sender: nil, // me AttachmentGUIDs: sendMessageReq.TransferGUIDs,
Sender: nil, // me
} }
// Send message // Send message

View File

@@ -535,27 +535,7 @@ func TestMessageQueries(t *testing.T) {
} }
func TestSendMessage(t *testing.T) { func trySendMessage(t *testing.T, httpServer *httptest.Server, request web.SendMessageRequest) string {
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{},
}
// Encode as json // Encode as json
requestJSON, err := json.Marshal(request) requestJSON, err := json.Marshal(request)
if err != nil { if err != nil {
@@ -588,11 +568,38 @@ func TestSendMessage(t *testing.T) {
t.Fatalf("Unexpected empty guid") 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 // Make sure message is present
messages := s.Server.MessagesForConversation(&conversation) messages := s.Server.MessagesForConversation(&conversation)
found := false found := false
for _, message := range messages { for _, message := range messages {
if message.Guid == response.Guid { if message.Guid == responseGuid {
found = true found = true
break break
} }
@@ -603,12 +610,8 @@ func TestSendMessage(t *testing.T) {
} }
} }
func TestAttachments(t *testing.T) { func tryUploadAttachment(t *testing.T, testData string, httpServer *httptest.Server) string {
s := web.NewMockHTTPServer(web.MockHTTPServerConfiguration{AuthEnabled: false})
httpServer := httptest.NewServer(s)
// Send upload request // Send upload request
testData := "hello world!"
attachmentDataReader := strings.NewReader(testData) attachmentDataReader := strings.NewReader(testData)
resp, err := http.Post(httpServer.URL+"/uploadAttachment?filename=test.txt", "application/data", attachmentDataReader) resp, err := http.Post(httpServer.URL+"/uploadAttachment?filename=test.txt", "application/data", attachmentDataReader)
if err != nil { if err != nil {
@@ -626,13 +629,11 @@ func TestAttachments(t *testing.T) {
t.Fatalf("Error decoding response: %s", err) t.Fatalf("Error decoding response: %s", err)
} }
guid := response.TransferGUID return response.TransferGUID
}
// Cleanup after ourselves func tryFetchAttachment(t *testing.T, httpServer *httptest.Server, guid string) []byte {
defer s.Server.DeleteAttachment(guid) resp, err := http.Get(httpServer.URL + fmt.Sprintf("/attachment?guid=%s", guid))
// Fetch it back
resp, err = http.Get(httpServer.URL + fmt.Sprintf("/attachment?guid=%s", guid))
if err != nil { if err != nil {
t.Fatalf("Error fetching attachment: %s", err) t.Fatalf("Error fetching attachment: %s", err)
} }
@@ -642,7 +643,89 @@ func TestAttachments(t *testing.T) {
t.Fatalf("Error reading attachment data: %s", err) 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 { if string(responseData) != testData {
t.Fatalf("Didn't get expected response data: %s (got %s)", testData, responseData) 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)
}
}