Skip to content

Commit ab9967b

Browse files
authored
Merge pull request #503 from weaviate/v6-weaviate-object
v6: Simplify WeaviateObject interface
2 parents 6befa30 + 3aef0cf commit ab9967b

32 files changed

Lines changed: 562 additions & 631 deletions

src/it/java/io/weaviate/integration/DataITest.java

Lines changed: 58 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.assertj.core.api.Assertions;
1010
import org.assertj.core.api.InstanceOfAssertFactories;
1111
import org.junit.BeforeClass;
12+
import org.junit.Ignore;
1213
import org.junit.Test;
1314

1415
import io.weaviate.ConcurrentTest;
@@ -20,15 +21,17 @@
2021
import io.weaviate.client6.v1.api.collections.ReferenceProperty;
2122
import io.weaviate.client6.v1.api.collections.VectorConfig;
2223
import io.weaviate.client6.v1.api.collections.Vectors;
23-
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2424
import io.weaviate.client6.v1.api.collections.data.BatchReference;
2525
import io.weaviate.client6.v1.api.collections.data.DeleteManyResponse;
2626
import io.weaviate.client6.v1.api.collections.data.Reference;
27+
import io.weaviate.client6.v1.api.collections.data.WriteWeaviateObject;
2728
import io.weaviate.client6.v1.api.collections.query.Filter;
2829
import io.weaviate.client6.v1.api.collections.query.Metadata;
2930
import io.weaviate.client6.v1.api.collections.query.Metadata.MetadataField;
3031
import io.weaviate.client6.v1.api.collections.query.QueryMetadata;
3132
import io.weaviate.client6.v1.api.collections.query.QueryReference;
33+
import io.weaviate.client6.v1.api.collections.query.ReadWeaviateObject;
34+
import io.weaviate.client6.v1.api.collections.tenants.Tenant;
3235
import io.weaviate.containers.Container;
3336

