Skip to content

Commit 8a045fd

Browse files
authored
Merge pull request #466 from aheritier/triggers
2 parents 52be68c + 9d22463 commit 8a045fd

File tree

5 files changed

+190
-9
lines changed

5 files changed

+190
-9
lines changed

src/main/java/org/zendesk/client/v2/Zendesk.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -759,22 +759,54 @@ public Iterable<Trigger> getTriggers() {
759759
return new PagedIterable<>(cnst("/triggers.json"), handleList(Trigger.class, "triggers"));
760760
}
761761

762+
public Iterable<Trigger> getTriggers(String categoryId, boolean active, String sortBy, SortOrder sortOrder) {
763+
return new PagedIterable<>(
764+
tmpl("/triggers.json{?category_id,active,sort_by,sort_order}")
765+
.set("category_id", categoryId)
766+
.set("active", active)
767+
.set("sort_by", sortBy)
768+
.set("sort_order", sortOrder.getQueryParameter()),
769+
handleList(Trigger.class, "triggers"));
770+
}
771+
772+
public Iterable<Trigger> getActiveTriggers() {
773+
return new PagedIterable<>(cnst("/triggers/active.json"), handleList(Trigger.class, "triggers"));
774+
}
775+
776+
public Iterable<Trigger> searchTriggers(String query) {
777+
return new PagedIterable<>(tmpl("/triggers/search.json{?query}").set("query", query),
778+
handleList(Trigger.class, "triggers"));
779+
}
780+
781+
public Iterable<Trigger> searchTriggers(String query, boolean active, String sortBy, SortOrder sortOrder) {
782+
return new PagedIterable<>(
783+
tmpl("/triggers/search.json{?query,active,sort_by,sort_order}")
784+
.set("query", query)
785+
.set("active", active)
786+
.set("sort_by", sortBy)
787+
.set("sort_order", sortOrder.getQueryParameter()),
788+
handleList(Trigger.class, "triggers"));
789+
}
790+
762791
public Trigger getTrigger(long id) {
763-
return complete(submit(req("GET", tmpl("/triggers/{id}.json").set("id", id)), handle(Trigger.class, "trigger")));
792+
return complete(
793+
submit(req("GET", tmpl("/triggers/{id}.json").set("id", id)), handle(Trigger.class, "trigger")));
764794
}
765795

766796
public Trigger createTrigger(Trigger trigger) {
767-
return complete(submit(req("POST", cnst("/triggers.json"), JSON, json(Collections.singletonMap("trigger", trigger))),
768-
handle(Trigger.class, "trigger")));
797+
return complete(
798+
submit(req("POST", cnst("/triggers.json"), JSON, json(Collections.singletonMap("trigger", trigger))),
799+
handle(Trigger.class, "trigger")));
769800
}
770801

771802
public Trigger updateTrigger(Long triggerId, Trigger trigger) {
772-
return complete(submit(req("PUT", tmpl("/triggers/{id}.json").set("id", triggerId), JSON, json(Collections.singletonMap("trigger", trigger))),
773-
handle(Trigger.class, "trigger")));
774-
}
803+
return complete(submit(req("PUT", tmpl("/triggers/{id}.json").set("id", triggerId), JSON,
804+
json(Collections.singletonMap("trigger", trigger))),
805+
handle(Trigger.class, "trigger")));
806+
}
775807

776808
public void deleteTrigger(long triggerId) {
777-
complete(submit(req("DELETE", tmpl("/triggers/{id}.json").set("id", triggerId)), handleStatus()));
809+
complete(submit(req("DELETE", tmpl("/triggers/{id}.json").set("id", triggerId)), handleStatus()));
778810
}
779811

780812

