Browse Source

DATAMONGO-2574 - Polishing.

Fix issue in reactive API and add unit tests.
issue/DATAMONGO-2574
Christoph Strobl 6 years ago
parent
commit
d58f780536
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java
  2. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/ReactiveGridFsOperations.java
  3. 79
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateUnitTests.java
  4. 83
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/ReactiveGridFsTemplateUnitTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsOperations.java

@ -129,7 +129,7 @@ public interface GridFsOperations extends ResourcePatternResolver {
* *
* @param content must not be {@literal null}. * @param content must not be {@literal null}.
* @param filename must not be {@literal null} or empty. * @param filename must not be {@literal null} or empty.
* @param contentType can be {@literal null}. * @param contentType can be {@literal null}. If not empty, may override content type within {@literal metadata}.
* @param metadata can be {@literal null}. * @param metadata can be {@literal null}.
* @return the {@link ObjectId} of the {@link com.mongodb.client.gridfs.model.GridFSFile} just created. * @return the {@link ObjectId} of the {@link com.mongodb.client.gridfs.model.GridFSFile} just created.
*/ */

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/ReactiveGridFsOperations.java

@ -135,7 +135,7 @@ public interface ReactiveGridFsOperations {
* *
* @param content must not be {@literal null}. * @param content must not be {@literal null}.
* @param filename must not be {@literal null} or empty. * @param filename must not be {@literal null} or empty.
* @param contentType can be {@literal null}. * @param contentType can be {@literal null}. If not empty, may override content type within {@literal metadata}.
* @param metadata can be {@literal null}. * @param metadata can be {@literal null}.
* @return a {@link Mono} emitting the {@link ObjectId} of the {@link com.mongodb.client.gridfs.model.GridFSFile} just * @return a {@link Mono} emitting the {@link ObjectId} of the {@link com.mongodb.client.gridfs.model.GridFSFile} just
* created. * created.
@ -148,12 +148,12 @@ public interface ReactiveGridFsOperations {
if (StringUtils.hasText(filename)) { if (StringUtils.hasText(filename)) {
uploadBuilder.filename(filename); uploadBuilder.filename(filename);
} }
if (StringUtils.hasText(contentType)) {
uploadBuilder.contentType(contentType);
}
if (!ObjectUtils.isEmpty(metadata)) { if (!ObjectUtils.isEmpty(metadata)) {
uploadBuilder.metadata(metadata); uploadBuilder.metadata(metadata);
} }
if (StringUtils.hasText(contentType)) {
uploadBuilder.contentType(contentType);
}
return store(uploadBuilder.build()); return store(uploadBuilder.build());
} }

79
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateUnitTests.java

@ -0,0 +1,79 @@
/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.gridfs;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.convert.MongoConverter;
/**
* @author Christoph Strobl
*/
class GridFsTemplateUnitTests {
private GridFsTemplateStub template;
@BeforeEach
void beforeEach() {
template = new GridFsTemplateStub();
}
@Test // DATAMONGO-2574
void contentMetadataDoesNotOverrideContentTypeIfSet() {
template.onStoreReturn(new ObjectId());
template.store(new ByteArrayInputStream(new byte[] {}), "filename", "json", new Document("meta", "data"));
assertThat(template.capturedUpload().getOptions().getContentType()).isEqualTo("json");
assertThat(template.capturedUpload().getOptions().getMetadata()).containsEntry("meta", "data");
}
private static class GridFsTemplateStub extends GridFsTemplate {
private Object onStoreResult;
private GridFsObject<?, InputStream> capturedUpload;
GridFsTemplateStub() {
super(mock(MongoDatabaseFactory.class), mock(MongoConverter.class));
}
@Override
public <T> T store(GridFsObject<T, InputStream> upload) {
this.capturedUpload = upload;
return (T) onStoreResult;
}
GridFsTemplateStub onStoreReturn(Object result) {
this.onStoreResult = result;
return this;
}
GridFsObject<?, InputStream> capturedUpload() {
return capturedUpload;
}
}
}

83
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/ReactiveGridFsTemplateUnitTests.java

@ -0,0 +1,83 @@
/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.gridfs;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.io.InputStream;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.data.mongodb.ReactiveMongoDatabaseFactory;
import org.springframework.data.mongodb.core.convert.MongoConverter;
/**
* @author Christoph Strobl
*/
class ReactiveGridFsTemplateUnitTests {
private ReactiveGridFsTemplateStub template;
@BeforeEach
void beforeEach() {
template = new ReactiveGridFsTemplateStub();
}
@Test // DATAMONGO-2574
void contentMetadataDoesNotOverrideContentTypeIfSet() {
template.onStoreReturn(new ObjectId());
template.store(Flux.empty(), "filename", "json", new Document("meta", "data"));
assertThat(template.capturedUpload().getOptions().getContentType()).isEqualTo("json");
assertThat(template.capturedUpload().getOptions().getMetadata()).containsEntry("meta", "data");
}
private static class ReactiveGridFsTemplateStub extends ReactiveGridFsTemplate {
private Object onStoreResult;
private GridFsObject<?, Publisher<DataBuffer>> capturedUpload;
ReactiveGridFsTemplateStub() {
super(mock(ReactiveMongoDatabaseFactory.class), mock(MongoConverter.class));
}
@Override
public <T> Mono<T> store(GridFsObject<T, Publisher<DataBuffer>> upload) {
capturedUpload = upload;
return Mono.just((T) onStoreResult);
}
ReactiveGridFsTemplateStub onStoreReturn(Object result) {
this.onStoreResult = result;
return this;
}
GridFsObject<?, Publisher<DataBuffer>> capturedUpload() {
return capturedUpload;
}
}
}
Loading…
Cancel
Save