Skip to content

Commit 8d28d48

Browse files
authored
Merge pull request #75 from guilhermehubner/conversation-message-list-all
improvement(conversations lists) allow pass option as nil to list all
2 parents 4b13e0f + 3d6ced9 commit 8d28d48

File tree

7 files changed

+180
-40
lines changed

7 files changed

+180
-40
lines changed

conversation/api.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ func request(c *messagebird.Client, v interface{}, method, path string, data int
231231

232232
// paginationQuery builds the query string for paginated endpoints.
233233
func paginationQuery(options *ListOptions) string {
234+
if options == nil {
235+
return ""
236+
}
237+
234238
query := url.Values{}
235239
query.Set("limit", strconv.Itoa(options.Limit))
236240
query.Set("offset", strconv.Itoa(options.Offset))

conversation/conversation.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package conversation
22

33
import (
4+
"fmt"
45
"net/http"
56

67
messagebird "github.com/messagebird/go-rest-api"
@@ -29,13 +30,10 @@ var DefaultListOptions = &ListOptions{10, 0}
2930

3031
// List gets a collection of Conversations. Pagination can be set in options.
3132
func List(c *messagebird.Client, options *ListOptions) (*ConversationList, error) {
32-
query := "?"
33-
if options != nil {
34-
query += paginationQuery(options)
35-
}
33+
query := paginationQuery(options)
3634

3735
convList := &ConversationList{}
38-
if err := request(c, convList, http.MethodGet, path+query, nil); err != nil {
36+
if err := request(c, convList, http.MethodGet, fmt.Sprintf("%s?%s", path, query), nil); err != nil {
3937
return nil, err
4038
}
4139

conversation/message_test.go

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,65 @@ func TestCreateMessage(t *testing.T) {
3131
}
3232

3333
func TestListMessages(t *testing.T) {
34-
mbtest.WillReturnTestdata(t, "messageListObject.json", http.StatusOK)
35-
client := mbtest.Client(t)
34+
t.Run("limit_offset", func(t *testing.T) {
35+
mbtest.WillReturnTestdata(t, "messageListObject.json", http.StatusOK)
36+
client := mbtest.Client(t)
3637

37-
messageList, err := ListMessages(client, "convid", DefaultListOptions)
38-
if err != nil {
39-
t.Fatalf("unexpected error listing Messages: %s", err)
40-
}
38+
messageList, err := ListMessages(client, "convid", &ListOptions{Limit: 20, Offset: 2})
39+
if err != nil {
40+
t.Fatalf("unexpected error listing Messages: %s", err)
41+
}
4142

42-
if messageList.Limit != 10 {
43-
t.Fatalf("got %d, expected 10", messageList.Limit)
44-
}
43+
if messageList.Offset != 2 {
44+
t.Fatalf("got %d, expected 2", messageList.Offset)
45+
}
4546

46-
if messageList.Items[0].ID != "mesid" {
47-
t.Fatalf("got %s, expected mesid", messageList.Items[0].ID)
48-
}
47+
if messageList.Limit != 20 {
48+
t.Fatalf("got %d, expected 20", messageList.Limit)
49+
}
4950

50-
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/conversations/convid/messages")
51+
if messageList.Items[0].ID != "mesid" {
52+
t.Fatalf("got %s, expected mesid", messageList.Items[0].ID)
53+
}
5154

52-
if query := mbtest.Request.URL.RawQuery; query != "limit=10&offset=0" {
53-
t.Fatalf("got %s, expected limit=10&offset=0", query)
54-
}
55+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/conversations/convid/messages")
56+
57+
if query := mbtest.Request.URL.RawQuery; query != "limit=20&offset=2" {
58+
t.Fatalf("got %s, expected limit=10&offset=0", query)
59+
}
60+
})
61+
62+
t.Run("all", func(t *testing.T) {
63+
mbtest.WillReturnTestdata(t, "allMessageListObject.json", http.StatusOK)
64+
client := mbtest.Client(t)
65+
66+
messageList, err := ListMessages(client, "convid", nil)
67+
if err != nil {
68+
t.Fatalf("unexpected error listing Messages: %s", err)
69+
}
70+
71+
if messageList.Limit != 10 {
72+
t.Fatalf("got %d, expected 10", messageList.Limit)
73+
}
74+
75+
if messageList.Offset != 0 {
76+
t.Fatalf("got %d, expected 0", messageList.Offset)
77+
}
78+
79+
if messageList.Items[0].ID != "mesid" {
80+
t.Fatalf("got %s, expected mesid", messageList.Items[0].ID)
81+
}
82+
83+
if len(messageList.Items) != 2 {
84+
t.Fatalf("got %d, expected 2", len(messageList.Items))
85+
}
86+
87+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/conversations/convid/messages")
88+
89+
if query := mbtest.Request.URL.RawQuery; query != "" {
90+
t.Fatalf("got %s, expected empty", query)
91+
}
92+
})
5593
}
5694

5795
func TestReadMessage(t *testing.T) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"count": 2,
3+
"items": [
4+
{
5+
"id": "mesid",
6+
"conversationId": "convid",
7+
"channelId": "chid",
8+
"status": "received",
9+
"type": "text",
10+
"direction": "received",
11+
"content": {
12+
"text": "Foo"
13+
},
14+
"createdDatetime": "2018-08-24T09:49:01Z",
15+
"updatedDatetime": "2018-08-24T09:49:01Z"
16+
},
17+
{
18+
"id": "mesid",
19+
"conversationId": "convid",
20+
"channelId": "chid",
21+
"status": "received",
22+
"type": "text",
23+
"direction": "received",
24+
"content": {
25+
"text": "Foo"
26+
},
27+
"createdDatetime": "2018-08-24T09:49:01Z",
28+
"updatedDatetime": "2018-08-24T09:49:01Z"
29+
}
30+
],
31+
"limit": 10,
32+
"offset": 0,
33+
"totalCount": 2
34+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"offset": 0,
3+
"limit": 10,
4+
"count": 2,
5+
"totalCount": 2,
6+
"items": [
7+
{
8+
"id": "whid",
9+
"url": "https://example.com/webhooks",
10+
"channelId": "chid",
11+
"events": [
12+
"message.created"
13+
],
14+
"createdDatetime": "2018-08-24T14:46:39Z",
15+
"updatedDatetime": null
16+
},
17+
{
18+
"id": "whid",
19+
"url": "https://example.com/webhooks",
20+
"channelId": "chid",
21+
"events": [
22+
"message.created"
23+
],
24+
"createdDatetime": "2018-08-24T14:46:39Z",
25+
"updatedDatetime": null
26+
}
27+
]
28+
}

conversation/testdata/messageListObject.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"updatedDatetime": "2018-08-24T09:49:01Z"
1616
}
1717
],
18-
"limit": 10,
19-
"offset": 0,
18+
"limit": 20,
19+
"offset": 2,
2020
"totalCount": 1
21-
}
21+
}

