Skip to content

Commit 4d54133

Browse files
authored
Merge pull request #348 from cloudbees-oss/dates
Validate dates management
2 parents a3a3209 + 2eb54fc commit 4d54133

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

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

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.zendesk.client.v2;
22

3+
import org.apache.commons.lang3.time.DateUtils;
4+
import org.hamcrest.CoreMatchers;
35
import org.hamcrest.Matchers;
46
import org.hamcrest.core.IsCollectionContaining;
57
import org.junit.After;
@@ -31,6 +33,8 @@
3133
import org.zendesk.client.v2.model.SuspendedTicket;
3234
import org.zendesk.client.v2.model.Ticket;
3335
import org.zendesk.client.v2.model.TicketForm;
36+
import org.zendesk.client.v2.model.TicketImport;
37+
import org.zendesk.client.v2.model.Type;
3438
import org.zendesk.client.v2.model.User;
3539
import org.zendesk.client.v2.model.dynamic.DynamicContentItem;
3640
import org.zendesk.client.v2.model.dynamic.DynamicContentItemVariant;
@@ -47,6 +51,7 @@
4751

4852
import java.util.ArrayList;
4953
import java.util.Arrays;
54+
import java.util.Calendar;
5055
import java.util.Collections;
5156
import java.util.Date;
5257
import java.util.HashSet;
@@ -355,6 +360,31 @@ public void createDeleteTicket() throws Exception {
355360
assertThat(instance.getTicket(ticket.getId()), nullValue());
356361
}
357362

363+
// https://github.com/cloudbees/zendesk-java-client/issues/94
364+
@Test
365+
public void createTaskTicketWithDueDate() throws Exception {
366+
// given
367+
createClientWithTokenOrPassword();
368+
369+
Date dueDate = Calendar.getInstance().getTime();
370+
Ticket t = newTestTicket();
371+
t.setType(Type.TASK);
372+
t.setDueAt(dueDate);
373+
374+
// when
375+
Ticket ticket = instance.createTicket(t);
376+
377+
try {
378+
// then
379+
assertThat("The ticket now has an ID", ticket.getId(), notNullValue());
380+
assertThat("The Due Date must be the same (rounded at the second)",
381+
DateUtils.truncate(ticket.getDueAt(),Calendar.SECOND) ,
382+
is(DateUtils.truncate(dueDate,Calendar.SECOND)));
383+
} finally {
384+
instance.deleteTicket(ticket.getId());
385+
}
386+
}
387+
358388
@Test
359389
public void createPermanentlyDeleteTicket() throws Exception {
360390
createClientWithTokenOrPassword();
@@ -522,6 +552,93 @@ public void updateTickets() throws Exception {
522552
}
523553
}
524554

