Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions src/main/java/com/meilisearch/sdk/TasksHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,7 @@ 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);
Expand Down Expand Up @@ -173,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;
}
}
29 changes: 29 additions & 0 deletions src/main/java/com/meilisearch/sdk/http/URLBuilder.java
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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();
}
Expand Down
29 changes: 23 additions & 6 deletions src/main/java/com/meilisearch/sdk/model/TasksQuery.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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() {}

Expand All @@ -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();
}
}
44 changes: 41 additions & 3 deletions src/test/java/com/meilisearch/integration/TasksTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand Down Expand Up @@ -100,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 {
Expand All @@ -109,14 +147,14 @@ 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"})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can create an issue to make this a enum :)

.setTypes(new String[] {"indexDeletion"});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The types can also be an enum!

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 */
Expand Down
56 changes: 56 additions & 0 deletions src/test/java/com/meilisearch/sdk/TaskHandlerUtilsTest.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
42 changes: 41 additions & 1 deletion src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import static org.junit.jupiter.api.Assertions.*;

import java.time.format.DateTimeFormatter;
import java.util.Date;
import org.junit.jupiter.api.Test;

public class URLBuilderTest {
Expand Down Expand Up @@ -51,7 +53,7 @@ void addParameterStringString() {
}

@Test
void addParameterStringArray() {
void addParameterStringStringArray() {
classToTest.addParameter("parameter1", new String[] {"1", "a"});
assertEquals("?parameter1=1,a", classToTest.getParams().toString());

Expand All @@ -64,6 +66,44 @@ 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&parameter2=3,4", classToTest.getParams().toString());

classToTest.addParameter("parameter3", new int[] {5, 6});
assertEquals(
"?parameter1=1,2&parameter2=3,4&parameter3=5,6",
classToTest.getParams().toString());
}

@Test
void addParameterStringDate() {
Date date = new Date();

classToTest.addParameter("parameter1", date);
String parameterDate1 =
classToTest
.getParams()
.toString()
.substring(12, classToTest.getParams().toString().length());
assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate1));
assertTrue(classToTest.getParams().toString().contains("?parameter1="));

classToTest.addParameter("parameter2", date);
String parameterDate2 =
classToTest
.getParams()
.toString()
.substring(34, classToTest.getParams().toString().length());
assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate2));
assertTrue(classToTest.getParams().toString().contains("?parameter1="));
assertTrue(classToTest.getParams().toString().contains("&parameter2="));
}

@Test
void getURL() {
assertEquals("", classToTest.getURL());
Expand Down