Skip to content

Commit b35d568

Browse files
author
Dirk Hoekstra
committed
General improvements
1 parent 5ddfbb7 commit b35d568

File tree

3 files changed

+108
-111
lines changed

3 files changed

+108
-111
lines changed

client.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -196,29 +196,33 @@ func (c *Client) NewMessage(originator string, recipients []string, body string,
196196
return message, nil
197197
}
198198

199-
func (c *Client) NewMmsMessage(originator string, recipients []string, body string, mediaUrls []string, msgParams *MmsMessageParams) (*MmsMessage, error) {
200-
params, err := paramsForMmsMessage(msgParams)
201-
if err != nil {
199+
// MmsMessage retrieves the information of an existing MmsMessage.
200+
func (c *Client) MmsMessage(id string) (*MmsMessage, error) {
201+
mmsMessage := &MmsMessage{}
202+
if err := c.request(mmsMessage, "mms/"+id, nil); err != nil {
203+
if err == ErrResponse {
204+
return mmsMessage, err
205+
}
206+
202207
return nil, err
203208
}
204209

205-
if body == "" && mediaUrls == nil {
206-
return nil, errors.New("body or mediaUrls is required")
210+
return mmsMessage, nil
211+
}
212+
213+
// NewMmsMessage creates a new MMS message for one or more recipients.
214+
func (c *Client) NewMmsMessage(originator string, recipients []string, msgParams *MmsMessageParams) (*MmsMessage, error) {
215+
params, err := paramsForMmsMessage(msgParams)
216+
if err != nil {
217+
return nil, err
207218
}
208219

209220
params.Set("originator", originator)
210221
params.Set("recipients", strings.Join(recipients, ","))
211222

212-
if body != "" {
213-
params.Set("body", body)
214-
}
215-
if mediaUrls != nil {
216-
params.Set("mediaUrls[]", strings.Join(mediaUrls, ","))
217-
}
218-
219223
mmsMessage := &MmsMessage{}
220224
if err := c.request(mmsMessage, "mms", params); err != nil {
221-
if (err == ErrResponse) {
225+
if err == ErrResponse {
222226
return mmsMessage, err
223227
}
224228

mms_message.go

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,61 @@
11
package messagebird
22

33
import (
4-
"net/url"
5-
"time"
4+
"errors"
5+
"net/url"
6+
"strings"
7+
"time"
68
)
79

10+
// MmsMessage represents a MMS Message.
811
type MmsMessage struct {
9-
Id string
10-
HRef string
11-
Direction string
12-
Originator string
13-
Body string
14-
Reference string
15-
Subject string
16-
MediaUrls []string
17-
ScheduledDatetime *time.Time
18-
CreatedDatetime *time.Time
19-
Recipients Recipients
20-
Errors []Error
12+
ID string
13+
HRef string
14+
Direction string
15+
Originator string
16+
Body string
17+
Reference string
18+
Subject string
19+
MediaUrls []string
20+
ScheduledDatetime *time.Time
21+
CreatedDatetime *time.Time
22+
Recipients Recipients
23+
Errors []Error
2124
}
2225

26+
// MmsMessageParams represents the parameters that can be supplied when creating
27+
// a request.
2328
type MmsMessageParams struct {
24-
Subject string
25-
Reference string
26-
ScheduledDatetime time.Time
29+
Body string
30+
MediaUrls []string
31+
Subject string
32+
Reference string
33+
ScheduledDatetime time.Time
2734
}
2835

36+
// paramsForMessage converts the specified MmsMessageParams struct to a
37+
// url.Values pointer and returns it.
2938
func paramsForMmsMessage(params *MmsMessageParams) (*url.Values, error) {
30-
urlParams := &url.Values{}
39+
urlParams := &url.Values{}
3140

32-
if params == nil {
33-
return urlParams, nil
34-
}
41+
if params.Body == "" && params.MediaUrls == nil {
42+
return nil, errors.New("Body or MediaUrls is required")
43+
}
44+
if params.Body != "" {
45+
urlParams.Set("body", params.Body)
46+
}
47+
if params.MediaUrls != nil {
48+
urlParams.Set("mediaUrls[]", strings.Join(params.MediaUrls, ","))
49+
}
50+
if params.Subject != "" {
51+
urlParams.Set("subject", params.Subject)
52+
}
53+
if params.Reference != "" {
54+
urlParams.Set("reference", params.Reference)
55+
}
56+
if params.ScheduledDatetime.Unix() > 0 {
57+
urlParams.Set("scheduledDatetime", params.ScheduledDatetime.Format(time.RFC3339))
58+
}
3559

36-
if params.Subject != "" {
37-
urlParams.Set("subject", params.Subject)
38-
}
39-
if params.Reference != "" {
40-
urlParams.Set("reference", params.Reference)
41-
}
42-
if params.ScheduledDatetime.Unix() > 0 {
43-
urlParams.Set("scheduledDatetime", params.ScheduledDatetime.Format(time.RFC3339))
44-
}
45-
46-
return urlParams, nil
60+
return urlParams, nil
4761
}

mms_message_test.go

Lines changed: 45 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import (
55
"time"
66
)
77

8-
var mmsMessageObject []byte = []byte(`{
8+
var mmsMessageObject = []byte(`{
99
"id": "6d9e7100b1f9406c81a3c303c30ccf05",
1010
"href": "https://rest.messagebird.com/mms/6d9e7100b1f9406c81a3c303c30ccf05",
1111
"direction": "mt",
1212
"originator": "TestName",
13-
"subject": "SBJCT",
13+
"subject": "TestSubject",
1414
"body": "Hello World",
15-
"mediaUrls": [],
16-
"reference": null,
15+
"mediaUrls": ["http://w3.org/1.gif", "http://w3.org/2.gif"],
16+
"reference": "TestReference",
1717
"scheduledDatetime": null,
1818
"createdDatetime": "2017-10-20T12:50:28+00:00",
1919
"recipients": {
@@ -34,63 +34,66 @@ var mmsMessageObject []byte = []byte(`{
3434
func TestNewMmsMessage(t *testing.T) {
3535
SetServerResponse(200, mmsMessageObject)
3636

37-
mmsMessage, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, "Hello World", nil, nil)
37+
params := &MmsMessageParams{
38+
Body: "Hello World",
39+
MediaUrls: []string{"http://w3.org/1.gif", "http://w3.org/2.gif"},
40+
Subject: "TestSubject",
41+
Reference: "TestReference",
42+
ScheduledDatetime: time.Now(),
43+
}
44+
mmsMessage, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, params)
45+
3846
if err != nil {
3947
t.Fatalf("Didn't expect error while creating a new MMS message: %s", err)
4048
}
41-
42-
if mmsMessage.Id != "6d9e7100b1f9406c81a3c303c30ccf05" {
43-
t.Errorf("Unexpected mmsMessage id: %s", mmsMessage.Id)
49+
if mmsMessage.ID != "6d9e7100b1f9406c81a3c303c30ccf05" {
50+
t.Errorf("Unexpected mmsMessage id: %s", mmsMessage.ID)
4451
}
45-
4652
if mmsMessage.HRef != "https://rest.messagebird.com/mms/6d9e7100b1f9406c81a3c303c30ccf05" {
4753
t.Errorf("Unexpected mmsMessage href: %s", mmsMessage.HRef)
4854
}
49-
5055
if mmsMessage.Direction != "mt" {
5156
t.Errorf("Unexpected mmsMessage direction: %s", mmsMessage.Direction)
5257
}
53-
5458
if mmsMessage.Originator != "TestName" {
5559
t.Errorf("Unexpected mmsMessage originator: %s", mmsMessage.Originator)
5660
}
57-
5861
if mmsMessage.Body != "Hello World" {
5962
t.Errorf("Unexpected mmsMessage body: %s", mmsMessage.Body)
6063
}
61-
62-
if mmsMessage.Reference != "" {
64+
if mmsMessage.MediaUrls[0] != "http://w3.org/1.gif" {
65+
t.Errorf("Unexpected mmsMessage mediaUrl: %s", mmsMessage.MediaUrls[0])
66+
}
67+
if mmsMessage.MediaUrls[1] != "http://w3.org/2.gif" {
68+
t.Errorf("Unexpected mmsMessage mediaUrl: %s", mmsMessage.MediaUrls[1])
69+
}
70+
if mmsMessage.Reference != "TestReference" {
6371
t.Errorf("Unexpected mmsMessage reference: %s", mmsMessage.Reference)
6472
}
65-
73+
if mmsMessage.Subject != "TestSubject" {
74+
t.Errorf("Unexpected mmsMessage reference: %s", mmsMessage.Subject)
75+
}
6676
if mmsMessage.ScheduledDatetime != nil {
6777
t.Errorf("Unexpected mmsMessage scheduled datetime: %s", mmsMessage.ScheduledDatetime)
6878
}
69-
7079
if mmsMessage.CreatedDatetime == nil || mmsMessage.CreatedDatetime.Format(time.RFC3339) != "2017-10-20T12:50:28Z" {
7180
t.Errorf("Unexpected mmsMessage created datetime: %s", mmsMessage.CreatedDatetime)
7281
}
73-
7482
if mmsMessage.Recipients.TotalCount != 1 {
7583
t.Fatalf("Unexpected number of total count: %d", mmsMessage.Recipients.TotalCount)
7684
}
77-
7885
if mmsMessage.Recipients.TotalSentCount != 1 {
7986
t.Errorf("Unexpected number of total sent count: %d", mmsMessage.Recipients.TotalSentCount)
8087
}
81-
8288
if mmsMessage.Recipients.Items[0].Recipient != 31612345678 {
8389
t.Errorf("Unexpected mmsMessage recipient: %d", mmsMessage.Recipients.Items[0].Recipient)
8490
}
85-
8691
if mmsMessage.Recipients.Items[0].Status != "sent" {
8792
t.Errorf("Unexpected mmsMessage recipient status: %s", mmsMessage.Recipients.Items[0].Status)
8893
}
89-
9094
if mmsMessage.Recipients.Items[0].StatusDatetime == nil || mmsMessage.Recipients.Items[0].StatusDatetime.Format(time.RFC3339) != "2017-10-20T12:50:28Z" {
9195
t.Errorf("Unexpected datetime status for mmsMessage recipient: %s", mmsMessage.Recipients.Items[0].StatusDatetime.Format(time.RFC3339))
9296
}
93-
9497
if len(mmsMessage.Errors) != 0 {
9598
t.Errorf("Unexpected number of errors in mmsMessage: %d", len(mmsMessage.Errors))
9699
}
@@ -99,67 +102,43 @@ func TestNewMmsMessage(t *testing.T) {
99102
func TestNewMmsMessageError(t *testing.T) {
100103
SetServerResponse(405, accessKeyErrorObject)
101104

102-
mmsMessage, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, "Hello World", nil, nil)
105+
params := &MmsMessageParams{
106+
Body: "Hello World",
107+
MediaUrls: nil,
108+
Subject: "",
109+
Reference: "",
110+
ScheduledDatetime: time.Now(),
111+
}
112+
mmsMessage, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, params)
113+
103114
if err != ErrResponse {
104115
t.Fatalf("Expected ErrResponse to be returned, instead I got %s", err)
105116
}
106-
107117
if len(mmsMessage.Errors) != 1 {
108118
t.Fatalf("Unexpected number of errors: %d", len(mmsMessage.Errors))
109119
}
110-
111120
if mmsMessage.Errors[0].Code != 2 {
112121
t.Errorf("Unexpected error code: %d", mmsMessage.Errors[0].Code)
113122
}
114-
115123
if mmsMessage.Errors[0].Parameter != "access_key" {
116124
t.Errorf("Unexpected error parameter %s", mmsMessage.Errors[0].Parameter)
117125
}
118126
}
119127

120-
func TestNewMmsMessageWithParams(t *testing.T) {
121-
SetServerResponse(200, mmsMessageObjectWithParams)
122-
128+
func TestNewMmsMessageWithEmptyParams(t *testing.T) {
123129
params := &MmsMessageParams{
124-
Subject: "Test-Subject",
125-
Reference: "Test-Reference",
130+
Body: "",
131+
MediaUrls: nil,
132+
Subject: "",
133+
Reference: "",
134+
ScheduledDatetime: time.Now(),
126135
}
136+
_, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, params)
127137

128-
mmsMessage, err := mbClient.NewMmsMessage("TestName", []string{"31612345678"}, "", []string{"http://w3.org/1.gif", "http://w3.org/2.gif"}, params)
129-
if err != nil {
130-
t.Fatalf("Didn't expect error while creating a new MMS message: %s", err)
131-
}
132-
133-
if mmsMessage.Subject != "Test-Subject" {
134-
t.Errorf("Unexpected message subject: %s", mmsMessage.Subject)
138+
if err == nil {
139+
t.Fatalf("Expected error to be returned, instead I got nil")
135140
}
136-
if mmsMessage.Reference != "Test-Reference" {
137-
t.Errorf("Unexpected message reference: %s", mmsMessage.Reference)
141+
if err.Error() != "Body or MediaUrls is required" {
142+
t.Errorf("Unexpected error message, I got %s", err)
138143
}
139144
}
140-
141-
var mmsMessageObjectWithParams []byte = []byte(`{
142-
"id": "6d9e7100b1f9406c81a3c303c30ccf05",
143-
"href": "https://rest.messagebird.com/mms/6d9e7100b1f9406c81a3c303c30ccf05",
144-
"direction": "mt",
145-
"originator": "TestName",
146-
"subject": "Test-Subject",
147-
"body": "Hello World",
148-
"mediaUrls": [],
149-
"reference": "Test-Reference",
150-
"scheduledDatetime": null,
151-
"createdDatetime": "2017-10-20T12:50:28+00:00",
152-
"recipients": {
153-
"totalCount": 1,
154-
"totalSentCount": 1,
155-
"totalDeliveredCount": 0,
156-
"totalDeliveryFailedCount": 0,
157-
"items": [
158-
{
159-
"recipient": 31612345678,
160-
"status": "sent",
161-
"statusDatetime": "2017-10-20T12:50:28+00:00"
162-
}
163-
]
164-
}
165-
}`)

0 commit comments

Comments
 (0)