Skip to content

Commit e80bd44

Browse files
authored
Merge pull request #211 from graphql-java/fixes-208-and-ensure-tests-exist
#208 to ensure tests are in place
2 parents bdf71e5 + 1d34141 commit e80bd44

File tree

7 files changed

+89
-6
lines changed

7 files changed

+89
-6
lines changed

src/test/java/org/dataloader/DataLoaderTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.concurrent.ExecutionException;
4646
import java.util.concurrent.atomic.AtomicBoolean;
4747
import java.util.concurrent.atomic.AtomicInteger;
48+
import java.util.concurrent.atomic.AtomicReference;
4849
import java.util.function.Supplier;
4950
import java.util.stream.Collectors;
5051

@@ -1230,6 +1231,31 @@ public void when_values_size_are_more_then_key_size(TestDataLoaderFactory factor
12301231
}
12311232
}
12321233

1234+
@ParameterizedTest
1235+
@MethodSource("org.dataloader.fixtures.parameterized.TestDataLoaderFactories#get")
1236+
public void should_Support_loading_values_with_context(TestDataLoaderFactory factory) {
1237+
AtomicReference<BatchLoaderEnvironment> environmentREF = new AtomicReference<>();
1238+
DataLoader<Integer, Integer> identityLoader = factory.idLoaderWithContext(new DataLoaderOptions(), new ArrayList<>(), environmentREF);
1239+
1240+
identityLoader.load(1, "ctx1");
1241+
identityLoader.load(2, "ctx2");
1242+
identityLoader.loadMany(List.of(3, 4), List.of("ctx3", "ctx4"));
1243+
1244+
CompletableFuture<List<Integer>> cf = identityLoader.dispatch();
1245+
await().atMost(Duration.FIVE_SECONDS).until(cf::isDone);
1246+
1247+
assertThat(cf.toCompletableFuture().join(), equalTo(asList(1, 2, 3, 4)));
1248+
1249+
Map<Object, Object> keyContexts = environmentREF.get().getKeyContexts();
1250+
assertThat(keyContexts, equalTo(Map.of(
1251+
1, "ctx1",
1252+
2, "ctx2",
1253+
3, "ctx3",
1254+
4, "ctx4"
1255+
)));
1256+
}
1257+
1258+
12331259
@Test
12341260
public void can_call_a_loader_from_a_loader() throws Exception {
12351261
List<Collection<String>> deepLoadCalls = new ArrayList<>();

src/test/java/org/dataloader/fixtures/parameterized/DelegatingDataLoaderFactory.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56
import org.dataloader.DelegatingDataLoader;
@@ -8,6 +9,7 @@
89
import java.util.ArrayList;
910
import java.util.Collection;
1011
import java.util.List;
12+
import java.util.concurrent.atomic.AtomicReference;
1113

1214
public class DelegatingDataLoaderFactory implements TestDataLoaderFactory {
1315
// its delegates all the way down to the turtles
@@ -38,6 +40,11 @@ public <K> DataLoader<K, K> idLoader(DataLoaderOptions options, List<Collection<
3840
return mkDelegateDataLoader(delegateFactory.idLoader(options, loadCalls));
3941
}
4042

43+
@Override
44+
public <K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF) {
45+
return mkDelegateDataLoader(delegateFactory.idLoaderWithContext(options, loadCalls, environmentREF));
46+
}
47+
4148
@Override
4249
public <K> DataLoader<K, K> idLoaderDelayed(DataLoaderOptions options, List<Collection<K>> loadCalls, Duration delay) {
4350
return mkDelegateDataLoader(delegateFactory.idLoaderDelayed(options, loadCalls, delay));

src/test/java/org/dataloader/fixtures/parameterized/ListDataLoaderFactory.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56
import org.dataloader.fixtures.TestKit;
@@ -9,6 +10,7 @@
910
import java.util.Collection;
1011
import java.util.List;
1112
import java.util.concurrent.CompletableFuture;
13+
import java.util.concurrent.atomic.AtomicReference;
1214
import java.util.stream.Collectors;
1315

1416
import static java.util.concurrent.CompletableFuture.completedFuture;
@@ -23,6 +25,15 @@ public <K> DataLoader<K, K> idLoader(DataLoaderOptions options, List<Collection<
2325
}, options);
2426
}
2527