3437
public class DataITest extends ConcurrentTest {
@@ -86,6 +89,7 @@ public void testCreateGetDelete() throws IOException {
8689
.as("object not exists after deletion").isFalse();
8790

8891
deleted = artists.data.deleteById(id);
92+
8993
// TODO: Change to isFalse() after fixed in Weaviate server
9094
Assertions.assertThat(deleted)
9195
.as("object wasn't deleted").isTrue();
@@ -106,11 +110,11 @@ public void testBlobData() throws IOException {
106110
"breed", "ragdoll",
107111
"img", ragdollPng));
108112

109-
var got = cats.query.fetchObjectById(ragdoll.metadata().uuid(),
113+
var got = cats.query.fetchObjectById(ragdoll.uuid(),
110114
cat -> cat.returnProperties("img"));
111115

112116
Assertions.assertThat(got).get()
113-
.extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
117+
.extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
114118
.extractingByKey("img").isEqualTo(ragdollPng);
115119
}
116120

@@ -147,59 +151,59 @@ public void testReferences_AddReplaceDelete() throws IOException {
147151

148152
// Act: add reference
149153
persons.data.referenceAdd(
150-
john.metadata().uuid(),
154+
john.uuid(),
151155
"hasFriend",
152156
Reference.object(albie));
153157

154158
// Assert
155-
var johnWithFriends = persons.query.fetchObjectById(john.metadata().uuid(),
159+
var johnWithFriends = persons.query.fetchObjectById(john.uuid(),
156160
query -> query.returnReferences(
157161
QueryReference.single("hasFriend",
158162
friend -> friend.returnProperties("name"))));
159163

160164
Assertions.assertThat(johnWithFriends).get()
161165
.as("friends after ADD")
162-
.extracting(WeaviateObject::references).extracting("hasFriend")
163-
.asInstanceOf(InstanceOfAssertFactories.list(WeaviateObject.class))
166+
.extracting(ReadWeaviateObject::references).extracting("hasFriend")
167+
.asInstanceOf(InstanceOfAssertFactories.list(ReadWeaviateObject.class))
164168
.hasSize(1)
165-
.first().extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
169+
.first().extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
166170
.returns("albie", friend -> friend.get("name"));
167171

168172
// Act: replace reference
169173
var barbara = persons.data.insert(Map.of("name", "barbara"));
170174
persons.data.referenceReplace(
171-
john.metadata().uuid(),
175+
john.uuid(),
172176
"hasFriend",
173177
Reference.object(barbara));
174178

175-
johnWithFriends = persons.query.fetchObjectById(john.metadata().uuid(),
179+
johnWithFriends = persons.query.fetchObjectById(john.uuid(),
176180
query -> query.returnReferences(
177181
QueryReference.single("hasFriend",
178182
friend -> friend.returnProperties("name"))));
179183

180184
Assertions.assertThat(johnWithFriends).get()
181185
.as("friends after REPLACE")
182-
.extracting(WeaviateObject::references).extracting("hasFriend")
183-
.asInstanceOf(InstanceOfAssertFactories.list(WeaviateObject.class))
186+
.extracting(ReadWeaviateObject::references).extracting("hasFriend")
187+
.asInstanceOf(InstanceOfAssertFactories.list(ReadWeaviateObject.class))
184188
.hasSize(1)
185-
.first().extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
189+
.first().extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
186190
.returns("barbara", friend -> friend.get("name"));
187191

188192
// Act: delete reference
189193
persons.data.referenceDelete(
190-
john.metadata().uuid(),
194+
john.uuid(),
191195
"hasFriend",
192196
Reference.object(barbara));
193197

194198
// Assert
195-
johnWithFriends = persons.query.fetchObjectById(john.metadata().uuid(),
199+
johnWithFriends = persons.query.fetchObjectById(john.uuid(),
196200
query -> query.returnReferences(
197201
QueryReference.single("hasFriend")));
198202

199203
Assertions.assertThat(johnWithFriends).get()
200204
.as("friends after DELETE")
201-
.extracting(WeaviateObject::references).extracting("hasFriend")
202-
.asInstanceOf(InstanceOfAssertFactories.list(WeaviateObject.class))
205+
.extracting(ReadWeaviateObject::references).extracting("hasFriend")
206+
.asInstanceOf(InstanceOfAssertFactories.list(ReadWeaviateObject.class))
203207
.isEmpty();
204208
}
205209

@@ -217,15 +221,15 @@ public void testReplace() throws IOException {
217221
var ivanhoe = books.data.insert(Map.of("title", "ivanhoe"));
218222

219223
// Act
220-
books.data.replace(ivanhoe.metadata().uuid(),
224+
books.data.replace(ivanhoe.uuid(),
221225
replace -> replace.properties(Map.of("year", 1819)));
222226

223227
// Assert
224-
var replacedIvanhoe = books.query.fetchObjectById(ivanhoe.metadata().uuid());
228+
var replacedIvanhoe = books.query.fetchObjectById(ivanhoe.uuid());
225229

226230
Assertions.assertThat(replacedIvanhoe).get()
227231
.as("has ONLY year property")
228-
.extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
232+
.extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
229233
.doesNotContain(Map.entry("title", "ivanhoe"))
230234
.contains(Map.entry("year", 1819L));
231235
}
@@ -258,15 +262,15 @@ public void testUpdate() throws IOException {
258262
var ivanhoe = books.data.insert(Map.of("title", "ivanhoe"));
259263

260264
// Act
261-
books.data.update(ivanhoe.metadata().uuid(),
265+
books.data.update(ivanhoe.uuid(),
262266
update -> update
263267
.properties(Map.of("year", 1819))
264268
.reference("writtenBy", Reference.objects(walter))
265269
.vectors(Vectors.of(vector)));
266270

267271
// Assert
268272
var updIvanhoe = books.query.fetchObjectById(
269-
ivanhoe.metadata().uuid(),
273+
ivanhoe.uuid(),
270274
query -> query
271275
.includeVector()
272276
.returnReferences(QueryReference.single("writtenBy")));
@@ -275,20 +279,20 @@ public void testUpdate() throws IOException {
275279
.satisfies(book -> {
276280
Assertions.assertThat(book)
277281
.as("has both year and title property")
278-
.extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
282+
.extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
279283
.contains(Map.entry("title", "ivanhoe"), Map.entry("year", 1819L));
280284

281285
Assertions.assertThat(book)
282286
.as("has reference to Authors")
283-
.extracting(WeaviateObject::references, InstanceOfAssertFactories.MAP)
284-
.extractingByKey("writtenBy", InstanceOfAssertFactories.list(WeaviateObject.class))
287+
.extracting(ReadWeaviateObject::references, InstanceOfAssertFactories.MAP)
288+
.extractingByKey("writtenBy", InstanceOfAssertFactories.list(ReadWeaviateObject.class))
285289
.first()
286-
.extracting(WeaviateObject::properties, InstanceOfAssertFactories.MAP)
290+
.extracting(ReadWeaviateObject::properties, InstanceOfAssertFactories.MAP)
287291
.contains(Map.entry("name", "walter scott"));
288292

289293
Assertions.assertThat(book)
290294
.as("has a vector")
291-
.extracting(WeaviateObject::metadata)
295+
.extracting(ReadWeaviateObject::metadata)
292296
.extracting(QueryMetadata::vectors)
293297
.returns(vector, Vectors::getDefaultSingle);
294298
});
@@ -305,8 +309,8 @@ public void testDeleteMany() throws IOException {
305309

306310
var things = client.collections.use(nsThings);
307311
things.data.insert(Map.of("last_used", 1));
308-
var delete_1 = things.data.insert(Map.of("last_used", 5)).metadata().uuid();
309-
var delete_2 = things.data.insert(Map.of("last_used", 9)).metadata().uuid();
312+
var delete_1 = things.data.insert(Map.of("last_used", 5)).uuid();
313+
var delete_2 = things.data.insert(Map.of("last_used", 9)).uuid();
310314

311315
// Act (dry run)
312316
things.data.deleteMany(
@@ -394,15 +398,16 @@ public void testReferenceAddMany() throws IOException {
394398
// Assert
395399
Assertions.assertThat(response.errors()).isEmpty();
396400

397-
var goodburgAirports = cities.query.fetchObjectById(goodburg.metadata().uuid(),
401+
var goodburgAirports = cities.query.fetchObjectById(goodburg.uuid(),
398402
city -> city.returnReferences(
399403
QueryReference.single("hasAirports")));
400404

401405
Assertions.assertThat(goodburgAirports).get()
402406
.as("Goodburg has 3 airports")
403-
.extracting(WeaviateObject::references)
404-
.extracting(references -> references.get("hasAirports"), InstanceOfAssertFactories.list(WeaviateObject.class))
405-
.extracting(WeaviateObject::uuid)
407+
.extracting(ReadWeaviateObject::references)
408+
.extracting(references -> references.get("hasAirports"),
409+
InstanceOfAssertFactories.list(ReadWeaviateObject.class))
410+
.extracting(ReadWeaviateObject::uuid)
406411
.contains(alpha, bravo, charlie);
407412
}
408413

@@ -480,7 +485,7 @@ public void testDataTypes() throws IOException {
480485

481486
// Assert
482487
Assertions.assertThat(got).get()
483-
.extracting(WeaviateObject::properties)
488+
.extracting(ReadWeaviateObject::properties)
484489
.asInstanceOf(InstanceOfAssertFactories.map(String.class, Object.class))
485490
// Most of PhoneNumber fields are only present on read and are null on write.
486491
.usingRecursiveComparison()
@@ -535,4 +540,23 @@ public void testNestedProperties_insertMany() throws IOException {
535540
// Assert
536541
Assertions.assertThat(result.errors()).isEmpty();
537542
}
543+
544+
@Ignore("Making Emails collection multi-tenant causes ReferencesITest::testNestedReferences to fail")
545+
@Test
546+
public void test_multiTenant() throws IOException {
547+
// Arrange
548+
var nsEmails = ns("Emails");
549+
var emails = client.collections.create(nsEmails,
550+
c -> c.multiTenancy(mt -> mt.enabled(true)));
551+
552+
var johndoe = "john-doe";
553+
emails.tenants.create(Tenant.active(johndoe));
554+
emails = emails.withTenant(johndoe);
555+
556+
// Act
557+
var inserted = emails.data.insert(Map.of("subject", "McDonald's Xmas Bonanza"));
558+
559+
// Assert
560+
Assertions.assertThat(inserted).returns(johndoe, WriteWeaviateObject::tenant);
561+
}
538562
}

src/it/java/io/weaviate/integration/ORMITest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
import io.weaviate.client6.v1.api.collections.CollectionConfig;
1818
import io.weaviate.client6.v1.api.collections.GeoCoordinates;
1919
import io.weaviate.client6.v1.api.collections.PhoneNumber;
20-
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2120
import io.weaviate.client6.v1.api.collections.annotations.Collection;
2221
import io.weaviate.client6.v1.api.collections.annotations.Property;
2322
import io.weaviate.client6.v1.api.collections.data.InsertManyResponse.InsertObject;
23+
import io.weaviate.client6.v1.api.collections.query.ReadWeaviateObject;
2424
import io.weaviate.client6.v1.api.collections.query.Filter;
2525
import io.weaviate.containers.Container;
2626

@@ -358,7 +358,7 @@ public void test_partialScan() throws IOException {
358358

359359
// Assert
360360
Assertions.assertThat(got).get()
361-
.extracting(WeaviateObject::properties)
361+
.extracting(ReadWeaviateObject::properties)
362362
.returns("Dystopia", Song::title)
363363
.returns(null, Song::album)
364364
.returns(0, Song::year)

src/it/java/io/weaviate/integration/PaginationITest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import io.weaviate.client6.v1.api.WeaviateClient;
1919
import io.weaviate.client6.v1.api.WeaviateException;
2020
import io.weaviate.client6.v1.api.collections.Property;
21-
import io.weaviate.client6.v1.api.collections.WeaviateMetadata;
22-
import io.weaviate.client6.v1.api.collections.WeaviateObject;
2321
import io.weaviate.client6.v1.api.collections.pagination.PaginationException;
2422
import io.weaviate.client6.v1.api.collections.query.Metadata;
23+
import io.weaviate.client6.v1.api.collections.query.QueryMetadata;
24+
import io.weaviate.client6.v1.api.collections.query.ReadWeaviateObject;
2525
import io.weaviate.containers.Container;
2626

2727
public class PaginationITest extends ConcurrentTest {
@@ -39,15 +39,15 @@ public void testIterateAll() throws IOException {
3939
var inserted = new ArrayList<String>();
4040
for (var i = 0; i < count; i++) {
4141
var object = things.data.insert(Collections.emptyMap());
42-
inserted.add(object.metadata().uuid());
42+
inserted.add(object.uuid());
4343
}
4444
assumeTrue("all objects were inserted", inserted.size() == count);
4545

4646
var allThings = things.paginate();
4747

4848
// Act: stream
4949
var gotStream = allThings.stream()
50-
.map(WeaviateObject::metadata).map(WeaviateMetadata::uuid).toList();
50+
.map(ReadWeaviateObject::metadata).map(QueryMetadata::uuid).toList();
5151

5252
// Assert
5353
Assertions.assertThat(gotStream)
@@ -84,7 +84,7 @@ public void testResumePagination() throws IOException {
8484
var inserted = new ArrayList<String>();
8585
for (var i = 0; i < count; i++) {
8686
var object = things.data.insert(Collections.emptyMap());
87-
inserted.add(object.metadata().uuid());
87+
inserted.add(object.uuid());
8888
}
8989

9090
// Iterate over first 5 objects
@@ -114,7 +114,7 @@ public void testWithQueryOptions() throws IOException {
114114
var inserted = new ArrayList<String>();
115115
for (var i = 0; i < count; i++) {
116116
var object = things.data.insert(Collections.emptyMap());
117-
inserted.add(object.metadata().uuid());
117+
inserted.add(object.uuid());
118118
}
119119

120120
// Act / Assert

0 commit comments

Comments
 (0)