@Test public void updateNestedMap() throws Exception { doReturn(SINGLE_WRITE_COMMIT_RESPONSE) .when(firestoreMock) .sendRequest( commitCapture.capture(), Matchers.<UnaryCallable<CommitRequest, CommitResponse>>any()); documentReference.update("a.b", "foo", "a.c", FieldValue.delete()).get(); Map<String, Value> nestedUpdate = new HashMap<>(); Value.Builder valueProto = Value.newBuilder(); valueProto .getMapValueBuilder() .putFields("b", Value.newBuilder().setStringValue("foo").build()); nestedUpdate.put("a", valueProto.build()); CommitRequest expectedCommit = commit(update(nestedUpdate, Arrays.asList("a.b", "a.c"))); assertCommitEquals(expectedCommit, commitCapture.getValue()); }
@Test public void mergeWithDotsInFieldName() throws Exception { doReturn(SINGLE_WRITE_COMMIT_RESPONSE) .when(firestoreMock) .sendRequest( commitCapture.capture(), Matchers.<UnaryCallable<CommitRequest, CommitResponse>>any()); documentReference .set( map("a.b.c", map("d.e", "foo", "f.g", "bar")), SetOptions.mergeFieldPaths(Arrays.asList(FieldPath.of("a.b.c", "d.e")))) .get(); Map<String, Value> nestedUpdate = new HashMap<>(); Value.Builder nestedProto = Value.newBuilder(); nestedProto .getMapValueBuilder() .putFields("d.e", Value.newBuilder().setStringValue("foo").build()); nestedUpdate.put("a.b.c", nestedProto.build()); CommitRequest expectedCommit = commit(set(nestedUpdate, Arrays.asList("`a.b.c`.`d.e`"))); assertCommitEquals(expectedCommit, commitCapture.getValue()); }
@Test public void setMultipleFieldsWithMerge() throws Exception { doReturn(SINGLE_WRITE_COMMIT_RESPONSE) .when(firestoreMock) .sendRequest( commitCapture.capture(), Matchers.<UnaryCallable<CommitRequest, CommitResponse>>any()); documentReference .set( NESTED_CLASS_OBJECT, SetOptions.mergeFields("first.foo", "second.foo", "second.trueValue")) .get(); Map<String, Value> nestedUpdate = new HashMap<>(); Value.Builder nestedProto = Value.newBuilder(); nestedProto.getMapValueBuilder().putAllFields(SINGLE_FIELD_PROTO); nestedUpdate.put("first", nestedProto.build()); nestedProto .getMapValueBuilder() .putFields("trueValue", Value.newBuilder().setBooleanValue(true).build()); nestedUpdate.put("second", nestedProto.build()); CommitRequest expectedCommit = commit(set(nestedUpdate, Arrays.asList("first.foo", "second.foo", "second.trueValue"))); assertCommitEquals(expectedCommit, commitCapture.getValue()); }
Value encodedValue = encodeValue(path.append(entry.getKey()), entry.getValue(), options); if (encodedValue != null) { res.putFields(entry.getKey(), encodedValue);
Value encodedValue = encodeValue(path.append(entry.getKey()), entry.getValue(), options); if (encodedValue != null) { res.putFields(entry.getKey(), encodedValue);
@Test public void updateWithDotsInFieldName() throws Exception { doReturn(SINGLE_WRITE_COMMIT_RESPONSE) .when(firestoreMock) .sendRequest( commitCapture.capture(), Matchers.<UnaryCallable<CommitRequest, CommitResponse>>any()); documentReference.update(map("a.b.c", (Object) map("d.e", "foo"))).get(); Map<String, Value> nestedUpdate = new HashMap<>(); Value.Builder valueProto = Value.newBuilder(); valueProto .getMapValueBuilder() .putFields("d.e", Value.newBuilder().setStringValue("foo").build()); Value.Builder cProto = Value.newBuilder(); cProto.getMapValueBuilder().putFields("c", valueProto.build()); Value.Builder bProto = Value.newBuilder(); bProto.getMapValueBuilder().putFields("b", cProto.build()); nestedUpdate.put("a", bProto.build()); CommitRequest expectedCommit = commit(update(nestedUpdate, Arrays.asList("a.b.c"))); assertCommitEquals(expectedCommit, commitCapture.getValue()); }
private Value objectValue(String key, Value value, Object... keysAndValues) { MapValue.Builder mapBuilder = MapValue.newBuilder(); mapBuilder.putFields(key, value); for (int i = 0; i < keysAndValues.length; i += 2) { mapBuilder.putFields((String) keysAndValues[i], (Value) keysAndValues[i + 1]); } return Value.newBuilder().setMapValue(mapBuilder.build()).build(); } }
public static Value object(String key, Value value) { Value.Builder result = Value.newBuilder(); result.getMapValueBuilder().putFields(key, value); return result.build(); }