conversation/webhook_test.go

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,65 @@ func TestDeleteWebhook(t *testing.T) {
4343
}
4444

4545
func TestListWebhooks(t *testing.T) {
46-
mbtest.WillReturnTestdata(t, "webhookListObject.json", http.StatusOK)
47-
client := mbtest.Client(t)
46+
t.Run("limit_offset", func(t *testing.T) {
47+
mbtest.WillReturnTestdata(t, "webhookListObject.json", http.StatusOK)
48+
client := mbtest.Client(t)
4849

49-
webhookList, err := ListWebhooks(client, DefaultListOptions)
50-
if err != nil {
51-
t.Fatalf("unexpected error listing Webhooks: %s", err)
52-
}
50+
webhookList, err := ListWebhooks(client, &ListOptions{Limit: 20, Offset: 2})
51+
if err != nil {
52+
t.Fatalf("unexpected error listing Webhooks: %s", err)
53+
}
5354

54-
if webhookList.TotalCount != 1 {
55-
t.Fatalf("got %d, expected 1", webhookList.TotalCount)
56-
}
55+
if webhookList.TotalCount != 1 {
56+
t.Fatalf("got %d, expected 1", webhookList.TotalCount)
57+
}
5758

58-
if webhookList.Items[0].Events[0] != WebhookEventMessageCreated {
59-
t.Fatalf("got %s expected message.created", webhookList.Items[0].Events[0])
60-
}
59+
if webhookList.Items[0].Events[0] != WebhookEventMessageCreated {
60+
t.Fatalf("got %s expected message.created", webhookList.Items[0].Events[0])
61+
}
6162

62-
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/webhooks")
63+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/webhooks")
6364

64-
if query := mbtest.Request.URL.RawQuery; query != "limit=10&offset=0" {
65-
t.Fatalf("got %s, expected limit=10&offset=0", query)
66-
}
65+
if query := mbtest.Request.URL.RawQuery; query != "limit=20&offset=2" {
66+
t.Fatalf("got %s, expected limit=20&offset=2", query)
67+
}
68+
})
69+
70+
t.Run("all", func(t *testing.T) {
71+
mbtest.WillReturnTestdata(t, "allWebhookListObject.json", http.StatusOK)
72+
client := mbtest.Client(t)
73+
74+
webhookList, err := ListWebhooks(client, nil)
75+
if err != nil {
76+
t.Fatalf("unexpected error listing Webhooks: %s", err)
77+
}
78+
79+
if webhookList.Limit != 10 {
80+
t.Fatalf("got %d, expected 10", webhookList.Limit)
81+
}
82+
83+
if webhookList.Offset != 0 {
84+
t.Fatalf("got %d, expected 0", webhookList.Offset)
85+
}
86+
87+
if webhookList.TotalCount != 2 {
88+
t.Fatalf("got %d, expected 2", webhookList.TotalCount)
89+
}
90+
91+
if webhookList.Items[0].Events[0] != WebhookEventMessageCreated {
92+
t.Fatalf("got %s expected message.created", webhookList.Items[0].Events[0])
93+
}
94+
95+
if len(webhookList.Items) != 2 {
96+
t.Fatalf("got %d, expected 2", len(webhookList.Items))
97+
}
98+
99+
mbtest.AssertEndpointCalled(t, http.MethodGet, "/v1/webhooks")
100+
101+
if query := mbtest.Request.URL.RawQuery; query != "" {
102+
t.Fatalf("got %s, expected empty", query)
103+
}
104+
})
67105
}
68106

69107
func TestReadWebhook(t *testing.T) {

0 commit comments

Comments
 (0)