Skip to content

Commit 00b0d89

Browse files
authored
Merge pull request #453 from weaviate/test/batch-reply
test: add unit test for batch reply unmarshalling
2 parents 606c518 + b35cd87 commit 00b0d89

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@
239239
<artifactId>maven-surefire-plugin</artifactId>
240240
<version>2.22.2</version>
241241
<configuration>
242+
<trimStackTrace>false</trimStackTrace>
242243
<argLine>
243244
<!--
244245
Gson (used for JSON serialization) utilizes reflection and needs to be able to access private fields of
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package io.weaviate.client.v1.batch.api;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
8+
import org.apache.http.HttpStatus;
9+
import org.assertj.core.api.Assertions;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
13+
import com.jparams.junit4.JParamsTestRunner;
14+
import com.jparams.junit4.data.DataMethod;
15+
16+
import io.weaviate.client.base.Result;
17+
import io.weaviate.client.base.WeaviateError;
18+
import io.weaviate.client.base.WeaviateErrorMessage;
19+
import io.weaviate.client.grpc.protocol.v1.WeaviateProtoBatch;
20+
import io.weaviate.client.v1.batch.model.ObjectGetResponse;
21+
import io.weaviate.client.v1.data.model.WeaviateObject;
22+
23+
@RunWith(JParamsTestRunner.class)
24+
public class ObjectsBatcherTest {
25+
public static Object[][] batchReplyTestCases() {
26+
return new Object[][] {
27+
{ 1, 2 },
28+
{ 0, 3 },
29+
{ 3, 0 },
30+
{ 2, 2 },
31+
};
32+
}
33+
34+
@DataMethod(source = ObjectsBatcherTest.class, method = "batchReplyTestCases")
35+
@Test
36+
public void test_resultFromBatchObjectsReply(int wantSucceed, int wantFail) {
37+
// Arrange
38+
List<WeaviateObject> batch = new ArrayList<>();
39+
int total = wantSucceed + wantFail;
40+
for (int i = 0; i < total; i++) {
41+
batch.add(WeaviateObject.builder().id("id-" + i).build());
42+
}
43+
44+
WeaviateProtoBatch.BatchObjectsReply.Builder reply = WeaviateProtoBatch.BatchObjectsReply.newBuilder();
45+
for (int i = 0; i < wantFail; i++) {
46+
reply.addErrors(WeaviateProtoBatch.BatchObjectsReply.BatchError.newBuilder()
47+
.setIndex(i).setError("error-" + i)
48+
.build());
49+
}
50+
51+
Result<ObjectGetResponse[]> got = ObjectsBatcher.resultFromBatchObjectsReply(reply.build(), batch);
52+
53+
// Assert
54+
List<ObjectGetResponse> succeeded = Arrays.stream(got.getResult())
55+
.filter(result -> result.getResult().getErrors() == null)
56+
.collect(Collectors.toList());
57+
List<ObjectGetResponse> failed = Arrays.stream(got.getResult())
58+
.filter(result -> result.getResult().getErrors() != null)
59+
.collect(Collectors.toList());
60+
Assertions.assertThat(got.getResult()).hasSize(total);
61+
Assertions.assertThat(failed).hasSize(wantFail);
62+
Assertions.assertThat(succeeded).hasSize(wantSucceed);
63+
64+
if (wantFail == 0) {
65+
Assertions.assertThat(got.getError()).isNull();
66+
return;
67+
}
68+
69+
String[] wantErrors = new String[wantFail];
70+
for (int i = 0; i < failed.size(); i++) {
71+
wantErrors[i] = failed.get(i).getResult().getErrors().getError().get(0).getMessage();
72+
}
73+
Assertions.assertThat(got.getError()).returns(HttpStatus.SC_UNPROCESSABLE_ENTITY, WeaviateError::getStatusCode);
74+
Assertions.assertThat(got.getError().getMessages())
75+
.hasSize(wantFail)
76+
.extracting(WeaviateErrorMessage::getMessage)
77+
.contains(wantErrors);
78+
79+
}
80+
}

0 commit comments

Comments
 (0)