Skip to content

Commit 8a068c2

Browse files
authored
Merge pull request #181 from graphql-java/dataloader-options-spring-bug
Fixed a bug that the Spring team found
2 parents 9a2bd4a + f54faf9 commit 8a068c2

File tree

3 files changed

+63
-8
lines changed

3 files changed

+63
-8
lines changed

src/main/java/org/dataloader/DataLoaderOptions.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public static DataLoaderOptions.Builder newDataLoaderOptions(DataLoaderOptions o
139139
* @return a new {@link DataLoaderOptions} object
140140
*/
141141
public DataLoaderOptions transform(Consumer<Builder> builderConsumer) {
142-
Builder builder = newOptionsBuilder();
142+
Builder builder = newDataLoaderOptions(this);
143143
builderConsumer.accept(builder);
144144
return builder.build();
145145
}

src/test/java/org/dataloader/DataLoaderBuilderTest.java

+19-7
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,31 @@ void canBuildNewDataLoaders() {
4646

4747
@Test
4848
void theDataLoaderCanTransform() {
49-
DataLoader<String, Object> dataLoader1 = DataLoaderFactory.newDataLoader(batchLoader1, defaultOptions);
50-
assertThat(dataLoader1.getOptions(), equalTo(defaultOptions));
51-
assertThat(dataLoader1.getBatchLoadFunction(), equalTo(batchLoader1));
49+
DataLoader<String, Object> dataLoaderOrig = DataLoaderFactory.newDataLoader(batchLoader1, defaultOptions);
50+
assertThat(dataLoaderOrig.getOptions(), equalTo(defaultOptions));
51+
assertThat(dataLoaderOrig.getBatchLoadFunction(), equalTo(batchLoader1));
5252
//
5353
// we can transform the data loader
5454
//
55-
DataLoader<String, Object> dataLoader2 = dataLoader1.transform(it -> {
55+
DataLoader<String, Object> dataLoaderTransformed = dataLoaderOrig.transform(it -> {
5656
it.options(differentOptions);
5757
it.batchLoadFunction(batchLoader2);
5858
});
5959

60-
assertThat(dataLoader2, not(equalTo(dataLoader1)));
61-
assertThat(dataLoader2.getOptions(), equalTo(differentOptions));
62-
assertThat(dataLoader2.getBatchLoadFunction(), equalTo(batchLoader2));
60+
assertThat(dataLoaderTransformed, not(equalTo(dataLoaderOrig)));
61+
assertThat(dataLoaderTransformed.getOptions(), equalTo(differentOptions));
62+
assertThat(dataLoaderTransformed.getBatchLoadFunction(), equalTo(batchLoader2));
63+
64+
// can copy values
65+
dataLoaderOrig = DataLoaderFactory.newDataLoader(batchLoader1, defaultOptions);
66+
67+
dataLoaderTransformed = dataLoaderOrig.transform(it -> {
68+
it.batchLoadFunction(batchLoader2);
69+
});
70+
71+
assertThat(dataLoaderTransformed, not(equalTo(dataLoaderOrig)));
72+
assertThat(dataLoaderTransformed.getOptions(), equalTo(defaultOptions));
73+
assertThat(dataLoaderTransformed.getBatchLoadFunction(), equalTo(batchLoader2));
74+
6375
}
6476
}

src/test/java/org/dataloader/DataLoaderOptionsTest.java

+43
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import org.dataloader.impl.DefaultCacheMap;
44
import org.dataloader.impl.NoOpValueCache;
5+
import org.dataloader.instrumentation.DataLoaderInstrumentation;
56
import org.dataloader.scheduler.BatchLoaderScheduler;
67
import org.dataloader.stats.NoOpStatisticsCollector;
78
import org.dataloader.stats.StatisticsCollector;
9+
import org.hamcrest.CoreMatchers;
810
import org.junit.jupiter.api.Test;
911

1012
import java.util.List;
@@ -184,4 +186,45 @@ void canBuildViaBuilderOk() {
184186
assertThat(builtOptions.getStatisticsCollector(),
185187
equalTo(testStatisticsCollectorSupplier.get()));
186188
}
189+
190+
@Test
191+
void canCopyExistingOptionValuesOnTransform() {
192+
193+
DataLoaderInstrumentation instrumentation1 = new DataLoaderInstrumentation() {
194+
};
195+
DataLoaderInstrumentation instrumentation2 = new DataLoaderInstrumentation() {
196+
};
197+
BatchLoaderContextProvider contextProvider1 = () -> null;
198+
199+
DataLoaderOptions startingOptions = DataLoaderOptions.newOptionsBuilder().setBatchingEnabled(false)
200+
.setCachingEnabled(false)
201+
.setInstrumentation(instrumentation1)
202+
.setBatchLoaderContextProvider(contextProvider1)
203+
.build();
204+
205+
assertThat(startingOptions.batchingEnabled(), equalTo(false));
206+
assertThat(startingOptions.cachingEnabled(), equalTo(false));
207+
assertThat(startingOptions.getInstrumentation(), equalTo(instrumentation1));
208+
assertThat(startingOptions.getBatchLoaderContextProvider(), equalTo(contextProvider1));
209+
210+
DataLoaderOptions newOptions = startingOptions.transform(builder ->
211+
builder.setBatchingEnabled(true).setInstrumentation(instrumentation2));
212+
213+
214+
// immutable
215+
assertThat(newOptions, CoreMatchers.not(startingOptions));
216+
assertThat(startingOptions.batchingEnabled(), equalTo(false));
217+
assertThat(startingOptions.cachingEnabled(), equalTo(false));
218+
assertThat(startingOptions.getInstrumentation(), equalTo(instrumentation1));
219+
assertThat(startingOptions.getBatchLoaderContextProvider(), equalTo(contextProvider1));
220+
221+
// stayed the same
222+
assertThat(newOptions.cachingEnabled(), equalTo(false));
223+
assertThat(newOptions.getBatchLoaderContextProvider(), equalTo(contextProvider1));
224+
225+
// was changed
226+
assertThat(newOptions.batchingEnabled(), equalTo(true));
227+
assertThat(newOptions.getInstrumentation(), equalTo(instrumentation2));
228+
229+
}
187230
}

0 commit comments

Comments
 (0)