Skip to content

Commit 1846df7

Browse files
authored
getValuesFromDataLoader helper function (#1217)
Added `getValuesFromDataLoader` helper function to make it easier to call `loadMany`. This works very similar to `getValueFromDataLoader`, but accepts a list of keys and returns a list of values. `getLoaderName` is created because both functions lookup the DataLoader instance the same way.
1 parent a6b957c commit 1846df7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

servers/graphql-kotlin-server/src/main/kotlin/com/expediagroup/graphql/server/extensions/dataFetchingEnvironmentExtensions.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ import java.util.concurrent.CompletableFuture
2525
* The provided key should be the cache key object used to save the value for that particular data loader.
2626
*/
2727
fun <K, V> DataFetchingEnvironment.getValueFromDataLoader(dataLoaderName: String, key: K): CompletableFuture<V> {
28-
val loader = this.getDataLoader<K, V>(dataLoaderName) ?: throw MissingDataLoaderException(dataLoaderName)
28+
val loader = getLoaderName<K, V>(dataLoaderName)
2929
return loader.load(key, this.getContext())
3030
}
31+
32+
/**
33+
* Helper method to get values from a registered DataLoader.
34+
*/
35+
fun <K, V> DataFetchingEnvironment.getValuesFromDataLoader(dataLoaderName: String, keys: List<K>): CompletableFuture<List<V>> {
36+
val loader = getLoaderName<K, V>(dataLoaderName)
37+
return loader.loadMany(keys, listOf(this.getContext()))
38+
}
39+
40+
private fun <K, V> DataFetchingEnvironment.getLoaderName(dataLoaderName: String) =
41+
this.getDataLoader<K, V>(dataLoaderName) ?: throw MissingDataLoaderException(dataLoaderName)

servers/graphql-kotlin-server/src/test/kotlin/com/expediagroup/graphql/server/extensions/DataFetchingEnvironmentExtensionsKtTest.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,21 @@ class DataFetchingEnvironmentExtensionsKtTest {
4141
assertEquals("123", result.get())
4242
}
4343

44+
@Test
45+
fun `getting values from a dataloader based on a list of keys`() {
46+
val dataFetchingEnvironment: DataFetchingEnvironment = mockk {
47+
every { getContext<Any>() } returns mockk()
48+
every { getDataLoader<String, String>("foo") } returns mockk {
49+
every { loadMany(listOf("bar"), any()) } returns CompletableFuture.completedFuture(listOf("123"))
50+
}
51+
}
52+
53+
val result: CompletableFuture<List<String>> = dataFetchingEnvironment.getValuesFromDataLoader("foo", listOf("bar"))
54+
55+
assertEquals(1, result.get().size)
56+
assertEquals("123", result.get().first())
57+
}
58+
4459
@Test
4560
fun `getting a dataloader throws exception when name not found`() {
4661
val dataFetchingEnvironment: DataFetchingEnvironment = mockk {

0 commit comments

Comments
 (0)