Skip to content

Commit 50d45d6

Browse files
authored
Merge pull request #60 from CallFire/develop
Develop
2 parents 1bfe359 + 926a5ef commit 50d45d6

File tree

31 files changed

+876
-125
lines changed

31 files changed

+876
-125
lines changed

Changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
Callfire API client Changelog
22
=============================
3+
Version 1.7.16 - Jun 15 2017
4+
- added fromNumber to Recipient object for sending calls/texts
5+
- added strictValidation flag for adding contacts to broadcast
6+
- added useCustomFields to createContactList/addContactListContacts apis
7+
38
Version 1.7.15 - May 4 2017
49
- removed subscriptions api (not supported from v2 api client)
510
- fixed trivial bug with requests creation

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
group = com.callfire
22
baseName = callfire-api-client
3-
version = 1.7.15
3+
version = 1.7.16

src/itest/java/com/callfire/api/client/integration/callstexts/CallsApiTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ public void testSendCall() throws Exception {
6868
recipient2.setLiveMessageSoundId(1L);
6969
recipient2.setPhoneNumber(getCallerId());
7070
recipient2.setTransferMessage("transferTestMessage");
71-
recipient1.setTransferDigit("2");
71+
recipient2.setTransferDigit("2");
7272
recipient2.setTransferMessageSoundId(1L);
73+
recipient2.setFromNumber(getCallerId());
7374

7475
List<Call> calls = client.callsApi()
7576
.send(asList(recipient1, recipient2), 7373471003L, "items(id,fromNumber,state)");
@@ -86,6 +87,7 @@ public void testSendCall() throws Exception {
8687
.defaultLiveMessage("defaultLive")
8788
.defaultMachineMessage("defaultMachine")
8889
.defaultVoice(Voice.FRENCHCANADIAN1)
90+
.strictValidation(true)
8991
.build();
9092

9193
calls = client.callsApi().send(request);

src/itest/java/com/callfire/api/client/integration/callstexts/TextsApiTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public void testSendText() throws Exception {
5151
recipient1.setPhoneNumber(getCallerId());
5252
TextRecipient recipient2 = new TextRecipient();
5353
recipient2.setPhoneNumber(getCallerId());
54+
recipient2.setFromNumber(getCallerId());
55+
5456
List<Text> texts = client.textsApi()
5557
.send(asList(recipient1, recipient2), 7415135003L, "items(id,fromNumber,state)");
5658

@@ -67,6 +69,7 @@ public void testSendText() throws Exception {
6769
.campaignId(7415135003L)
6870
.fields("items(id,fromNumber,state)")
6971
.defaultMessage("defaultMessage")
72+
.strictValidation(true)
7073
.build();
7174

7275
texts = client.textsApi().send(request);

src/itest/java/com/callfire/api/client/integration/campaigns/CallBroadcastsApiTest.java

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.callfire.api.client.integration.campaigns;
22

33
import com.callfire.api.client.api.callstexts.model.Call;
4+
import com.callfire.api.client.api.callstexts.model.CallRecipient;
45
import com.callfire.api.client.api.campaigns.CallBroadcastsApi;
56
import com.callfire.api.client.api.campaigns.model.Batch;
67
import com.callfire.api.client.api.campaigns.model.Broadcast;
78
import com.callfire.api.client.api.campaigns.model.CallBroadcast;
89
import com.callfire.api.client.api.campaigns.model.CallBroadcastSounds;
9-
import com.callfire.api.client.api.campaigns.model.request.AddBatchRequest;
10-
import com.callfire.api.client.api.campaigns.model.request.FindBroadcastCallsRequest;
11-
import com.callfire.api.client.api.campaigns.model.request.FindCallBroadcastsRequest;
10+
import com.callfire.api.client.api.campaigns.model.request.*;
1211
import com.callfire.api.client.api.common.model.Page;
1312
import com.callfire.api.client.api.common.model.ResourceId;
1413
import com.callfire.api.client.api.common.model.request.GetByIdRequest;
@@ -61,6 +60,44 @@ public void testCrudOperations() throws Exception {
6160
assertEquals(savedBroadcast.getName(), updatedBroadcast.getName());
6261
}
6362

63+
@Test
64+
public void testCrudOperationsWithRequest() throws Exception {
65+
CallBroadcastsApi api = getCallfireClient().callBroadcastsApi();
66+
CallBroadcast broadcast = new CallBroadcast();
67+
broadcast.setName("call_broadcast");
68+
broadcast.setRecipients(makeRecipients());
69+
CallBroadcastSounds sounds = new CallBroadcastSounds();
70+
sounds.setLiveSoundId(getLiveSoundId());
71+
sounds.setMachineSoundId(getLiveSoundId());
72+
broadcast.setSounds(sounds);
73+
broadcast.setResumeNextDay(true);
74+
75+
CreateBroadcastRequest<CallBroadcast> request = CreateBroadcastRequest.create()
76+
.broadcast(broadcast)
77+
.start(true)
78+
.strictValidation(true)
79+
.build();
80+
81+
ResourceId id = api.create(request);
82+
assertNotNull(id.getId());
83+
84+
CallBroadcast savedBroadcast = api.get(id.getId());
85+
assertEquals(broadcast.getName(), savedBroadcast.getName());
86+
assertEquals(broadcast.getResumeNextDay(), true);
87+
// TODO vmikhailov there is no back mapping for recipients
88+
// assertEquals(2, savedBroadcast.getRecipients().size());
89+
// assertThat(savedBroadcast.getRecipients(),
90+
// hasItem(Matchers.<Recipient>hasProperty("phoneNumber", startsWith("1213123456"))));
91+
92+
savedBroadcast.setName("updated_name");
93+
api.update(savedBroadcast, true);
94+
95+
CallBroadcast updatedBroadcast = api.get(id.getId(), "id,name");
96+
assertNull(updatedBroadcast.getStatus());
97+
assertNotNull(updatedBroadcast.getId());
98+
assertEquals(savedBroadcast.getName(), updatedBroadcast.getName());
99+
}
100+
64101
@Test
65102
public void testStartStopArchiveCampaign() throws Exception {
66103
CallBroadcastsApi api = getCallfireClient().callBroadcastsApi();
@@ -159,4 +196,47 @@ public void testAddRecipientsAndAddRemoveBatches() throws Exception {
159196
System.out.println(batches);
160197
assertTrue(batches.getItems().size() == 100);
161198
}
199+
200+
@Test
201+
public void testAddRecipientsAndAddBatchesWithRequest() throws Exception {
202+
CallBroadcastsApi api = getCallfireClient().callBroadcastsApi();
203+
204+
FindCallBroadcastsRequest findRequest = FindCallBroadcastsRequest.create()
205+
.name("updated_name")
206+
.limit(1L)
207+
.build();
208+
Page<CallBroadcast> broadcasts = api.find(findRequest);
209+
System.out.println(broadcasts);
210+
assertThat(broadcasts.getItems(), not(empty()));
211+
Long id = broadcasts.getItems().get(0).getId();
212+
213+
// add recipients
214+
AddRecipientsRequest<CallRecipient> request = AddRecipientsRequest.create()
215+
.campaignId(id)
216+
.recipients(makeRecipients())
217+
.strictValidation(true)
218+
.build();
219+
List<Call> calls = api.addRecipients(request);
220+
System.out.println(calls);
221+
assertEquals(2, calls.size());
222+
223+
// add batch
224+
AddBatchRequest addBatchRequest = AddBatchRequest.create()
225+
.campaignId(id)
226+
.name("new_batch" + System.currentTimeMillis())
227+
.recipients(makeRecipients())
228+
.strictValidation(true)
229+
.build();
230+
ResourceId newBatchId = api.addBatch(addBatchRequest);
231+
assertNotNull(newBatchId.getId());
232+
233+
// get batches
234+
GetByIdRequest getBatchesRequest = GetByIdRequest.create()
235+
.id(id)
236+
.limit(100L)
237+
.build();
238+
Page<Batch> batches = api.getBatches(getBatchesRequest);
239+
System.out.println(batches);
240+
assertTrue(batches.getItems().size() == 100);
241+
}
162242
}

src/itest/java/com/callfire/api/client/integration/campaigns/TextBroadcastsApiTest.java

Lines changed: 89 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22

33
import com.callfire.api.client.api.callstexts.model.Text;
44
import com.callfire.api.client.api.campaigns.TextBroadcastsApi;
5-
import com.callfire.api.client.api.campaigns.model.Batch;
6-
import com.callfire.api.client.api.campaigns.model.Broadcast;
7-
import com.callfire.api.client.api.campaigns.model.TextBroadcast;
8-
import com.callfire.api.client.api.campaigns.model.TextBroadcastStats;
9-
import com.callfire.api.client.api.campaigns.model.request.AddBatchRequest;
10-
import com.callfire.api.client.api.campaigns.model.request.FindBroadcastTextsRequest;
11-
import com.callfire.api.client.api.campaigns.model.request.FindTextBroadcastsRequest;
5+
import com.callfire.api.client.api.campaigns.model.*;
6+
import com.callfire.api.client.api.campaigns.model.request.*;
127
import com.callfire.api.client.api.common.model.Page;
138
import com.callfire.api.client.api.common.model.ResourceId;
149
import com.callfire.api.client.api.common.model.request.GetByIdRequest;
@@ -57,6 +52,40 @@ public void testCrudOperations() throws Exception {
5752
assertEquals(savedBroadcast.getName(), updatedBroadcast.getName());
5853
}
5954

55+
@Test
56+
public void testCrudOperationsWithRequest() throws Exception {
57+
TextBroadcastsApi api = getCallfireClient().textBroadcastsApi();
58+
TextBroadcast broadcast = new TextBroadcast();
59+
broadcast.setName("text_broadcast");
60+
broadcast.setRecipients(makeTextRecipients());
61+
broadcast.setMessage("test_msg");
62+
broadcast.setResumeNextDay(true);
63+
64+
CreateBroadcastRequest<TextBroadcast> request = CreateBroadcastRequest.create()
65+
.broadcast(broadcast)
66+
.start(true)
67+
.strictValidation(true)
68+
.build();
69+
70+
ResourceId id = api.create(request);
71+
72+
TextBroadcast savedBroadcast = api.get(id.getId());
73+
assertEquals(broadcast.getName(), savedBroadcast.getName());
74+
assertEquals(broadcast.getResumeNextDay(), true);
75+
// TODO vmikhailov there is no back mapping for recipients
76+
// assertEquals(2, savedBroadcast.getRecipients().size());
77+
// assertThat(savedBroadcast.getRecipients(),
78+
// hasItem(Matchers.<Recipient>hasProperty("phoneNumber", startsWith("1213123456"))));
79+
80+
savedBroadcast.setName("updated_name");
81+
api.update(savedBroadcast, true);
82+
83+
TextBroadcast updatedBroadcast = api.get(id.getId(), "id,name");
84+
assertNull(updatedBroadcast.getStatus());
85+
assertNotNull(updatedBroadcast.getId());
86+
assertEquals(savedBroadcast.getName(), updatedBroadcast.getName());
87+
}
88+
6089
@Test
6190
public void testStartStopArchiveCampaign() throws Exception {
6291
TextBroadcastsApi api = getCallfireClient().textBroadcastsApi();
@@ -175,4 +204,57 @@ public void testAddRecipientsAndAddRemoveBatches() throws Exception {
175204
Batch updatedBatch = getCallfireClient().batchesApi().get(resourceId.getId());
176205
assertFalse(updatedBatch.getEnabled());
177206
}
207+
208+
@Test
209+
public void testAddRecipientsAndAddRemoveBatchesWithRequest() throws Exception {
210+
TextBroadcastsApi api = getCallfireClient().textBroadcastsApi();
211+
212+
FindTextBroadcastsRequest findRequest = FindTextBroadcastsRequest.create()
213+
.name("updated_name")
214+
.limit(1L)
215+
.build();
216+
Page<TextBroadcast> broadcasts = api.find(findRequest);
217+
System.out.println(broadcasts);
218+
assertThat(broadcasts.getItems(), not(empty()));
219+
Long id = broadcasts.getItems().get(0).getId();
220+
221+
// add recipients
222+
AddRecipientsRequest<TextRecipient> request = AddRecipientsRequest.create()
223+
.campaignId(id)
224+
.recipients(makeTextRecipients())
225+
.strictValidation(true)
226+
.build();
227+
228+
List<Text> texts = api.addRecipients(request);
229+
System.out.println(texts);
230+
assertEquals(2, texts.size());
231+
assertThat(texts.get(0).getMessage(), startsWith("msg"));
232+
233+
// add batch
234+
AddBatchRequest addBatchRequest = AddBatchRequest.create()
235+
.campaignId(id)
236+
.name("new_batch" + System.currentTimeMillis())
237+
.recipients(makeRecipients())
238+
.strictValidation(true)
239+
.build();
240+
ResourceId resourceId = api.addBatch(addBatchRequest);
241+
assertNotNull(resourceId.getId());
242+
// get batches
243+
GetByIdRequest getBatchesRequest = GetByIdRequest.create()
244+
.id(id)
245+
.limit(100L)
246+
.build();
247+
Page<Batch> batches = api.getBatches(getBatchesRequest);
248+
System.out.println(batches);
249+
assertEquals(batches.getItems().size(), 100);
250+
251+
Batch savedBatch = getCallfireClient().batchesApi().get(resourceId.getId());
252+
assertTrue(savedBatch.getEnabled());
253+
assertEquals(addBatchRequest.getName(), savedBatch.getName());
254+
255+
savedBatch.setEnabled(false);
256+
getCallfireClient().batchesApi().update(savedBatch);
257+
Batch updatedBatch = getCallfireClient().batchesApi().get(resourceId.getId());
258+
assertFalse(updatedBatch.getEnabled());
259+
}
178260
}

src/itest/java/com/callfire/api/client/integration/contacts/ContactListsApiTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void testCreateContactListFromFile() throws Exception {
4141
CallfireClient client = getCallfireClient();
4242
File file = new File(getClass().getClassLoader().getResource("file-examples/contacts1.csv").toURI());
4343
ContactListsApi api = client.contactListsApi();
44-
ResourceId id = api.createFromCsv("fileList", file);
44+
ResourceId id = api.createFromCsv("fileList", file, true);
4545

4646
ContactList contactList = api.get(id.getId());
4747
System.out.println(contactList);
@@ -58,6 +58,7 @@ public void testContactListCRUD() throws Exception {
5858
CreateContactListRequest request = CreateContactListRequest.<String>create()
5959
.name("listFromNumbers")
6060
.contacts(asList(getDid2(), getDid3()))
61+
.useCustomFields(true)
6162
.build();
6263
ResourceId numbersListId = api.create(request);
6364
ContactList contactList = api.get(numbersListId.getId());
@@ -122,6 +123,7 @@ public void testContactListItemsCRUD() throws Exception {
122123
.contactNumbersField("homePhone")
123124
.contactListId(id.getId())
124125
.contacts(asList("12345543211"))
126+
.useCustomFields(true)
125127
.build();
126128
api.addListItems(addItemsRequest);
127129

src/itest/java/com/callfire/api/client/integration/webhooks/WebhooksApiTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ public void testCrudOperations() throws Exception {
4242
assertNotNull(resourceId1.getId());
4343
webhook.setName("test_name2");
4444
ResourceId resourceId2 = api.create(webhook);
45+
webhook.setResource(ResourceType.CONTACT_LIST);
46+
ResourceType.ResourceEvent[] ev2 = {ResourceType.ResourceEvent.VALIDATION_FINISHED};
47+
webhook.setEvents(new TreeSet<>(Arrays.asList(ev2)));
48+
ResourceId resourceId3 = api.create(webhook);
49+
assertNotNull(resourceId3.getId());
4550

4651
FindWebhooksRequest findRequest = FindWebhooksRequest.create()
4752
.limit(30L)
@@ -73,6 +78,7 @@ public void testCrudOperations() throws Exception {
7378

7479
api.delete(resourceId1.getId());
7580
api.delete(resourceId2.getId());
81+
api.delete(resourceId3.getId());
7682

7783
expect404NotFoundCallfireApiException(ex);
7884
api.get(resourceId1.getId());

src/main/java/com/callfire/api/client/RestApiClient.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -197,23 +197,7 @@ public <T> T post(String path, TypeReference<T> type) {
197197
* @throws CallfireClientException in case error has occurred in client.
198198
*/
199199
public <T> T postFile(String path, TypeReference<T> type, Map<String, ?> fileDataParams) {
200-
try {
201-
String uri = getApiBasePath() + path;
202-
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
203-
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
204-
File file = (File) fileDataParams.get("file");
205-
String mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file.getName());
206-
entityBuilder.addBinaryBody("file", file, ContentType.create(mimeType), file.getName());
207-
if (fileDataParams.get("name") != null) {
208-
entityBuilder.addTextBody("name", (String) fileDataParams.get("name"));
209-
}
210-
RequestBuilder requestBuilder = RequestBuilder.post(uri).setEntity(entityBuilder.build());
211-
LOGGER.debug("POST file upload request to {} with params {}", uri, fileDataParams);
212-
213-
return doRequest(requestBuilder, type);
214-
} catch (IOException e) {
215-
throw new CallfireClientException(e);
216-
}
200+
return postFile(path, type, fileDataParams, null);
217201
}
218202

219203
/**
@@ -241,12 +225,17 @@ public <T> T postFile(String path, TypeReference<T> type, Map<String, ?> fileDat
241225
File file = (File) fileDataParams.get("file");
242226
String mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file.getName());
243227
entityBuilder.addBinaryBody("file", file, ContentType.create(mimeType), file.getName());
244-
if (fileDataParams.get("name") != null) {
245-
entityBuilder.addTextBody("name", (String) fileDataParams.get("name"));
228+
fileDataParams.remove("file");
229+
230+
for (Map.Entry<String, ?> entry : fileDataParams.entrySet()) {
231+
if ((entry.getValue() != null && entry.getKey() != null)) {
232+
entityBuilder.addTextBody(entry.getKey(), entry.getValue().toString());
233+
}
246234
}
235+
247236
RequestBuilder requestBuilder = RequestBuilder.post(uri)
248237
.setEntity(entityBuilder.build())
249-
.addParameters(queryParams.toArray(new NameValuePair[queryParams.size()]));;
238+
.addParameters(queryParams != null ? queryParams.toArray(new NameValuePair[queryParams.size()]) : new NameValuePair[]{});
250239
LOGGER.debug("POST file upload request to {} with params {}", uri, fileDataParams);
251240

252241
return doRequest(requestBuilder, type);
@@ -275,6 +264,28 @@ public <T> T post(String path, TypeReference<T> type, Object payload) {
275264
return post(path, type, payload, Collections.<NameValuePair>emptyList());
276265
}
277266

267+
/**
268+
* Performs POST request with body to specified path
269+
*
270+
* @param path request path
271+
* @param type response entity type
272+
* @param payload request payload
273+
* @param request finder request with query parameters
274+
* @param <T> response entity type
275+
* @return pojo mapped from json
276+
* @throws BadRequestException in case HTTP response code is 400 - Bad request, the request was formatted improperly.
277+
* @throws UnauthorizedException in case HTTP response code is 401 - Unauthorized, API Key missing or invalid.
278+
* @throws AccessForbiddenException in case HTTP response code is 403 - Forbidden, insufficient permissions.
279+
* @throws ResourceNotFoundException in case HTTP response code is 404 - NOT FOUND, the resource requested does not exist.
280+
* @throws InternalServerErrorException in case HTTP response code is 500 - Internal Server Error.
281+
* @throws CallfireApiException in case HTTP response code is something different from codes listed above.
282+
* @throws CallfireClientException in case error has occurred in client.
283+
*/
284+
public <T> T post(String path, TypeReference<T> type, Object payload, CallfireModel request) {
285+
List<NameValuePair> queryParams = buildQueryParams(request);
286+
return post(path, type, payload, queryParams);
287+
}
288+
278289
/**
279290
* Performs POST request with body to specified path
280291
*

0 commit comments

Comments
 (0)