28+
@Override
29+
public <K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF) {
30+
return newDataLoader((keys, env) -> {
31+
environmentREF.set(env);
32+
loadCalls.add(new ArrayList<>(keys));
33+
return completedFuture(keys);
34+
}, options);
35+
}
36+
2637
@Override
2738
public <K> DataLoader<K, K> idLoaderDelayed(DataLoaderOptions options, List<Collection<K>> loadCalls, Duration delay) {
2839
return newDataLoader(keys -> CompletableFuture.supplyAsync(() -> {

src/test/java/org/dataloader/fixtures/parameterized/MappedDataLoaderFactory.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56
import org.dataloader.fixtures.TestKit;
@@ -11,10 +12,10 @@
1112
import java.util.List;
1213
import java.util.Map;
1314
import java.util.concurrent.CompletableFuture;
15+
import java.util.concurrent.atomic.AtomicReference;
1416
import java.util.stream.Collectors;
1517

1618
import static java.util.concurrent.CompletableFuture.completedFuture;
17-
import static org.dataloader.DataLoaderFactory.newDataLoader;
1819
import static org.dataloader.DataLoaderFactory.newMappedDataLoader;
1920
import static org.dataloader.fixtures.TestKit.futureError;
2021

@@ -31,6 +32,17 @@ public <K> DataLoader<K, K> idLoader(
3132
}, options);
3233
}
3334

35+
@Override
36+
public <K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF) {
37+
return newMappedDataLoader((keys, environment) -> {
38+
environmentREF.set(environment);
39+
loadCalls.add(new ArrayList<>(keys));
40+
Map<K, K> map = new HashMap<>();
41+
keys.forEach(k -> map.put(k, k));
42+
return completedFuture(map);
43+
}, options);
44+
}
45+
3446
@Override
3547
public <K> DataLoader<K, K> idLoaderDelayed(
3648
DataLoaderOptions options, List<Collection<K>> loadCalls, Duration delay) {

src/test/java/org/dataloader/fixtures/parameterized/MappedPublisherDataLoaderFactory.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56
import org.dataloader.Try;
@@ -12,16 +13,13 @@
1213
import java.util.HashMap;
1314
import java.util.List;
1415
import java.util.Map;
15-
import java.util.Set;
1616
import java.util.concurrent.CompletableFuture;
17-
import java.util.stream.Collectors;
17+
import java.util.concurrent.atomic.AtomicReference;
1818
import java.util.stream.Stream;
1919

2020
import static java.util.stream.Collectors.toList;
21-
import static java.util.stream.Collectors.toSet;
2221
import static org.dataloader.DataLoaderFactory.newMappedPublisherDataLoader;
2322
import static org.dataloader.DataLoaderFactory.newMappedPublisherDataLoaderWithTry;
24-
import static org.dataloader.DataLoaderFactory.newPublisherDataLoader;
2523

2624
public class MappedPublisherDataLoaderFactory implements TestDataLoaderFactory, TestReactiveDataLoaderFactory {
2725

@@ -36,6 +34,18 @@ public <K> DataLoader<K, K> idLoader(
3634
}, options);
3735
}
3836

37+
@Override
38+
public <K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF) {
39+
return newMappedPublisherDataLoader((keys, subscriber, environment) -> {
40+
environmentREF.set(environment);
41+
42+
loadCalls.add(new ArrayList<>(keys));
43+
Map<K, K> map = new HashMap<>();
44+
keys.forEach(k -> map.put(k, k));
45+
Flux.fromIterable(map.entrySet()).subscribe(subscriber);
46+
}, options);
47+
}
48+
3949
@Override
4050
public <K> DataLoader<K, K> idLoaderDelayed(
4151
DataLoaderOptions options, List<Collection<K>> loadCalls, Duration delay) {

src/test/java/org/dataloader/fixtures/parameterized/PublisherDataLoaderFactory.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56
import org.dataloader.Try;
@@ -11,9 +12,9 @@
1112
import java.util.Collection;
1213
import java.util.List;
1314
import java.util.concurrent.CompletableFuture;
15+
import java.util.concurrent.atomic.AtomicReference;
1416
import java.util.stream.Stream;
1517

16-
import static org.dataloader.DataLoaderFactory.newDataLoader;
1718
import static org.dataloader.DataLoaderFactory.newPublisherDataLoader;
1819
import static org.dataloader.DataLoaderFactory.newPublisherDataLoaderWithTry;
1920

@@ -28,6 +29,15 @@ public <K> DataLoader<K, K> idLoader(
2829
}, options);
2930
}
3031

32+
@Override
33+
public <K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF) {
34+
return newPublisherDataLoader((keys, subscriber, environment) -> {
35+
environmentREF.set(environment);
36+
loadCalls.add(new ArrayList<>(keys));
37+
Flux.fromIterable(keys).subscribe(subscriber);
38+
}, options);
39+
}
40+
3141
@Override
3242
public <K> DataLoader<K, K> idLoaderDelayed(DataLoaderOptions options, List<Collection<K>> loadCalls, Duration delay) {
3343
return newPublisherDataLoader((keys, subscriber) -> {

src/test/java/org/dataloader/fixtures/parameterized/TestDataLoaderFactory.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.dataloader.fixtures.parameterized;
22

3+
import org.dataloader.BatchLoaderEnvironment;
34
import org.dataloader.DataLoader;
45
import org.dataloader.DataLoaderOptions;
56

67
import java.time.Duration;
78
import java.util.ArrayList;
89
import java.util.Collection;
910
import java.util.List;
11+
import java.util.concurrent.atomic.AtomicReference;
1012

1113
public interface TestDataLoaderFactory {
1214
<K> DataLoader<K, K> idLoader(DataLoaderOptions options, List<Collection<K>> loadCalls);
@@ -23,6 +25,11 @@ public interface TestDataLoaderFactory {
2325

2426
DataLoader<String, String> idLoaderReturnsTooMany(int howManyMore, DataLoaderOptions options, ArrayList<Object> loadCalls);
2527

28+
// similar to above but batch loaders with context
29+
30+
<K> DataLoader<K, K> idLoaderWithContext(DataLoaderOptions options, List<Collection<K>> loadCalls, AtomicReference<BatchLoaderEnvironment> environmentREF);
31+
32+
2633
// Convenience methods
2734

2835
default <K> DataLoader<K, K> idLoader(DataLoaderOptions options) {

0 commit comments

Comments
 (0)