attachments: handle sending messages with attachments
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user