Skip to content

Commit 503d615

Browse files
committed
Add ability to delete message threads
1 parent f2fad94 commit 503d615

File tree

8 files changed

+162
-14
lines changed

8 files changed

+162
-14
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import "github.com/NdoleStudio/httpsms-go"
3535
- [x] `GET /v1/heartbeats`: Get the heartbeats of an Android Phone
3636
- [x] **Message Threads**
3737
- [x] `GET /v1/message-threads`: Get the message threads of a phone number
38+
- [x] `DELETE v1/message-threads/:messageThreadID`: Delete a message thread
3839
- [x] **Cipher**
3940
- [x] `Encrypt`: Encrypt the content of a message to cipher text
4041
- [x] `Decrypt`: Decrypt an encrypted message content to plain text

heartbeat_service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestHeartbeatService_IndexWithError(t *testing.T) {
4545

4646
// Arrange
4747
apiKey := "test-api-key"
48-
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.MessagesSendErrorResponse())
48+
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse())
4949
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
5050

5151
// Act
@@ -59,7 +59,7 @@ func TestHeartbeatService_IndexWithError(t *testing.T) {
5959
// Assert
6060
assert.NotNil(t, err)
6161
assert.Equal(t, http.StatusInternalServerError, response.HTTPResponse.StatusCode)
62-
assert.Equal(t, string(stubs.MessagesSendErrorResponse()), string(*response.Body))
62+
assert.Equal(t, string(stubs.HttpInternalServerErrorResponse()), string(*response.Body))
6363

6464
// Teardown
6565
server.Close()

internal/stubs/message.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,3 @@ func MessagesSendResponse() []byte {
3737
}
3838
`)
3939
}
40-
41-
// MessagesSendErrorResponse internal error response
42-
func MessagesSendErrorResponse() []byte {
43-
return []byte(`
44-
{
45-
"message": "We ran into an internal error while handling the request.",
46-
"status": "error"
47-
}
48-
`)
49-
}

internal/stubs/message_thread.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package stubs
2+
3+
// MessageThreadIndexResponse response from the /v1/message-threads endpoint
4+
func MessageThreadIndexResponse() []byte {
5+
return []byte(`
6+
{
7+
"data": [
8+
{
9+
"color": "indigo",
10+
"contact": "+18005550100",
11+
"created_at": "2022-06-05T14:26:09.527976+03:00",
12+
"id": "32343a19-da5e-4b1b-a767-3298a73703ca",
13+
"is_archived": false,
14+
"last_message_content": "This is a sample message content",
15+
"last_message_id": "32343a19-da5e-4b1b-a767-3298a73703ca",
16+
"order_timestamp": "2022-06-05T14:26:09.527976+03:00",
17+
"owner": "+18005550199",
18+
"status": "PENDING",
19+
"updated_at": "2022-06-05T14:26:09.527976+03:00",
20+
"user_id": "WB7DRDWrJZRGbYrv2CKGkqbzvqdC"
21+
}
22+
],
23+
"message": "item created successfully",
24+
"status": "success"
25+
}
26+
`)
27+
}

internal/stubs/response.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package stubs
2+
3+
// HttpInternalServerErrorResponse internal error response
4+
func HttpInternalServerErrorResponse() []byte {
5+
return []byte(`
6+
{
7+
"message": "We ran into an internal error while handling the request.",
8+
"status": "error"
9+
}
10+
`)
11+
}

message_service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestMessagesService_SendWithError(t *testing.T) {
5353

5454
// Arrange
5555
apiKey := "test-api-key"
56-
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.MessagesSendErrorResponse())
56+
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse())
5757
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
5858

5959
// Act
@@ -62,7 +62,7 @@ func TestMessagesService_SendWithError(t *testing.T) {
6262
// Assert
6363
assert.NotNil(t, err)
6464
assert.Equal(t, http.StatusInternalServerError, response.HTTPResponse.StatusCode)
65-
assert.Equal(t, string(stubs.MessagesSendErrorResponse()), string(*response.Body))
65+
assert.Equal(t, string(stubs.HttpInternalServerErrorResponse()), string(*response.Body))
6666

6767
// Teardown
6868
server.Close()

message_thread_service.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package httpsms
33
import (
44
"context"
55
"encoding/json"
6+
"github.com/google/uuid"
67
"net/http"
78
"strconv"
89
)
@@ -42,3 +43,15 @@ func (service *MessageThreadService) Index(ctx context.Context, params *MessageT
4243

4344
return messageThreads, response, nil
4445
}
46+
47+
// Delete a message thread from the database and also deletes all the messages in the thread.
48+
//
49+
// API Docs: https://api.httpsms.com/index.html#/MessageThreads/delete_message_threads__messageThreadID_
50+
func (service *MessageThreadService) Delete(ctx context.Context, messageThreadID uuid.UUID) (*Response, error) {
51+
request, err := service.client.newRequest(ctx, http.MethodDelete, "/v1/message-threads/"+messageThreadID.String(), nil)
52+
if err != nil {
53+
return nil, err
54+
}
55+
56+
return service.client.do(request)
57+
}

message_thread_service_test.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package httpsms
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"github.com/google/uuid"
7+
"net/http"
8+
"testing"
9+
10+
"github.com/NdoleStudio/httpsms-go/internal/helpers"
11+
"github.com/NdoleStudio/httpsms-go/internal/stubs"
12+
"github.com/stretchr/testify/assert"
13+
)
14+
15+
func TestMessageThreadService_Index(t *testing.T) {
16+
// Setup
17+
t.Parallel()
18+
19+
// Arrange
20+
apiKey := "test-api-key"
21+
server := helpers.MakeTestServer(http.StatusOK, stubs.MessageThreadIndexResponse())
22+
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
23+
24+
indexParams := &MessageThreadIndexParams{
25+
IsArchived: false,
26+
Skip: 0,
27+
Query: nil,
28+
Limit: 10,
29+
Owner: fromNumber,
30+
}
31+
32+
// Act
33+
threads, response, err := client.MessageThreads.Index(context.Background(), indexParams)
34+
35+
// Assert
36+
assert.Nil(t, err)
37+
38+
assert.Equal(t, http.StatusOK, response.HTTPResponse.StatusCode)
39+
40+
jsonContent, _ := json.Marshal(threads)
41+
assert.JSONEq(t, string(stubs.MessageThreadIndexResponse()), string(jsonContent))
42+
43+
// Teardown
44+
server.Close()
45+
}
46+
47+
func TestMessageThreadService_IndexWithError(t *testing.T) {
48+
// Setup
49+
t.Parallel()
50+
51+
// Arrange
52+
apiKey := "test-api-key"
53+
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse())
54+
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
55+
56+
// Act
57+
_, response, err := client.MessageThreads.Index(context.Background(), &MessageThreadIndexParams{})
58+
59+
// Assert
60+
assert.NotNil(t, err)
61+
assert.Equal(t, http.StatusInternalServerError, response.HTTPResponse.StatusCode)
62+
assert.Equal(t, string(stubs.HttpInternalServerErrorResponse()), string(*response.Body))
63+
64+
// Teardown
65+
server.Close()
66+
}
67+
68+
func TestMessageThreadService_Delete(t *testing.T) {
69+
// Setup
70+
t.Parallel()
71+
72+
// Arrange
73+
apiKey := "test-api-key"
74+
server := helpers.MakeTestServer(http.StatusOK, nil)
75+
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
76+
77+
// Act
78+
response, err := client.MessageThreads.Delete(context.Background(), uuid.New())
79+
80+
// Assert
81+
assert.Nil(t, err)
82+
assert.Equal(t, http.StatusOK, response.HTTPResponse.StatusCode)
83+
84+
// Teardown
85+
server.Close()
86+
}
87+
88+
func TestMessageThreadService_DeleteWithError(t *testing.T) {
89+
// Setup
90+
t.Parallel()
91+
92+
// Arrange
93+
apiKey := "test-api-key"
94+
server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse())
95+
client := New(WithBaseURL(server.URL), WithAPIKey(apiKey))
96+
97+
// Act
98+
response, err := client.MessageThreads.Delete(context.Background(), uuid.New())
99+
100+
// Assert
101+
assert.NotNil(t, err)
102+
assert.Equal(t, http.StatusInternalServerError, response.HTTPResponse.StatusCode)
103+
104+
// Teardown
105+
server.Close()
106+
}

0 commit comments

Comments
 (0)