From 17d8e5bd584a21aa210a4e4022a0b9c2b5d2be16 Mon Sep 17 00:00:00 2001 From: Pierre Beitz Date: Fri, 19 Dec 2025 16:50:15 +0100 Subject: [PATCH] Add support for the export API to search tickets --- .../java/org/zendesk/client/v2/Zendesk.java | 14 ++++++++- .../org/zendesk/client/v2/RealSmokeTest.java | 30 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/zendesk/client/v2/Zendesk.java b/src/main/java/org/zendesk/client/v2/Zendesk.java index 76265901..aaf865ac 100644 --- a/src/main/java/org/zendesk/client/v2/Zendesk.java +++ b/src/main/java/org/zendesk/client/v2/Zendesk.java @@ -558,6 +558,13 @@ public Iterable getTicketsFromSearch(String searchTerm) { handleList(Ticket.class, "results")); } + public Iterable getTicketFromSearchWithExport(String searchTerm) { + return new PagedIterable<>( + tmpl(cbp("/search/export", true).toString() + "&filter[type]=ticket&query={query}") + .set("query", searchTerm + " type:ticket"), + handleList(Ticket.class, "results")); + } + public Iterable
getArticleFromSearch(String searchTerm) { return new PagedIterable<>( tmpl("/help_center/articles/search.json{?query}").set("query", searchTerm), @@ -3862,11 +3869,16 @@ private TemplateUri tmpl(String template) { } private TemplateUri cbp(String path) { + return cbp(path, false); + } + + private TemplateUri cbp(String path, boolean noDomain) { Objects.requireNonNull(path, "Path cannot be null"); if (path.indexOf('?') != -1) { throw new IllegalArgumentException("Path cannot contain a query string"); } - return new TemplateUri(url + path + "?page[size]={pageSize}").set("pageSize", cbpPageSize); + return new TemplateUri((noDomain ? "" : url) + path + "?page[size]={pageSize}") + .set("pageSize", cbpPageSize); } private Uri cnst(String template) { diff --git a/src/test/java/org/zendesk/client/v2/RealSmokeTest.java b/src/test/java/org/zendesk/client/v2/RealSmokeTest.java index 045434d0..7ec8c0d5 100644 --- a/src/test/java/org/zendesk/client/v2/RealSmokeTest.java +++ b/src/test/java/org/zendesk/client/v2/RealSmokeTest.java @@ -2798,6 +2798,36 @@ public void getTicketsFromSearch() throws Exception { } } + @Test + public void getTicketFromSearchWithExport() throws Exception { + createClientWithTokenOrPassword(); + + Ticket t = newTestTicket(); + t.setRequester(new Ticket.Requester("a name", "email+alias@acme.org")); + Ticket ticket = null; + try { + ticket = instance.createTicket(t); + // according to the doc, it takes about 1 minute for the ticket to be indexed + // running several time, it seems that the actual value is around 30-40s + Awaitility.with() + .pollDelay(20, SECONDS) + .and() + .pollInterval(10, SECONDS) + .await() + .timeout(90, SECONDS) + .until( + () -> { + Iterable tickets = + instance.getTicketFromSearchWithExport("requester:email+alias@acme.org"); + return StreamSupport.stream(tickets.spliterator(), false).findAny().isPresent(); + }); + } finally { + if (ticket != null) { + instance.deleteTicket(ticket.getId()); + } + } + } + @Test public void getUnresolvedViewReturnsANewlyCreatedTicket() throws Exception { createClientWithTokenOrPassword();