Skip to content

Commit a36a130

Browse files
meili-bors[bot]ma1581Strift
authored
Merge #816
816: Add Reverse ordering support for Task API r=brunoocasali a=ma1581 # Pull Request ## Related issue Fixes #798 ## What does this PR do? - Accepts 'reverse' field to provider ordering flexibility ## PR checklist Please check if your PR fulfills the following requirements: - [ Y ] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [ Y ] Have you read the contributing guidelines? - [ Y ] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: MA <[email protected]> Co-authored-by: Laurent Cazanove <[email protected]> Co-authored-by: Mohammed Anas <[email protected]>
2 parents 6fc2b51 + d589fd7 commit a36a130

File tree

4 files changed

+72
-22
lines changed

4 files changed

+72
-22
lines changed

src/main/java/com/meilisearch/sdk/http/URLBuilder.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public URLBuilder addParameter(String parameter, int[] value) {
6767

6868
public URLBuilder addParameter(String parameter, Date value) {
6969
if (value != null) {
70-
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
70+
// Changed to utilise RFC 3339 format
71+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
7172
addSeparator();
7273
params.append(parameter);
7374
params.append("=");
@@ -76,6 +77,23 @@ public URLBuilder addParameter(String parameter, Date value) {
7677
return this;
7778
}
7879

80+
/**
81+
* To add a boolean parameter to url
82+
*
83+
* @param parameter - parameter name
84+
* @param value - value of the parameter
85+
* @return - updated url object
86+
*/
87+
public URLBuilder addParameter(String parameter, Boolean value) {
88+
if (value != null) {
89+
addSeparator();
90+
params.append(parameter);
91+
params.append("=");
92+
params.append(value);
93+
}
94+
return this;
95+
}
96+
7997
public URLBuilder addQuery(String query) {
8098
this.params.append(query);
8199
return this;

src/main/java/com/meilisearch/sdk/model/TasksQuery.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class TasksQuery {
2323
private String[] types;
2424
private String[] indexUids;
2525
private int[] canceledBy;
26+
private Boolean reverse;
2627
private Date beforeEnqueuedAt;
2728
private Date afterEnqueuedAt;
2829
private Date beforeStartedAt;
@@ -47,7 +48,8 @@ public String toQuery() {
4748
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
4849
.addParameter("afterStartedAt", this.getAfterStartedAt())
4950
.addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
50-
.addParameter("afterFinishedAt", this.getAfterFinishedAt());
51+
.addParameter("afterFinishedAt", this.getAfterFinishedAt())
52+
.addParameter("reverse", this.getReverse());
5153
return urlb.getURL();
5254
}
5355
}

src/test/java/com/meilisearch/integration/TasksTest.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@
99
import static org.hamcrest.Matchers.not;
1010
import static org.hamcrest.Matchers.notNullValue;
1111
import static org.hamcrest.Matchers.nullValue;
12-
import static org.junit.jupiter.api.Assertions.assertThrows;
12+
import static org.junit.jupiter.api.Assertions.*;
1313

1414
import com.meilisearch.integration.classes.AbstractIT;
1515
import com.meilisearch.integration.classes.TestData;
1616
import com.meilisearch.sdk.Index;
1717
import com.meilisearch.sdk.model.*;
1818
import com.meilisearch.sdk.utils.Movie;
19-
import java.util.Date;
19+
import java.time.Instant;
20+
import java.util.*;
21+
import java.util.stream.Collectors;
2022
import org.junit.jupiter.api.AfterAll;
2123
import org.junit.jupiter.api.BeforeEach;
2224
import org.junit.jupiter.api.Tag;
@@ -32,6 +34,7 @@ public void initialize() {
3234
this.setUp();
3335
this.setUpJacksonClient();
3436
if (testData == null) testData = this.getTestData(MOVIES_INDEX, Movie.class);
37+
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
3538
}
3639

3740
@AfterAll
@@ -203,6 +206,35 @@ public void testClientGetTasksAllQueryParameters() throws Exception {
203206
assertThat(result.getResults().length, is(notNullValue()));
204207
}
205208

209+
@Test
210+
public void testGetTasksInReverse() {
211+
String indexUid = "tasksOnReverseOrder";
212+
Date currentTime = Date.from(Instant.now());
213+
TestData<Movie> testData = this.getTestData(MOVIES_INDEX, Movie.class);
214+
TasksQuery query = new TasksQuery().setAfterEnqueuedAt(currentTime);
215+
TasksQuery queryWithReverseFlag =
216+
new TasksQuery().setAfterEnqueuedAt(currentTime).setReverse(true);
217+
218+
client.index(indexUid).addDocuments(testData.getRaw());
219+
client.waitForTask(client.index(indexUid).addDocuments(testData.getRaw()).getTaskUid());
220+
List<Integer> tasks =
221+
Arrays.stream(client.getTasks(query).getResults())
222+
.map(Task::getUid)
223+
.collect(Collectors.toList());
224+
List<Integer> reversedTasks =
225+
Arrays.stream(client.getTasks(queryWithReverseFlag).getResults())
226+
.map(Task::getUid)
227+
.collect(Collectors.toList());
228+
229+
assertFalse(tasks.isEmpty());
230+
assertIterableEquals(
231+
tasks,
232+
reversedTasks.stream()
233+
.sorted(Collections.reverseOrder())
234+
.collect(Collectors.toList()),
235+
"The lists are not reversed versions of each other");
236+
}
237+
206238
/** Test Cancel Task */
207239
@Test
208240
public void testClientCancelTask() throws Exception {

src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@
66
import static org.junit.jupiter.api.Assertions.*;
77

88
import java.text.SimpleDateFormat;
9-
import java.time.format.DateTimeFormatter;
109
import java.util.Date;
10+
import java.util.TimeZone;
11+
import org.junit.jupiter.api.BeforeEach;
1112
import org.junit.jupiter.api.Test;
1213

1314
public class URLBuilderTest {
1415

1516
private final URLBuilder classToTest = new URLBuilder();
1617

18+
@BeforeEach
19+
void beforeEach() {
20+
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
21+
}
22+
1723
@Test
1824
void addSubroute() {
1925
classToTest.addSubroute("route");
@@ -92,28 +98,20 @@ void addParameterStringIntArray() {
9298

9399
@Test
94100
void addParameterStringDate() throws Exception {
95-
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
96-
Date date = format.parse("2042-01-30");
101+
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
102+
Date date = format.parse("2042-01-30T10:30:00-05:00");
97103

98104
classToTest.addParameter("parameter1", date);
99-
String parameterDate1 =
100-
classToTest
101-
.getParams()
102-
.toString()
103-
.substring(12, classToTest.getParams().toString().length());
104-
assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate1));
105-
assertThat(classToTest.getParams().toString(), is(equalTo("?parameter1=2042-01-30")));
105+
String parameterDate1 = classToTest.getParams().substring(12);
106+
assertDoesNotThrow(() -> format.parse(parameterDate1));
107+
assertEquals(classToTest.getParams().toString(), "?parameter1=2042-01-30T15:30:00Z");
106108

107109
classToTest.addParameter("parameter2", date);
108-
String parameterDate2 =
109-
classToTest
110-
.getParams()
111-
.toString()
112-
.substring(34, classToTest.getParams().toString().length());
113-
assertDoesNotThrow(() -> DateTimeFormatter.ISO_DATE.parse(parameterDate2));
114-
assertThat(
110+
String parameterDate2 = classToTest.getParams().substring(44);
111+
assertDoesNotThrow(() -> format.parse(parameterDate2));
112+
assertEquals(
115113
classToTest.getParams().toString(),
116-
is(equalTo("?parameter1=2042-01-30&parameter2=2042-01-30")));
114+
"?parameter1=2042-01-30T15:30:00Z&parameter2=2042-01-30T15:30:00Z");
117115
}
118116

119117
@Test

0 commit comments

Comments
 (0)