555+
@Test
556+
public void importTicket() throws Exception {
557+
558+
createClientWithTokenOrPassword();
559+
560+
// given
561+
final TicketImport ticketImport = newTestTicketImport();
562+
563+
// when
564+
Ticket importedTicket = instance.importTicket(ticketImport);
565+
566+
try {
567+
// then
568+
assertThat("The imported ticket has an ID", importedTicket.getId(), notNullValue());
569+
assertThat("The imported ticket has a subject", importedTicket.getSubject(),
570+
CoreMatchers.containsString("[zendesk-java-client] This is a test"));
571+
assertThat("The imported ticket is closed", importedTicket.getStatus(), is(Status.CLOSED));
572+
assertThat("The imported ticket has a createdAt value", importedTicket.getCreatedAt(), notNullValue());
573+
assertThat("The imported ticket has an updatedAt value", importedTicket.getUpdatedAt(), notNullValue());
574+
assertThat("The imported ticket has tags", importedTicket.getTags(),
575+
containsInAnyOrder("zendesk-java-client", "smoke-test"));
576+
} finally {
577+
// cleanup
578+
instance.deleteTicket(importedTicket);
579+
}
580+
}
581+
582+
@Test
583+
public void importTickets() throws Exception {
584+
585+
createClientWithTokenOrPassword();
586+
587+
// given
588+
final TicketImport[] ticketsToImport = newTestTicketImports();
589+
590+
// when
591+
JobStatus status = waitJobCompletion(instance.importTickets(ticketsToImport));
592+
final Long[] createdTicketsIds =
593+
status.getResults().stream().map(JobResult::getId).toArray(Long[]::new);
594+
595+
try {
596+
final List<Ticket> createdTickets =
597+
instance.getTickets(firstElement(createdTicketsIds), otherElements(createdTicketsIds));
598+
599+
assertThat("We have the same number of tickets", status.getResults(), hasSize(ticketsToImport.length));
600+
601+
status.getResults().forEach(jobResult -> {
602+
assertThat("The job result has an account_id entry", jobResult.getAccountId(), notNullValue());
603+
assertThat("The job result has no action entry", jobResult.getAction(), nullValue());
604+
assertThat("The job result has no details entry", jobResult.getDetails(), nullValue());
605+
assertThat("The job result has no email entry", jobResult.getEmail(), nullValue());
606+
assertThat("The job result has no error entry", jobResult.getError(), nullValue());
607+
assertThat("The job result has no external_id entry", jobResult.getExternalId(), nullValue());
608+
assertThat("The job result has an id entry", jobResult.getId(), notNullValue());
609+
assertThat("The job result has an index entry", jobResult.getIndex(), notNullValue());
610+
assertThat("The job result has no status entry", jobResult.getStatus(), nullValue());
611+
assertThat("The job result has no success entry", jobResult.getSuccess(), nullValue());
612+
});
613+
614+
assertThat("All tickets are created (we verify that all titles are present)",
615+
createdTickets
616+
.stream()
617+
.map(Ticket::getSubject)
618+
.collect(Collectors.toList()),
619+
containsInAnyOrder(
620+
Arrays.stream(ticketsToImport)
621+
.map(Ticket::getSubject)
622+
.toArray()));
623+
createdTickets.forEach(importedTicket -> {
624+
assertThat("The imported ticket has an ID", importedTicket.getId(), notNullValue());
625+
assertThat("The imported ticket has a subject", importedTicket.getSubject(),
626+
CoreMatchers.containsString("[zendesk-java-client] This is a test"));
627+
assertThat("The imported ticket is closed", importedTicket.getStatus(), is(Status.CLOSED));
628+
assertThat("The imported ticket has a createdAt value", importedTicket.getCreatedAt(), notNullValue());
629+
assertThat("The imported ticket has an updatedAt value", importedTicket.getUpdatedAt(), notNullValue());
630+
assertThat("The imported ticket has tags", importedTicket.getTags(),
631+
containsInAnyOrder("zendesk-java-client", "smoke-test"));
632+
633+
});
634+
635+
// then
636+
} finally {
637+
// cleanup
638+
instance.deleteTickets(firstElement(createdTicketsIds), otherElements(createdTicketsIds));
639+
}
640+
}
641+
525642
@Test
526643
public void lookupUserByEmail() throws Exception {
527644
createClientWithTokenOrPassword();
@@ -1669,6 +1786,38 @@ private Ticket newTestTicket() {
16691786
return ticket;
16701787
}
16711788

1789+
/**
1790+
* Creates several new ticketImport (2 min, 5 max)
1791+
*/
1792+
private TicketImport[] newTestTicketImports() {
1793+
final ArrayList<TicketImport> ticketImports = new ArrayList<>();
1794+
for (int i = 0; i < 2 + RANDOM.nextInt(3); i++) {
1795+
ticketImports.add(newTestTicketImport());
1796+
}
1797+
return ticketImports.toArray(new TicketImport[0]);
1798+
}
1799+
1800+
/**
1801+
* Creates a new ticketImport
1802+
*/
1803+
private TicketImport newTestTicketImport() {
1804+
assumeThat("Must have a requester email", config.getProperty("requester.email"), notNullValue());
1805+
assumeThat("Must have a requester name", config.getProperty("requester.name"), notNullValue());
1806+
Date now = Calendar.getInstance().getTime();
1807+
final TicketImport ticketImport = new TicketImport(
1808+
new Ticket.Requester(config.getProperty("requester.name"), config.getProperty("requester.email")),
1809+
"[zendesk-java-client] This is a test " + UUID.randomUUID().toString(),
1810+
Collections.singletonList(new Comment(TICKET_COMMENT1)));
1811+
ticketImport.setCollaborators(Arrays.asList(new Collaborator("Bob Example", "[email protected]"),
1812+
new Collaborator("Alice Example", "[email protected]")));
1813+
ticketImport.setTags(Arrays.asList("zendesk-java-client", "smoke-test"));
1814+
ticketImport.setStatus(Status.CLOSED);
1815+
ticketImport.setCreatedAt(now);
1816+
ticketImport.setUpdatedAt(now);
1817+
ticketImport.setSolvedAt(now);
1818+
return ticketImport;
1819+
}
1820+
16721821
/**
16731822
* Wait until a given JobStatus is marked as completed
16741823
*

0 commit comments

Comments
 (0)