src/main/java/org/zendesk/client/v2/model/Trigger.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class Trigger implements Serializable {
2222
private List<Action> actions;
2323
private Date createdAt;
2424
private Date updatedAt;
25+
private String categoryId;
2526

2627
public Long getId() {
2728
return id;
@@ -31,6 +32,14 @@ public void setId(Long id) {
3132
this.id = id;
3233
}
3334

35+
public String getCategoryId() {
36+
return categoryId;
37+
}
38+
39+
public void setCategoryId(String categoryId) {
40+
this.categoryId = categoryId;
41+
}
42+
3443
public String getTitle() {
3544
return title;
3645
}
@@ -91,6 +100,7 @@ public void setUpdatedAt(Date updatedAt) {
91100
public String toString() {
92101
return "Trigger" +
93102
"{id=" + id +
103+
", categoryId=" + categoryId +
94104
", title=" + title +
95105
", active=" + active +
96106
", position=" + position +

src/test/java/org/zendesk/client/v2/RealSmokeTest.java

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.junit.rules.Timeout;
1414
import org.slf4j.Logger;
1515
import org.slf4j.LoggerFactory;
16+
import org.zendesk.client.v2.model.Action;
1617
import org.zendesk.client.v2.model.AgentRole;
1718
import org.zendesk.client.v2.model.Audit;
1819
import org.zendesk.client.v2.model.Brand;
@@ -36,6 +37,7 @@
3637
import org.zendesk.client.v2.model.Ticket;
3738
import org.zendesk.client.v2.model.TicketForm;
3839
import org.zendesk.client.v2.model.TicketImport;
40+
import org.zendesk.client.v2.model.Trigger;
3941
import org.zendesk.client.v2.model.Type;
4042
import org.zendesk.client.v2.model.User;
4143
import org.zendesk.client.v2.model.dynamic.DynamicContentItem;
@@ -234,6 +236,143 @@ public void getTargets() throws Exception {
234236
}
235237
}
236238

239+
@Test
240+
public void getTriggers() throws Exception {
241+
createClientWithTokenOrPassword();
242+
int count = 0;
243+
for (Trigger t : instance.getTriggers()) {
244+
assertThat(t.getTitle(), notNullValue());
245+
if (++count > 10) {
246+
break;
247+
}
248+
}
249+
}
250+
251+
@Test
252+
public void getTriggersWithParameters() throws Exception {
253+
createClientWithTokenOrPassword();
254+
int count = 0;
255+
for (Trigger t : instance.getTriggers(null,true,"title",SortOrder.ASCENDING)) {
256+
assertThat(t.getTitle(), notNullValue());
257+
if (++count > 10) {
258+
break;
259+
}
260+
}
261+
}
262+
263+
@Test
264+
public void getActiveTriggers() throws Exception {
265+
createClientWithTokenOrPassword();
266+
int count = 0;
267+
for (Trigger t : instance.getActiveTriggers()) {
268+
assertThat(t.getTitle(), notNullValue());
269+
assertTrue(t.isActive());
270+
if (++count > 10) {
271+
break;
272+
}
273+
}
274+
}
275+
276+
@Test
277+
public void createTrigger() throws Exception {
278+
createClientWithTokenOrPassword();
279+
Trigger trigger = createTestTrigger();
280+
try {
281+
trigger = instance.createTrigger(trigger);
282+
assertThat(trigger.getId(), notNullValue());
283+
} finally {
284+
if (trigger.getId() != null) {
285+
instance.deleteTrigger(trigger.getId());
286+
}
287+
}
288+
}
289+
290+
@Test
291+
public void updateTrigger() throws Exception {
292+
createClientWithTokenOrPassword();
293+
Trigger trigger = createTestTrigger();
294+
try {
295+
trigger = instance.createTrigger(trigger);
296+
assertThat(trigger.getId(), notNullValue());
297+
trigger.setTitle(trigger.getTitle() + " Updated");
298+
trigger = instance.updateTrigger(trigger.getId(), trigger);
299+
assertTrue(trigger.getTitle().contains("Updated"));
300+
} finally {
301+
if (trigger.getId() != null) {
302+
instance.deleteTrigger(trigger.getId());
303+
}
304+
}
305+
}
306+
307+
@Test
308+
public void searchTrigger() throws Exception {
309+
createClientWithTokenOrPassword();
310+
List<Trigger> triggers = new ArrayList<>();
311+
final String title = "[zendesk-java-client] SearchTriggerTest " + UUID.randomUUID();
312+
for (int i = 0; i < 3; i++) {
313+
triggers.add(instance.createTrigger(createTestTrigger(title + " " + i)));
314+
}
315+
// It's taking a while before the search returns them
316+
Awaitility.with()
317+
.pollDelay(45, SECONDS).and()
318+
.pollInterval(5, SECONDS).await()
319+
.timeout(60, SECONDS)
320+
.until(() -> StreamSupport.stream(instance.searchTriggers(title).spliterator(), false).count()==3L);
321+
try {
322+
assertThat(StreamSupport.stream(instance.searchTriggers(title).spliterator(), false).count(),
323+
is(3L));
324+
} finally {
325+
triggers.stream().map(Trigger::getId).forEach(instance::deleteTrigger);
326+
}
327+
}
328+
329+
@Test
330+
public void searchTriggerWithParameters() throws Exception {
331+
createClientWithTokenOrPassword();
332+
List<Trigger> triggers = new ArrayList<>();
333+
final String title = "[zendesk-java-client] SearchTriggerTestWithParams " + UUID.randomUUID();
334+
for (int i = 0; i < 3; i++) {
335+
triggers.add(instance.createTrigger(createTestTrigger(title + " " + i)));
336+
}
337+
// It's taking a while before the search returns them
338+
Awaitility.with()
339+
.pollDelay(45, SECONDS).and()
340+
.pollInterval(5, SECONDS).await()
341+
.timeout(60, SECONDS)
342+
.until(() -> StreamSupport.stream(instance.searchTriggers(title).spliterator(), false).count()==3L);
343+
try {
344+
assertThat(StreamSupport.stream(
345+
instance.searchTriggers(title, true, "title", SortOrder.ASCENDING)
346+
.spliterator(),
347+
false).count(),
348+
is(3L));
349+
} finally {
350+
triggers.stream().map(Trigger::getId).forEach(instance::deleteTrigger);
351+
}
352+
}
353+
354+
private Trigger createTestTrigger() {
355+
return createTestTrigger("[zendesk-java-client] Test trigger: " + UUID.randomUUID());
356+
}
357+
358+
private Trigger createTestTrigger(String title) {
359+
Trigger.Condition condition = new Trigger.Condition();
360+
condition.setField("status");
361+
condition.setOperator("is");
362+
condition.setValue("solved");
363+
Trigger.Conditions conditions = new Trigger.Conditions();
364+
conditions.setAll(Collections.singletonList(condition));
365+
Trigger trigger = new Trigger();
366+
trigger.setTitle(title);
367+
trigger.setActive(true);
368+
trigger.setConditions(conditions);
369+
Action action = new Action();
370+
action.setField("status");
371+
action.setValue(new String[]{"solved"});
372+
trigger.setActions(Collections.singletonList(action));
373+
return trigger;
374+
}
375+
237376
@Test
238377
public void getTicketsPagesRequests() throws Exception {
239378
createClientWithTokenOrPassword();
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"id":12345678,"title":"Test Trigger","active":true,"position":45,"conditions":{"all":[],"any":[{"field":"comment_includes_word","operator":"includes","value":"@triggerTest"}]},"actions":[{"field":"notification_target","value":["1234567890",[["key1","value1"],["key2","value2"]]]}],"createdAt":null,"updatedAt":null}
1+
{"id":12345678,"title":"Test Trigger","active":true,"position":45,"conditions":{"all":[],"any":[{"field":"comment_includes_word","operator":"includes","value":"@triggerTest"}]},"actions":[{"field":"notification_target","value":["1234567890",[["key1","value1"],["key2","value2"]]]}],"createdAt":null,"updatedAt":null,"categoryId":null}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"id":12345678,"title":"Test Trigger","active":true,"position":45,"conditions":{"all":[],"any":[{"field":"comment_includes_word","operator":"includes","value":"@triggerTest"}]},"actions":[{"field":"notification_user","value":["09876543","Trigger Target 1 {{ticket.title}}","Test Multiline\n\n{{ticket.comments_formatted}}\n\n--------------------------"]},{"field":"notification_target","value":["98765432","{\n \"color\":\"purple\",\n \"message_format\":\"text\",\n \"message\":\"Trigger Target 2 {{ticket.title}}.\"\n}"]}],"createdAt":null,"updatedAt":null}
1+
{"id":12345678,"title":"Test Trigger","active":true,"position":45,"conditions":{"all":[],"any":[{"field":"comment_includes_word","operator":"includes","value":"@triggerTest"}]},"actions":[{"field":"notification_user","value":["09876543","Trigger Target 1 {{ticket.title}}","Test Multiline\n\n{{ticket.comments_formatted}}\n\n--------------------------"]},{"field":"notification_target","value":["98765432","{\n \"color\":\"purple\",\n \"message_format\":\"text\",\n \"message\":\"Trigger Target 2 {{ticket.title}}.\"\n}"]}],"createdAt":null,"updatedAt":null,"categoryId":null}

0 commit comments

Comments
 (0)