GeezerVison is showing github.com — Add ability to delete message threads · NdoleStudio/httpsms-go@503d615
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: README.md +1Lines changed: 1 addition & 0 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -35,6 +35,7 @@ import "github.com/NdoleStudio/httpsms-go" | 35 | 35 | - [x] `GET /v1/heartbeats`: Get the heartbeats of an Android Phone | 36 | 36 | - [x] **Message Threads** | 37 | 37 | - [x] `GET /v1/message-threads`: Get the message threads of a phone number | | 38 | + - [x] `DELETE v1/message-threads/:messageThreadID`: Delete a message thread | 38 | 39 | - [x] **Cipher** | 39 | 40 | - [x] `Encrypt`: Encrypt the content of a message to cipher text | 40 | 41 | - [x] `Decrypt`: Decrypt an encrypted message content to plain text | |
Collapse file Copy file name to clipboardExpand all lines: heartbeat_service_test.go +2-2Lines changed: 2 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -45,7 +45,7 @@ func TestHeartbeatService_IndexWithError(t *testing.T) { | 45 | 45 |
| 46 | 46 | // Arrange | 47 | 47 | apiKey := "test-api-key" | 48 | | - server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.MessagesSendErrorResponse()) | | 48 | + server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse()) | 49 | 49 | client := New(WithBaseURL(server.URL), WithAPIKey(apiKey)) | 50 | 50 |
| 51 | 51 | // Act | @@ -59,7 +59,7 @@ func TestHeartbeatService_IndexWithError(t *testing.T) { | 59 | 59 | // Assert | 60 | 60 | assert.NotNil(t, err) | 61 | 61 | 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)) | 63 | 63 |
| 64 | 64 | // Teardown | 65 | 65 | server.Close() | |
Collapse file Copy file name to clipboardExpand all lines: internal/stubs/message.go -10Lines changed: 0 additions & 10 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -37,13 +37,3 @@ func MessagesSendResponse() []byte { | 37 | 37 | } | 38 | 38 | `) | 39 | 39 | } | 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 | | -} |
Collapse file Copy file name to clipboard +27Lines changed: 27 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 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 | +} |
Collapse file Copy file name to clipboard +11Lines changed: 11 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 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 | +} |
Collapse file Copy file name to clipboardExpand all lines: message_service_test.go +2-2Lines changed: 2 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -53,7 +53,7 @@ func TestMessagesService_SendWithError(t *testing.T) { | 53 | 53 |
| 54 | 54 | // Arrange | 55 | 55 | apiKey := "test-api-key" | 56 | | - server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.MessagesSendErrorResponse()) | | 56 | + server := helpers.MakeTestServer(http.StatusInternalServerError, stubs.HttpInternalServerErrorResponse()) | 57 | 57 | client := New(WithBaseURL(server.URL), WithAPIKey(apiKey)) | 58 | 58 |
| 59 | 59 | // Act | @@ -62,7 +62,7 @@ func TestMessagesService_SendWithError(t *testing.T) { | 62 | 62 | // Assert | 63 | 63 | assert.NotNil(t, err) | 64 | 64 | 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)) | 66 | 66 |
| 67 | 67 | // Teardown | 68 | 68 | server.Close() | |
Collapse file Copy file name to clipboardExpand all lines: message_thread_service.go +13Lines changed: 13 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -3,6 +3,7 @@ package httpsms | 3 | 3 | import ( | 4 | 4 | "context" | 5 | 5 | "encoding/json" | | 6 | + "github.com/google/uuid" | 6 | 7 | "net/http" | 7 | 8 | "strconv" | 8 | 9 | ) | @@ -42,3 +43,15 @@ func (service *MessageThreadService) Index(ctx context.Context, params *MessageT | 42 | 43 |
| 43 | 44 | return messageThreads, response, nil | 44 | 45 | } | | 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 | +} |
Collapse file Copy file name to clipboard +106Lines changed: 106 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 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 | +} |
|