Skip to content

Commit 62764ec

Browse files
authored
Add missing APIs to GradleEnterpriseApi (#174)
The beta `ProjectsApi` (added in 2023.3) and `TestsApi` (added in 2023.4) weren't accessible from `GradleEnterpriseApi`. Fix and an integration test to prevent it from happening again.
1 parent a0e4e6f commit 62764ec

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

library/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ testing {
201201
register<JvmTestSuite>("integrationTest") {
202202
dependencies {
203203
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
204+
implementation("com.google.guava:guava:33.1.0-jre")
204205
}
205206
}
206207
withType<JvmTestSuite>().configureEach {

library/src/integrationTest/kotlin/com/gabrielfeo/gradle/enterprise/api/GradleEnterpriseApiIntegrationTest.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.gabrielfeo.gradle.enterprise.api
22

33
import com.gabrielfeo.gradle.enterprise.api.internal.*
4+
import com.google.common.reflect.ClassPath
45
import kotlinx.coroutines.test.runTest
56
import org.junit.jupiter.api.assertDoesNotThrow
7+
import kotlin.reflect.KVisibility.PUBLIC
8+
import kotlin.reflect.full.memberProperties
9+
import kotlin.reflect.javaType
610
import kotlin.test.*
711

12+
@OptIn(ExperimentalStdlibApi::class)
813
class GradleEnterpriseApiIntegrationTest {
914

1015
@Test
@@ -33,4 +38,26 @@ class GradleEnterpriseApiIntegrationTest {
3338
GradleEnterpriseApi.newInstance(config)
3439
}
3540
}
41+
42+
@Test
43+
fun mainApiInterfaceExposesAllGeneratedApiClasses() = runTest {
44+
val generatedApiTypes = getGeneratedApiTypes()
45+
val mainApiInterfaceProperties = getMainApiInterfaceProperties()
46+
generatedApiTypes.forEach {
47+
mainApiInterfaceProperties.singleOrNull { type -> type == it }
48+
?: fail("No property in GradleEnterpriseApi for $it")
49+
}
50+
}
51+
52+
private fun getGeneratedApiTypes(): List<String> {
53+
val cp = ClassPath.from(this::class.java.classLoader)
54+
return cp.getTopLevelClasses("com.gabrielfeo.gradle.enterprise.api")
55+
.filter { it.simpleName.endsWith("Api") }
56+
.filter { !it.simpleName.endsWith("GradleEnterpriseApi") }
57+
.map { it.name }
58+
}
59+
60+
private fun getMainApiInterfaceProperties() = GradleEnterpriseApi::class.memberProperties
61+
.filter { it.visibility == PUBLIC }
62+
.map { it.returnType.javaType.typeName }
3663
}

library/src/main/kotlin/com/gabrielfeo/gradle/enterprise/api/GradleEnterpriseApi.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ interface GradleEnterpriseApi {
3535

3636
val buildsApi: BuildsApi
3737
val buildCacheApi: BuildCacheApi
38+
val projectsApi: ProjectsApi
39+
val testsApi: TestsApi
3840
val metaApi: MetaApi
3941
val testDistributionApi: TestDistributionApi
4042

@@ -78,6 +80,8 @@ internal class RealGradleEnterpriseApi(
7880

7981
override val buildsApi: BuildsApi by lazy { retrofit.create() }
8082
override val buildCacheApi: BuildCacheApi by lazy { retrofit.create() }
83+
override val projectsApi: ProjectsApi by lazy { retrofit.create() }
84+
override val testsApi: TestsApi by lazy { retrofit.create() }
8185
override val metaApi: MetaApi by lazy { retrofit.create() }
8286
override val testDistributionApi: TestDistributionApi by lazy { retrofit.create() }
8387

0 commit comments

Comments
 (0)