|
1 | 1 | package org.zendesk.client.v2;
|
2 | 2 |
|
| 3 | +import org.apache.commons.lang3.time.DateUtils; |
| 4 | +import org.hamcrest.CoreMatchers; |
3 | 5 | import org.hamcrest.Matchers;
|
4 | 6 | import org.hamcrest.core.IsCollectionContaining;
|
5 | 7 | import org.junit.After;
|
|
31 | 33 | import org.zendesk.client.v2.model.SuspendedTicket;
|
32 | 34 | import org.zendesk.client.v2.model.Ticket;
|
33 | 35 | import org.zendesk.client.v2.model.TicketForm;
|
| 36 | +import org.zendesk.client.v2.model.TicketImport; |
| 37 | +import org.zendesk.client.v2.model.Type; |
34 | 38 | import org.zendesk.client.v2.model.User;
|
35 | 39 | import org.zendesk.client.v2.model.dynamic.DynamicContentItem;
|
36 | 40 | import org.zendesk.client.v2.model.dynamic.DynamicContentItemVariant;
|
|
47 | 51 |
|
48 | 52 | import java.util.ArrayList;
|
49 | 53 | import java.util.Arrays;
|
| 54 | +import java.util.Calendar; |
50 | 55 | import java.util.Collections;
|
51 | 56 | import java.util.Date;
|
52 | 57 | import java.util.HashSet;
|
@@ -355,6 +360,31 @@ public void createDeleteTicket() throws Exception {
|
355 | 360 | assertThat(instance.getTicket(ticket.getId()), nullValue());
|
356 | 361 | }
|
357 | 362 |
|
| 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 | + |
358 | 388 | @Test
|
359 | 389 | public void createPermanentlyDeleteTicket() throws Exception {
|
360 | 390 | createClientWithTokenOrPassword();
|
@@ -522,6 +552,93 @@ public void updateTickets() throws Exception {
|
522 | 552 | }
|
523 | 553 | }
|
524 | 554 |
|
| 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 | + |
525 | 642 | @Test
|
526 | 643 | public void lookupUserByEmail() throws Exception {
|
527 | 644 | createClientWithTokenOrPassword();
|
@@ -1669,6 +1786,38 @@ private Ticket newTestTicket() {
|
1669 | 1786 | return ticket;
|
1670 | 1787 | }
|
1671 | 1788 |
|
| 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 | + |
1672 | 1821 | /**
|
1673 | 1822 | * Wait until a given JobStatus is marked as completed
|
1674 | 1823 | *
|
|
0 commit comments