Skip to content

Commit 352bb48

Browse files
authored
Merge pull request #630 from btpnlsl/safe_update
Add Ticket properties to support safe update
2 parents 5466a40 + cc6d835 commit 352bb48

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.zendesk.client.v2.model;
22

33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
46
import com.fasterxml.jackson.annotation.JsonProperty;
57
import java.util.Date;
68
import java.util.List;
@@ -32,6 +34,7 @@ public class Ticket extends Request implements SearchResultEntity {
3234
private Long ticketFormId;
3335
private Long brandId;
3436
private Boolean isPublic;
37+
private Boolean safeUpdate;
3538

3639
public Ticket() {}
3740

@@ -218,6 +221,34 @@ public void setIsPublic(Boolean isPublic) {
218221
this.isPublic = isPublic;
219222
}
220223

224+
/**
225+
* The safe_update & update_stamp parameters are used by the Zendesk API to protect against
226+
* update collisions. If the safe_update parameter is set to true and Zendesk detects that a
227+
* ticket has been updated since the time specified in update_stamp then it will return an HTTP
228+
* CONFLICT status to let the caller know that the ticket was not successfully updated.
229+
*
230+
* <p>These properties are annotated with JsonInclude(Include.NON_DEFAULT) so that they will only
231+
* be serialized to JSON if safeUpdate is set to TRUE.
232+
*
233+
* <p>For more information see Zendesk documentation at:
234+
* https://developer.zendesk.com/documentation/ticketing/managing-tickets/creating-and-updating-tickets/#protecting-against-ticket-update-collisions
235+
*/
236+
@JsonInclude(Include.NON_DEFAULT)
237+
@JsonProperty("safe_update")
238+
public Boolean getSafeUpdate() {
239+
return safeUpdate;
240+
}
241+
242+
public void setSafeUpdate(Boolean safeUpdate) {
243+
this.safeUpdate = safeUpdate;
244+
}
245+
246+
@JsonInclude(Include.NON_DEFAULT)
247+
@JsonProperty("updated_stamp")
248+
private Date getUpdatedStamp() {
249+
return Boolean.TRUE.equals(safeUpdate) ? updatedAt : null;
250+
}
251+
221252
@Override
222253
public String toString() {
223254
return "Ticket"
@@ -285,6 +316,8 @@ public String toString() {
285316
+ brandId
286317
+ ", isPublic="
287318
+ isPublic
319+
+ ", safeUpdate="
320+
+ safeUpdate
288321
+ ", createdAt="
289322
+ createdAt
290323
+ ", updatedAt="
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.zendesk.client.v2.model;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import java.util.Calendar;
7+
import java.util.Date;
8+
import java.util.Random;
9+
import org.junit.Test;
10+
import org.zendesk.client.v2.Zendesk;
11+
12+
public class TicketTest {
13+
14+
private static final Random RANDOM = new Random();
15+
private static final String TICKET_COMMENT1 = "Please ignore this ticket";
16+
private static final Date NOW = Calendar.getInstance().getTime();
17+
18+
@Test
19+
public void serializeWithNullSafeUpdate() throws Exception {
20+
ObjectMapper mapper = Zendesk.createMapper();
21+
Ticket ticket = createSampleTicket();
22+
assertThat(mapper.writeValueAsString(ticket))
23+
.doesNotContain("\"safe_update\"")
24+
.doesNotContain("\"updated_stamp\"");
25+
}
26+
27+
@Test
28+
public void serializeWithFalseSafeUpdate() throws Exception {
29+
ObjectMapper mapper = Zendesk.createMapper();
30+
Ticket ticket = createSampleTicket();
31+
ticket.setSafeUpdate(false);
32+
assertThat(mapper.writeValueAsString(ticket))
33+
.doesNotContain("\"safe_update\"")
34+
.doesNotContain("\"updated_stamp\"");
35+
}
36+
37+
@Test
38+
public void serializeWithSafeUpdate() throws Exception {
39+
ObjectMapper mapper = Zendesk.createMapper();
40+
Ticket ticket = createSampleTicket();
41+
ticket.setSafeUpdate(true);
42+
assertThat(mapper.writeValueAsString(ticket))
43+
.contains("\"safe_update\"")
44+
.contains("\"updated_stamp\"");
45+
}
46+
47+
private Ticket createSampleTicket() {
48+
Ticket ticket = new Ticket();
49+
ticket.setId(Math.abs(RANDOM.nextLong()));
50+
ticket.setComment(new Comment(TICKET_COMMENT1));
51+
ticket.setUpdatedAt(NOW);
52+
return ticket;
53+
}
54+
}

0 commit comments

Comments
 (0)