diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 848b885a..32054b53 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -26,8 +26,8 @@ jobs:
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- - name: Meilisearch (v0.29.3 version) setup with Docker
- run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.29.3 meilisearch --no-analytics --master-key='masterKey'
+ - name: Meilisearch (v0.30.5 version) setup with Docker
+ run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.30.5 meilisearch --no-analytics --master-key='masterKey'
- name: Build and run unit and integration tests
run: ./gradlew build integrationTest
- name: Archive test report
diff --git a/README.md b/README.md
index 94c4af33..50dfe81d 100644
--- a/README.md
+++ b/README.md
@@ -263,7 +263,7 @@ Client client = new Client(config);
## 🤖 Compatibility with Meilisearch
-This package only guarantees compatibility with the [version v0.29.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.29.0).
+This package only guarantees compatibility with the [version v0.30.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.30.0).
## 💡 Learn more
diff --git a/src/main/java/com/meilisearch/sdk/Client.java b/src/main/java/com/meilisearch/sdk/Client.java
index 33d624a7..3e7ba0c9 100644
--- a/src/main/java/com/meilisearch/sdk/Client.java
+++ b/src/main/java/com/meilisearch/sdk/Client.java
@@ -7,12 +7,15 @@
import com.auth0.jwt.algorithms.Algorithm;
import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.json.JsonHandler;
+import com.meilisearch.sdk.model.CancelTasksQuery;
+import com.meilisearch.sdk.model.DeleteTasksQuery;
import com.meilisearch.sdk.model.IndexesQuery;
import com.meilisearch.sdk.model.Key;
import com.meilisearch.sdk.model.KeyUpdate;
import com.meilisearch.sdk.model.KeysQuery;
import com.meilisearch.sdk.model.Results;
import com.meilisearch.sdk.model.Stats;
+import com.meilisearch.sdk.model.SwapIndexesParams;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TasksQuery;
@@ -175,6 +178,18 @@ public TaskInfo deleteIndex(String uid) throws MeilisearchException {
return this.indexesHandler.deleteIndex(uid);
}
+ /**
+ * Swap the documents, settings, and task history of two or more indexes
+ * https://docs.meilisearch.com/reference/api/indexes.html#swap-indexes
+ *
+ * @param param accepted by the swap-indexes route
+ * @return Meilisearch API response as TaskInfo
+ * @throws MeilisearchException if an error occurs
+ */
+ public TaskInfo swapIndexes(SwapIndexesParams[] param) throws MeilisearchException {
+ return config.httpClient.post("/swap-indexes", param, TaskInfo.class);
+ }
+
/**
* Triggers the creation of a Meilisearch dump.
* https://docs.meilisearch.com/reference/api/dump.html#create-a-dump
@@ -264,6 +279,30 @@ public TasksResults getTasks(TasksQuery param) throws MeilisearchException {
return this.tasksHandler.getTasks(param);
}
+ /**
+ * Cancel any number of enqueued or processing tasks
+ * https://docs.meilisearch.com/reference/api/tasks.html#cancel-tasks
+ *
+ * @param param accept by the tasks route
+ * @return Meilisearch API response as TaskInfo
+ * @throws MeilisearchException if an error occurs
+ */
+ public TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
+ return this.tasksHandler.cancelTasks(param);
+ }
+
+ /**
+ * Delete a finished (succeeded, failed, or canceled) task
+ * https://docs.meilisearch.com/reference/api/tasks.html#delete-tasks
+ *
+ * @param param accept by the tasks route
+ * @return Meilisearch API response as TaskInfo
+ * @throws MeilisearchException if an error occurs
+ */
+ public TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
+ return this.tasksHandler.deleteTasks(param);
+ }
+
/**
* Waits for a task to be processed
*
diff --git a/src/main/java/com/meilisearch/sdk/Index.java b/src/main/java/com/meilisearch/sdk/Index.java
index 91ad9515..de31e0de 100644
--- a/src/main/java/com/meilisearch/sdk/Index.java
+++ b/src/main/java/com/meilisearch/sdk/Index.java
@@ -6,6 +6,7 @@
import com.meilisearch.sdk.model.IndexStats;
import com.meilisearch.sdk.model.Results;
import com.meilisearch.sdk.model.SearchResult;
+import com.meilisearch.sdk.model.Searchable;
import com.meilisearch.sdk.model.Settings;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
@@ -345,7 +346,7 @@ public SearchResult search(String q) throws MeilisearchException {
* @return Meilisearch API response
* @throws MeilisearchException if an error occurs
*/
- public SearchResult search(SearchRequest searchRequest) throws MeilisearchException {
+ public Searchable search(SearchRequest searchRequest) throws MeilisearchException {
return this.search.search(this.uid, searchRequest);
}
diff --git a/src/main/java/com/meilisearch/sdk/Search.java b/src/main/java/com/meilisearch/sdk/Search.java
index de5862c6..d2a9e2ca 100644
--- a/src/main/java/com/meilisearch/sdk/Search.java
+++ b/src/main/java/com/meilisearch/sdk/Search.java
@@ -2,6 +2,8 @@
import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.model.SearchResult;
+import com.meilisearch.sdk.model.SearchResultPaginated;
+import com.meilisearch.sdk.model.Searchable;
/**
* Class used for searching on Meilisearch indexes
@@ -67,7 +69,10 @@ SearchResult search(String uid, String q) throws MeilisearchException {
* @return search results
* @throws MeilisearchException Search Exception or Client Error
*/
- SearchResult search(String uid, SearchRequest sr) throws MeilisearchException {
+ Searchable search(String uid, SearchRequest sr) throws MeilisearchException {
+ if (sr != null && (sr.getPage() != null || sr.getHitsPerPage() != null)) {
+ return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResultPaginated.class);
+ }
return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResult.class);
}
}
diff --git a/src/main/java/com/meilisearch/sdk/SearchRequest.java b/src/main/java/com/meilisearch/sdk/SearchRequest.java
index 2a7ebf50..825f9762 100644
--- a/src/main/java/com/meilisearch/sdk/SearchRequest.java
+++ b/src/main/java/com/meilisearch/sdk/SearchRequest.java
@@ -34,6 +34,8 @@ public class SearchRequest {
private Boolean showMatchesPosition;
private String[] facets;
private String[] sort;
+ protected Integer page;
+ protected Integer hitsPerPage;
/**
* Constructor for SearchRequest for building search queries with the default values: offset: 0,
@@ -85,6 +87,8 @@ public String toString() {
.put("showMatchesPosition", this.showMatchesPosition)
.put("facets", this.facets)
.put("sort", this.sort)
+ .put("page", this.page)
+ .put("hitsPerPage", this.hitsPerPage)
.putOpt("attributesToCrop", this.attributesToCrop)
.putOpt("attributesToHighlight", this.attributesToHighlight)
.putOpt("filter", this.filter)
diff --git a/src/main/java/com/meilisearch/sdk/TasksHandler.java b/src/main/java/com/meilisearch/sdk/TasksHandler.java
index 637aaf10..9471e797 100644
--- a/src/main/java/com/meilisearch/sdk/TasksHandler.java
+++ b/src/main/java/com/meilisearch/sdk/TasksHandler.java
@@ -3,7 +3,10 @@
import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.exceptions.MeilisearchTimeoutException;
import com.meilisearch.sdk.http.URLBuilder;
+import com.meilisearch.sdk.model.CancelTasksQuery;
+import com.meilisearch.sdk.model.DeleteTasksQuery;
import com.meilisearch.sdk.model.Task;
+import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TasksQuery;
import com.meilisearch.sdk.model.TasksResults;
import java.util.Date;
@@ -88,18 +91,40 @@ TasksResults getTasks(String indexUid) throws MeilisearchException {
* @throws MeilisearchException if client request causes an error
*/
TasksResults getTasks(String indexUid, TasksQuery param) throws MeilisearchException {
- String[] newIndexUid = new String[param.getIndexUid().length + 1];
- if (param != null && param.getIndexUid() != null) {
- for (int i = 0; i < param.getIndexUid().length; i++)
- newIndexUid[i] = param.getIndexUid()[i];
- newIndexUid[param.getIndexUid().length] = indexUid;
- }
+ param = addIndexUidToQuery(indexUid, param);
TasksResults result =
httpClient.get(tasksPath().addQuery(param.toQuery()).getURL(), TasksResults.class);
return result;
}
+ /**
+ * Delete tasks from the client
+ *
+ * @param param accept by the tasks route
+ * @return Meilisearch API response as TaskInfo
+ * @throws MeilisearchException if client request causes an error
+ */
+ TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
+ URLBuilder urlb = tasksPath().addSubroute("cancel");
+ TaskInfo result =
+ httpClient.post(urlb.addQuery(param.toQuery()).getURL(), null, TaskInfo.class);
+ return result;
+ }
+
+ /**
+ * Delete tasks from the client
+ *
+ * @param param accept by the tasks route
+ * @return Meilisearch API response as TaskInfo
+ * @throws MeilisearchException if client request causes an error
+ */
+ TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
+ TaskInfo result =
+ httpClient.delete(tasksPath().addQuery(param.toQuery()).getURL(), TaskInfo.class);
+ return result;
+ }
+
/**
* Waits for a task to be processed
*
@@ -143,4 +168,20 @@ void waitForTask(int taskUid, int timeoutInMs, int intervalInMs) throws Meilisea
private URLBuilder tasksPath() {
return new URLBuilder("/tasks");
}
+
+ /** Add index uid to index uids list in task query */
+ TasksQuery addIndexUidToQuery(String indexUid, TasksQuery param) {
+ if (param != null && param.getIndexUids() != null) {
+ String[] newIndexUid = new String[param.getIndexUids().length + 1];
+ for (int i = 0; i < param.getIndexUids().length; i++)
+ newIndexUid[i] = param.getIndexUids()[i];
+ newIndexUid[param.getIndexUids().length] = indexUid;
+ param.setIndexUids(newIndexUid);
+ } else if (param != null) {
+ param.setIndexUids(new String[] {indexUid});
+ } else {
+ param = new TasksQuery().setIndexUids(new String[] {indexUid});
+ }
+ return param;
+ }
}
diff --git a/src/main/java/com/meilisearch/sdk/http/URLBuilder.java b/src/main/java/com/meilisearch/sdk/http/URLBuilder.java
index 180f33e6..d7ffc325 100644
--- a/src/main/java/com/meilisearch/sdk/http/URLBuilder.java
+++ b/src/main/java/com/meilisearch/sdk/http/URLBuilder.java
@@ -1,5 +1,8 @@
package com.meilisearch.sdk.http;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
import lombok.Getter;
@Getter
@@ -52,6 +55,27 @@ public URLBuilder addParameter(String parameter, String[] value) {
return this;
}
+ public URLBuilder addParameter(String parameter, int[] value) {
+ if (value != null && value.length > 0) {
+ addSeparator();
+ params.append(parameter);
+ params.append("=");
+ params.append(formatArrayParameters(value));
+ }
+ return this;
+ }
+
+ public URLBuilder addParameter(String parameter, Date value) {
+ if (value != null) {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+ addSeparator();
+ params.append(parameter);
+ params.append("=");
+ params.append(formatter.format(value));
+ }
+ return this;
+ }
+
public URLBuilder addQuery(String query) {
this.params.append(query);
return this;
@@ -70,6 +94,11 @@ private String formatArrayParameters(String[] fields) {
return String.join(",", fields);
}
+ private String formatArrayParameters(int[] fields) {
+ String[] arr = Arrays.stream(fields).mapToObj(String::valueOf).toArray(String[]::new);
+ return String.join(",", arr);
+ }
+
public String getURL() {
return routes.toString() + params.toString();
}
diff --git a/src/main/java/com/meilisearch/sdk/model/CancelTasksQuery.java b/src/main/java/com/meilisearch/sdk/model/CancelTasksQuery.java
new file mode 100644
index 00000000..d78382df
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/CancelTasksQuery.java
@@ -0,0 +1,42 @@
+package com.meilisearch.sdk.model;
+
+import com.meilisearch.sdk.http.URLBuilder;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+/**
+ * Data structure of a query parameter for tasks route
+ *
+ *
https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
+ */
+@Setter
+@Getter
+@Accessors(chain = true)
+public class CancelTasksQuery {
+ private int[] uids;
+ private String[] statuses;
+ private String[] types;
+ private String[] indexUids;
+ private Date beforeEnqueuedAt;
+ private Date afterEnqueuedAt;
+ private Date beforeStartedAt;
+ private Date afterStartedAt;
+
+ public CancelTasksQuery() {}
+
+ public String toQuery() {
+ URLBuilder urlb =
+ new URLBuilder()
+ .addParameter("uids", this.getUids())
+ .addParameter("statuses", this.getStatuses())
+ .addParameter("types", this.getTypes())
+ .addParameter("indexUids", this.getIndexUids())
+ .addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
+ .addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
+ .addParameter("beforeStartedAt", this.getBeforeStartedAt())
+ .addParameter("afterStartedAt", this.getAfterStartedAt());
+ return urlb.getURL();
+ }
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/DeleteTasksQuery.java b/src/main/java/com/meilisearch/sdk/model/DeleteTasksQuery.java
new file mode 100644
index 00000000..607f16b3
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/DeleteTasksQuery.java
@@ -0,0 +1,48 @@
+package com.meilisearch.sdk.model;
+
+import com.meilisearch.sdk.http.URLBuilder;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+/**
+ * Data structure of a query parameter for tasks route
+ *
+ *
https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
+ */
+@Setter
+@Getter
+@Accessors(chain = true)
+public class DeleteTasksQuery {
+ private int[] uids;
+ private String[] statuses;
+ private String[] types;
+ private String[] indexUids;
+ private int[] canceledBy;
+ private Date beforeEnqueuedAt;
+ private Date afterEnqueuedAt;
+ private Date beforeStartedAt;
+ private Date afterStartedAt;
+ private Date beforeFinishedAt;
+ private Date afterFinishedAt;
+
+ public DeleteTasksQuery() {}
+
+ public String toQuery() {
+ URLBuilder urlb =
+ new URLBuilder()
+ .addParameter("uids", this.getUids())
+ .addParameter("statuses", this.getStatuses())
+ .addParameter("types", this.getTypes())
+ .addParameter("indexUids", this.getIndexUids())
+ .addParameter("canceledBy", this.getCanceledBy())
+ .addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
+ .addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
+ .addParameter("beforeStartedAt", this.getBeforeStartedAt())
+ .addParameter("afterStartedAt", this.getAfterStartedAt())
+ .addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
+ .addParameter("afterFinishedAt", this.getAfterFinishedAt());
+ return urlb.getURL();
+ }
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/Faceting.java b/src/main/java/com/meilisearch/sdk/model/Faceting.java
new file mode 100644
index 00000000..2083d59d
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/Faceting.java
@@ -0,0 +1,12 @@
+package com.meilisearch.sdk.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class Faceting {
+ protected int maxValuesPerFacet;
+
+ public Faceting() {}
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/Pagination.java b/src/main/java/com/meilisearch/sdk/model/Pagination.java
new file mode 100644
index 00000000..2dafc456
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/Pagination.java
@@ -0,0 +1,12 @@
+package com.meilisearch.sdk.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class Pagination {
+ protected int maxTotalHits;
+
+ public Pagination() {}
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/SearchResult.java b/src/main/java/com/meilisearch/sdk/model/SearchResult.java
index 2e8c0ced..2bbc3d1a 100644
--- a/src/main/java/com/meilisearch/sdk/model/SearchResult.java
+++ b/src/main/java/com/meilisearch/sdk/model/SearchResult.java
@@ -1,26 +1,25 @@
package com.meilisearch.sdk.model;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import lombok.Getter;
import lombok.ToString;
/**
- * Meilisearch search response data structure
+ * Meilisearch search response data structure for infinite pagination
*
*
https://docs.meilisearch.com/references/search.html
*/
@Getter
@ToString
-public class SearchResult implements Serializable {
- protected ArrayList> hits;
- protected int offset;
- protected int limit;
- protected int estimatedTotalHits;
- protected Object facetDistribution;
- protected int processingTimeMs;
- protected String query;
+public class SearchResult implements Searchable {
+ ArrayList> hits;
+ Object facetDistribution;
+ int processingTimeMs;
+ String query;
+ int offset;
+ int limit;
+ int estimatedTotalHits;
public SearchResult() {}
}
diff --git a/src/main/java/com/meilisearch/sdk/model/SearchResultPaginated.java b/src/main/java/com/meilisearch/sdk/model/SearchResultPaginated.java
new file mode 100644
index 00000000..e492bb9a
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/SearchResultPaginated.java
@@ -0,0 +1,26 @@
+package com.meilisearch.sdk.model;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import lombok.Getter;
+import lombok.ToString;
+
+/**
+ * Meilisearch search response data structure for limited pagination
+ *
+ * https://docs.meilisearch.com/learn/advanced/pagination.html#numbered-page-selectors
+ */
+@Getter
+@ToString
+public class SearchResultPaginated implements Searchable {
+ protected int totalHits;
+ protected int hitsPerPage;
+ protected int page;
+ protected int totalPages;
+ ArrayList> hits;
+ Object facetDistribution;
+ int processingTimeMs;
+ String query;
+
+ public SearchResultPaginated() {}
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/Searchable.java b/src/main/java/com/meilisearch/sdk/model/Searchable.java
new file mode 100644
index 00000000..f11b21ae
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/Searchable.java
@@ -0,0 +1,19 @@
+package com.meilisearch.sdk.model;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Meilisearch search common response data structure
+ *
+ * https://docs.meilisearch.com/references/search.html
+ */
+public interface Searchable {
+ ArrayList> getHits();
+
+ Object getFacetDistribution();
+
+ int getProcessingTimeMs();
+
+ String getQuery();
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/SwapIndexesParams.java b/src/main/java/com/meilisearch/sdk/model/SwapIndexesParams.java
new file mode 100644
index 00000000..53229791
--- /dev/null
+++ b/src/main/java/com/meilisearch/sdk/model/SwapIndexesParams.java
@@ -0,0 +1,15 @@
+package com.meilisearch.sdk.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+/** Swap Indexes Params data structure */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class SwapIndexesParams {
+ protected String[] indexes;
+
+ public SwapIndexesParams() {}
+}
diff --git a/src/main/java/com/meilisearch/sdk/model/TaskDetails.java b/src/main/java/com/meilisearch/sdk/model/TaskDetails.java
index f97b8a1d..65ce7921 100644
--- a/src/main/java/com/meilisearch/sdk/model/TaskDetails.java
+++ b/src/main/java/com/meilisearch/sdk/model/TaskDetails.java
@@ -19,6 +19,15 @@ public class TaskDetails {
protected Map synonyms;
protected String distinctAttribute;
protected TypoTolerance typoTolerance;
+ protected int providedIds;
+ protected Pagination pagination;
+ protected Faceting faceting;
+ protected String dumpUid;
+ protected int matchedTasks;
+ protected int canceledTasks;
+ protected String originalFilter;
+ protected int deletedTasks;
+ protected SwapIndexesParams[] swaps;
public TaskDetails() {}
}
diff --git a/src/main/java/com/meilisearch/sdk/model/TaskInfo.java b/src/main/java/com/meilisearch/sdk/model/TaskInfo.java
index dde50fc6..c8d23141 100644
--- a/src/main/java/com/meilisearch/sdk/model/TaskInfo.java
+++ b/src/main/java/com/meilisearch/sdk/model/TaskInfo.java
@@ -1,6 +1,5 @@
package com.meilisearch.sdk.model;
-import com.meilisearch.sdk.TaskError;
import java.util.Date;
import lombok.Getter;
@@ -15,12 +14,7 @@ public class TaskInfo {
protected int taskUid = 0;
protected String indexUid = "";
protected String type = null;
- protected String duration = "";
protected Date enqueuedAt = null;
- protected Date startedAt = null;
- protected Date finishedAt = null;
- protected TaskError error = null;
- protected TaskDetails details = null;
public TaskInfo() {}
}
diff --git a/src/main/java/com/meilisearch/sdk/model/TasksQuery.java b/src/main/java/com/meilisearch/sdk/model/TasksQuery.java
index 43326615..312656c2 100644
--- a/src/main/java/com/meilisearch/sdk/model/TasksQuery.java
+++ b/src/main/java/com/meilisearch/sdk/model/TasksQuery.java
@@ -1,6 +1,7 @@
package com.meilisearch.sdk.model;
import com.meilisearch.sdk.http.URLBuilder;
+import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@@ -14,11 +15,19 @@
@Getter
@Accessors(chain = true)
public class TasksQuery {
+ private int[] uids;
private int limit = -1;
private int from = -1;
- private String[] status;
- private String[] type;
- private String[] indexUid;
+ private String[] statuses;
+ private String[] types;
+ private String[] indexUids;
+ private int[] canceledBy;
+ private Date beforeEnqueuedAt;
+ private Date afterEnqueuedAt;
+ private Date beforeStartedAt;
+ private Date afterStartedAt;
+ private Date beforeFinishedAt;
+ private Date afterFinishedAt;
public TasksQuery() {}
@@ -27,9 +36,17 @@ public String toQuery() {
new URLBuilder()
.addParameter("limit", this.getLimit())
.addParameter("from", this.getFrom())
- .addParameter("status", this.getStatus())
- .addParameter("type", this.getType())
- .addParameter("indexUid", this.getIndexUid());
+ .addParameter("uids", this.getUids())
+ .addParameter("statuses", this.getStatuses())
+ .addParameter("types", this.getTypes())
+ .addParameter("indexUids", this.getIndexUids())
+ .addParameter("canceledBy", this.getCanceledBy())
+ .addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
+ .addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
+ .addParameter("beforeStartedAt", this.getBeforeStartedAt())
+ .addParameter("afterStartedAt", this.getAfterStartedAt())
+ .addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
+ .addParameter("afterFinishedAt", this.getAfterFinishedAt());
return urlb.getURL();
}
}
diff --git a/src/test/java/com/meilisearch/integration/ClientTest.java b/src/test/java/com/meilisearch/integration/ClientTest.java
index d867f152..8a2cf4d1 100644
--- a/src/test/java/com/meilisearch/integration/ClientTest.java
+++ b/src/test/java/com/meilisearch/integration/ClientTest.java
@@ -11,6 +11,7 @@
import com.meilisearch.sdk.exceptions.MeilisearchApiException;
import com.meilisearch.sdk.model.IndexesQuery;
import com.meilisearch.sdk.model.Results;
+import com.meilisearch.sdk.model.SwapIndexesParams;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.utils.Movie;
@@ -220,6 +221,39 @@ public void testDeleteIndex() throws Exception {
assertThrows(MeilisearchApiException.class, () -> client.getIndex(indexUid));
}
+ /** Test swapIndexes */
+ @Test
+ public void testSwapIndexes() throws Exception {
+ String indexUidA = "IndexA";
+ String indexUidB = "IndexB";
+ Index indexA = createEmptyIndex(indexUidA);
+ Index indexB = createEmptyIndex(indexUidB);
+ TaskInfo taskAddDocumentIndexA =
+ indexA.addDocuments(
+ "[{"
+ + "\"id\": 1,"
+ + "\"title\": \"Document1\""
+ + "},"
+ + "{"
+ + "\"id\": 2,"
+ + "\"title\": \"Document2\""
+ + "}]");
+ indexA.waitForTask(taskAddDocumentIndexA.getTaskUid());
+
+ SwapIndexesParams[] params =
+ new SwapIndexesParams[] {
+ new SwapIndexesParams().setIndexes(new String[] {indexUidA, indexUidB})
+ };
+ TaskInfo task = client.swapIndexes(params);
+ client.waitForTask(task.getTaskUid());
+
+ assertEquals("indexSwap", task.getType());
+ assertEquals("Document1", indexB.getDocument("1", Movie.class).getTitle());
+ assertEquals("Document2", indexB.getDocument("2", Movie.class).getTitle());
+ assertThrows(MeilisearchApiException.class, () -> indexA.getDocument("1", Movie.class));
+ assertThrows(MeilisearchApiException.class, () -> indexA.getDocument("2", Movie.class));
+ }
+
/** Test call to index method with an inexistent index */
@Test
public void testIndexMethodCallInexistentIndex() throws Exception {
diff --git a/src/test/java/com/meilisearch/integration/SearchTest.java b/src/test/java/com/meilisearch/integration/SearchTest.java
index 819eec77..d2eead4c 100644
--- a/src/test/java/com/meilisearch/integration/SearchTest.java
+++ b/src/test/java/com/meilisearch/integration/SearchTest.java
@@ -11,6 +11,8 @@
import com.meilisearch.sdk.json.GsonJsonHandler;
import com.meilisearch.sdk.model.MatchingStrategy;
import com.meilisearch.sdk.model.SearchResult;
+import com.meilisearch.sdk.model.SearchResultPaginated;
+import com.meilisearch.sdk.model.Searchable;
import com.meilisearch.sdk.model.Settings;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.utils.Movie;
@@ -78,7 +80,7 @@ public void testSearchOffset() throws Exception {
index.waitForTask(task.getTaskUid());
SearchRequest searchRequest = SearchRequest.builder().q("a").offset(20).build();
- SearchResult searchResult = index.search(searchRequest);
+ SearchResult searchResult = (SearchResult) index.search(searchRequest);
assertEquals(10, searchResult.getHits().size());
assertEquals(30, searchResult.getEstimatedTotalHits());
@@ -96,7 +98,7 @@ public void testSearchLimit() throws Exception {
index.waitForTask(task.getTaskUid());
SearchRequest searchRequest = SearchRequest.builder().q("a").limit(2).build();
- SearchResult searchResult = index.search(searchRequest);
+ SearchResult searchResult = (SearchResult) index.search(searchRequest);
assertEquals(2, searchResult.getHits().size());
assertEquals(30, searchResult.getEstimatedTotalHits());
@@ -246,7 +248,7 @@ public void testSearchWithMatchingStrategy() throws Exception {
SearchRequest searchRequest =
SearchRequest.builder().q("and").matchingStrategy(MatchingStrategy.ALL).build();
- SearchResult searchResult = index.search(searchRequest);
+ SearchResult searchResult = (SearchResult) index.search(searchRequest);
assertEquals(20, searchResult.getHits().size());
assertEquals(21, searchResult.getEstimatedTotalHits());
@@ -344,7 +346,7 @@ public void testSearchFacetsDistribution() throws Exception {
SearchRequest searchRequest = new SearchRequest("knight").setFacets(new String[] {"*"});
- SearchResult searchResult = index.search(searchRequest);
+ Searchable searchResult = index.search(searchRequest);
assertEquals(1, searchResult.getHits().size());
assertNotNull(searchResult.getFacetDistribution());
@@ -484,11 +486,53 @@ public void testSearchMatches() throws Exception {
index.waitForTask(task.getTaskUid());
SearchRequest searchRequest = new SearchRequest("and").setShowMatchesPosition(true);
- SearchResult searchResult = index.search(searchRequest);
+ Searchable searchResult = index.search(searchRequest);
assertEquals(20, searchResult.getHits().size());
}
+ /** Test search page */
+ @Test
+ public void testSearchPage() throws Exception {
+ String indexUid = "SearchOffset";
+ Index index = client.index(indexUid);
+
+ TestData testData = this.getTestData(MOVIES_INDEX, Movie.class);
+ TaskInfo task = index.addDocuments(testData.getRaw());
+
+ index.waitForTask(task.getTaskUid());
+
+ SearchRequest searchRequest = SearchRequest.builder().q("a").page(1).build();
+ SearchResultPaginated searchResult = (SearchResultPaginated) index.search(searchRequest);
+
+ assertEquals(20, searchResult.getHits().size());
+ assertEquals(1, searchResult.getPage());
+ assertEquals(20, searchResult.getHitsPerPage());
+ assertEquals(30, searchResult.getTotalHits());
+ assertEquals(2, searchResult.getTotalPages());
+ }
+
+ /** Test search pagination */
+ @Test
+ public void testSearchPagination() throws Exception {
+ String indexUid = "SearchOffset";
+ Index index = client.index(indexUid);
+
+ TestData testData = this.getTestData(MOVIES_INDEX, Movie.class);
+ TaskInfo task = index.addDocuments(testData.getRaw());
+
+ index.waitForTask(task.getTaskUid());
+
+ SearchRequest searchRequest = SearchRequest.builder().q("a").page(2).hitsPerPage(2).build();
+ SearchResultPaginated searchResult = (SearchResultPaginated) index.search(searchRequest);
+
+ assertEquals(2, searchResult.getHits().size());
+ assertEquals(2, searchResult.getPage());
+ assertEquals(2, searchResult.getHitsPerPage());
+ assertEquals(30, searchResult.getTotalHits());
+ assertEquals(15, searchResult.getTotalPages());
+ }
+
/** Test place holder search */
@Test
public void testPlaceHolder() throws Exception {
@@ -499,7 +543,7 @@ public void testPlaceHolder() throws Exception {
TaskInfo task = index.addDocuments(testData.getRaw());
index.waitForTask(task.getTaskUid());
- SearchResult result = index.search("");
+ SearchResult result = (SearchResult) index.search("");
assertEquals(20, result.getLimit());
}
@@ -514,7 +558,7 @@ public void testPlaceHolderWithLimit() throws Exception {
TaskInfo task = index.addDocuments(testData.getRaw());
index.waitForTask(task.getTaskUid());
- SearchResult searchResult = index.search(new SearchRequest(null).setLimit(10));
+ Searchable searchResult = index.search(new SearchRequest(null).setLimit(10));
assertEquals(10, searchResult.getHits().size());
}
diff --git a/src/test/java/com/meilisearch/integration/TasksTest.java b/src/test/java/com/meilisearch/integration/TasksTest.java
index 829a14f8..1b60017c 100644
--- a/src/test/java/com/meilisearch/integration/TasksTest.java
+++ b/src/test/java/com/meilisearch/integration/TasksTest.java
@@ -5,11 +5,14 @@
import com.meilisearch.integration.classes.AbstractIT;
import com.meilisearch.integration.classes.TestData;
import com.meilisearch.sdk.Index;
+import com.meilisearch.sdk.model.CancelTasksQuery;
+import com.meilisearch.sdk.model.DeleteTasksQuery;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TasksQuery;
import com.meilisearch.sdk.model.TasksResults;
import com.meilisearch.sdk.utils.Movie;
+import java.util.Date;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
@@ -98,6 +101,43 @@ public void testClientGetTasksLimitAndFrom() throws Exception {
assertNotNull(result.getResults().length);
}
+ /** Test Get Tasks with uid as filter */
+ @Test
+ public void testClientGetTasksWithUidFilter() throws Exception {
+ TasksQuery query = new TasksQuery().setUids(new int[] {1});
+ TasksResults result = client.getTasks(query);
+
+ assertNotNull(result.getLimit());
+ assertNotNull(result.getFrom());
+ assertNotNull(result.getNext());
+ assertNotNull(result.getResults().length);
+ }
+
+ /** Test Get Tasks with beforeEnqueuedAt as filter */
+ @Test
+ public void testClientGetTasksWithDateFilter() throws Exception {
+ Date date = new Date();
+ TasksQuery query = new TasksQuery().setBeforeEnqueuedAt(date);
+ TasksResults result = client.getTasks(query);
+
+ assertNotNull(result.getLimit());
+ assertNotNull(result.getFrom());
+ assertNotNull(result.getNext());
+ assertNotNull(result.getResults().length);
+ }
+
+ /** Test Get Tasks with canceledBy as filter */
+ @Test
+ public void testClientGetTasksWithCanceledByFilter() throws Exception {
+ TasksQuery query = new TasksQuery().setCanceledBy(new int[] {1});
+ TasksResults result = client.getTasks(query);
+
+ assertNotNull(result.getLimit());
+ assertNotNull(result.getFrom());
+ assertNotNull(result.getNext());
+ assertNotNull(result.getResults().length);
+ }
+
/** Test Get Tasks with all query parameters */
@Test
public void testClientGetTasksAllQueryParameters() throws Exception {
@@ -107,14 +147,86 @@ public void testClientGetTasksAllQueryParameters() throws Exception {
new TasksQuery()
.setLimit(limit)
.setFrom(from)
- .setStatus(new String[] {"enqueued", "succeeded"})
- .setType(new String[] {"indexDeletion"});
+ .setStatuses(new String[] {"enqueued", "succeeded"})
+ .setTypes(new String[] {"indexDeletion"});
TasksResults result = client.getTasks(query);
- Task[] tasks = result.getResults();
assertEquals(limit, result.getLimit());
assertNotNull(result.getFrom());
assertNotNull(result.getNext());
+ assertNotNull(result.getResults().length);
+ }
+
+ /** Test Cancel Task */
+ @Test
+ public void testClientCancelTask() throws Exception {
+ CancelTasksQuery query =
+ new CancelTasksQuery().setStatuses(new String[] {"enqueued", "succeeded"});
+
+ TaskInfo task = client.cancelTasks(query);
+
+ assertTrue(task instanceof TaskInfo);
+ assertNotNull(task.getStatus());
+ assertNotEquals("", task.getStatus());
+ assertNull(task.getIndexUid());
+ assertEquals("taskCancelation", task.getType());
+ }
+
+ /** Test Cancel Task with multiple filters */
+ @Test
+ public void testClientCancelTaskWithMultipleFilters() throws Exception {
+ Date date = new Date();
+ CancelTasksQuery query =
+ new CancelTasksQuery()
+ .setUids(new int[] {0, 1, 2})
+ .setStatuses(new String[] {"enqueued", "succeeded"})
+ .setTypes(new String[] {"indexDeletion"})
+ .setIndexUids(new String[] {"index"})
+ .setBeforeEnqueuedAt(date);
+
+ TaskInfo task = client.cancelTasks(query);
+
+ assertTrue(task instanceof TaskInfo);
+ assertNotNull(task.getStatus());
+ assertNotEquals("", task.getStatus());
+ assertNull(task.getIndexUid());
+ assertEquals("taskCancelation", task.getType());
+ }
+
+ /** Test Delete Task */
+ @Test
+ public void testClientDeleteTask() throws Exception {
+ DeleteTasksQuery query =
+ new DeleteTasksQuery().setStatuses(new String[] {"enqueued", "succeeded"});
+
+ TaskInfo task = client.deleteTasks(query);
+
+ assertTrue(task instanceof TaskInfo);
+ assertNotNull(task.getStatus());
+ assertNotEquals("", task.getStatus());
+ assertNull(task.getIndexUid());
+ assertEquals("taskDeletion", task.getType());
+ }
+
+ /** Test Delete Task with multiple filters */
+ @Test
+ public void testClientDeleteTaskWithMultipleFilters() throws Exception {
+ Date date = new Date();
+ DeleteTasksQuery query =
+ new DeleteTasksQuery()
+ .setUids(new int[] {0, 1, 2})
+ .setStatuses(new String[] {"enqueued", "succeeded"})
+ .setTypes(new String[] {"indexDeletion"})
+ .setIndexUids(new String[] {"index"})
+ .setBeforeEnqueuedAt(date);
+
+ TaskInfo task = client.deleteTasks(query);
+
+ assertTrue(task instanceof TaskInfo);
+ assertNotNull(task.getStatus());
+ assertNotEquals("", task.getStatus());
+ assertNull(task.getIndexUid());
+ assertEquals("taskDeletion", task.getType());
}
/** Test waitForTask */
diff --git a/src/test/java/com/meilisearch/sdk/SearchRequestTest.java b/src/test/java/com/meilisearch/sdk/SearchRequestTest.java
index 0ed4c330..cb2b63d8 100644
--- a/src/test/java/com/meilisearch/sdk/SearchRequestTest.java
+++ b/src/test/java/com/meilisearch/sdk/SearchRequestTest.java
@@ -85,10 +85,17 @@ void toStringQueryLimitOffsetAndAttributesToRetrieveWithBuilder() {
@Test
void toStringQueryLimitOffsetAndPageAndHitPerPage() {
SearchRequest classToTest =
- SearchRequest.builder().q("This is a Test").limit(20).offset(0).build();
+ SearchRequest.builder()
+ .q("This is a Test")
+ .limit(20)
+ .offset(0)
+ .page(10)
+ .hitsPerPage(2)
+ .build();
assertEquals(
- "{\"q\":\"This is a Test\",\"offset\":0,\"limit\":20}", classToTest.toString());
+ "{\"q\":\"This is a Test\",\"offset\":0,\"hitsPerPage\":2,\"limit\":20,\"page\":10}",
+ classToTest.toString());
}
@Test
@@ -103,7 +110,9 @@ void toStringEveryParameters() {
.setCropLength(900)
.setFilter(new String[] {"test='test'"})
.setFacets(new String[] {"facets"})
- .setSort(new String[] {"sort"});
+ .setSort(new String[] {"sort"})
+ .setPage(10)
+ .setHitsPerPage(2);
assertEquals("This is a Test", classToTest.getQ());
assertEquals(200, classToTest.getOffset());
@@ -120,6 +129,8 @@ void toStringEveryParameters() {
assertEquals("facets", classToTest.getFacets()[0]);
assertEquals("sort", classToTest.getSort()[0]);
assertEquals(900, classToTest.getCropLength());
+ assertEquals(10, classToTest.getPage());
+ assertEquals(2, classToTest.getHitsPerPage());
}
@Test
@@ -136,6 +147,8 @@ void toStringEveryParametersWithBuilder() {
.filter(new String[] {"test='test'"})
.facets(new String[] {"facets"})
.sort(new String[] {"sort"})
+ .page(10)
+ .hitsPerPage(2)
.build();
assertEquals("This is a Test", classToTest.getQ());
@@ -153,6 +166,8 @@ void toStringEveryParametersWithBuilder() {
assertEquals("facets", classToTest.getFacets()[0]);
assertEquals("sort", classToTest.getSort()[0]);
assertEquals(900, classToTest.getCropLength());
+ assertEquals(10, classToTest.getPage());
+ assertEquals(2, classToTest.getHitsPerPage());
}
@Test
@@ -175,7 +190,9 @@ void toStringEveryParametersWithArray() {
})
.setShowMatchesPosition(true)
.setFacets(new String[] {"facets"})
- .setSort(new String[] {"sort"});
+ .setSort(new String[] {"sort"})
+ .setPage(0)
+ .setHitsPerPage(0);
assertEquals("This is a Test", classToTest.getQ());
assertEquals(200, classToTest.getOffset());
@@ -194,8 +211,10 @@ void toStringEveryParametersWithArray() {
assertEquals("facets", classToTest.getFacets()[0]);
assertEquals("sort", classToTest.getSort()[0]);
assertEquals(900, classToTest.getCropLength());
+ assertEquals(0, classToTest.getPage());
+ assertEquals(0, classToTest.getHitsPerPage());
assertEquals(
- "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"matchingStrategy\":\"all\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"attributesToCrop\":[\"crop\"]}",
+ "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"hitsPerPage\":0,\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"matchingStrategy\":\"all\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"page\":0,\"attributesToCrop\":[\"crop\"]}",
classToTest.toString());
}
@@ -221,6 +240,8 @@ void toStringEveryParametersWithArrayWithBuilder() {
.showMatchesPosition(true)
.facets(new String[] {"facets"})
.sort(new String[] {"sort"})
+ .page(0)
+ .hitsPerPage(0)
.build();
assertEquals("This is a Test", classToTest.getQ());
@@ -240,8 +261,10 @@ void toStringEveryParametersWithArrayWithBuilder() {
assertEquals("facets", classToTest.getFacets()[0]);
assertEquals("sort", classToTest.getSort()[0]);
assertEquals(900, classToTest.getCropLength());
+ assertEquals(0, classToTest.getPage());
+ assertEquals(0, classToTest.getHitsPerPage());
assertEquals(
- "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"matchingStrategy\":\"all\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"attributesToCrop\":[\"crop\"]}",
+ "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"hitsPerPage\":0,\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"matchingStrategy\":\"all\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"page\":0,\"attributesToCrop\":[\"crop\"]}",
classToTest.toString());
}
@@ -267,6 +290,8 @@ void toStringEveryParametersWithArrayMatchingStrategyNull() {
.showMatchesPosition(true)
.facets(new String[] {"facets"})
.sort(new String[] {"sort"})
+ .page(0)
+ .hitsPerPage(0)
.build();
assertEquals("This is a Test", classToTest.getQ());
@@ -287,7 +312,7 @@ void toStringEveryParametersWithArrayMatchingStrategyNull() {
assertEquals("sort", classToTest.getSort()[0]);
assertEquals(900, classToTest.getCropLength());
assertEquals(
- "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"attributesToCrop\":[\"crop\"]}",
+ "{\"attributesToRetrieve\":[\"bubble\"],\"offset\":200,\"cropMarker\":\"123\",\"hitsPerPage\":0,\"sort\":[\"sort\"],\"highlightPreTag\":\"abc\",\"facets\":[\"facets\"],\"filter\":[[\"test='test'\"],[\"test1='test1'\"]],\"q\":\"This is a Test\",\"showMatchesPosition\":true,\"limit\":900,\"cropLength\":900,\"highlightPostTag\":\"zyx\",\"attributesToHighlight\":[\"highlight\"],\"page\":0,\"attributesToCrop\":[\"crop\"]}",
classToTest.toString());
}
}
diff --git a/src/test/java/com/meilisearch/sdk/TaskHandlerUtilsTest.java b/src/test/java/com/meilisearch/sdk/TaskHandlerUtilsTest.java
new file mode 100644
index 00000000..800619d5
--- /dev/null
+++ b/src/test/java/com/meilisearch/sdk/TaskHandlerUtilsTest.java
@@ -0,0 +1,56 @@
+package com.meilisearch.sdk;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import com.meilisearch.sdk.model.TasksQuery;
+import org.junit.jupiter.api.Test;
+
+class TasksHandlerUtilsTest {
+
+ @Test
+ void addIndexUidToQueryWithParamNull() {
+ final Config config = new Config("http://localhost:7700", "masterKey");
+ TasksHandler classToTest = new TasksHandler(config);
+ TasksQuery param = null;
+ TasksQuery query = classToTest.addIndexUidToQuery("indexName", param);
+
+ assertEquals("?indexUids=indexName", query.toQuery().toString());
+ }
+
+ @Test
+ void addIndexUidToQueryWithParam() {
+ final Config config = new Config("http://localhost:7700", "masterKey");
+ TasksHandler classToTest = new TasksHandler(config);
+ TasksQuery param = new TasksQuery().setIndexUids(new String[] {});
+ TasksQuery query = classToTest.addIndexUidToQuery("indexName", param);
+
+ assertEquals("?indexUids=indexName", query.toQuery().toString());
+ }
+
+ @Test
+ void addIndexUidToQueryWithOneIndexUid() {
+ final Config config = new Config("http://localhost:7700", "masterKey");
+ TasksHandler classToTest = new TasksHandler(config);
+ TasksQuery param = new TasksQuery().setIndexUids(new String[] {"indexName2"});
+ TasksQuery query = classToTest.addIndexUidToQuery("indexName1", param);
+
+ assertEquals("?indexUids=indexName2,indexName1", query.toQuery().toString());
+ }
+
+ @Test
+ void addIndexUidToQueryWithMultipleIndexUids() {
+ final Config config = new Config("http://localhost:7700", "masterKey");
+ TasksHandler classToTest = new TasksHandler(config);
+ TasksQuery param =
+ new TasksQuery()
+ .setIndexUids(
+ new String[] {
+ "indexName2", "indexName3", "indexName4", "indexName5"
+ });
+ TasksQuery query = classToTest.addIndexUidToQuery("indexName1", param);
+
+ assertEquals(
+ "?indexUids=indexName2,indexName3,indexName4,indexName5,indexName1",
+ query.toQuery().toString());
+ }
+}
diff --git a/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java b/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java
index 7d352c68..e972672f 100644
--- a/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java
+++ b/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java
@@ -2,6 +2,9 @@
import static org.junit.jupiter.api.Assertions.*;
+import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
import org.junit.jupiter.api.Test;
public class URLBuilderTest {
@@ -51,7 +54,7 @@ void addParameterStringString() {
}
@Test
- void addParameterStringArray() {
+ void addParameterStringStringArray() {
classToTest.addParameter("parameter1", new String[] {"1", "a"});
assertEquals("?parameter1=1,a", classToTest.getParams().toString());
@@ -64,6 +67,45 @@ void addParameterStringArray() {
classToTest.getParams().toString());
}
+ @Test
+ void addParameterStringIntArray() {
+ classToTest.addParameter("parameter1", new int[] {1, 2});
+ assertEquals("?parameter1=1,2", classToTest.getParams().toString());
+
+ classToTest.addParameter("parameter2", new int[] {3, 4});
+ assertEquals("?parameter1=1,2¶meter2=3,4", classToTest.getParams().toString());
+
+ classToTest.addParameter("parameter3", new int[] {5, 6});
+ assertEquals(
+ "?parameter1=1,2¶meter2=3,4¶meter3=5,6",
+ classToTest.getParams().toString());
+ }
+
+ @Test
+ void addParameterStringDate() throws Exception {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = format.parse("2042-01-30");
+
+ classToTest.addParameter("parameter1", date);
+ String parameterDate1 =
+ classToTest
+ .getParams()
+ .toString()
+ .substring(12, classToTest.getParams().toString().length());
+ assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate1));
+ assertEquals("?parameter1=2042-01-30", classToTest.getParams().toString());
+
+ classToTest.addParameter("parameter2", date);
+ String parameterDate2 =
+ classToTest
+ .getParams()
+ .toString()
+ .substring(34, classToTest.getParams().toString().length());
+ assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate2));
+ assertEquals(
+ "?parameter1=2042-01-30¶meter2=2042-01-30", classToTest.getParams().toString());
+ }
+
@Test
void getURL() {
assertEquals("", classToTest.getURL());