Skip to content

Commit

Permalink
Merge pull request #415 from Netflix/feature/KotlinEntitiesClientApiG…
Browse files Browse the repository at this point in the history
…enTest.kt

Adding Kotlin Entities Client API Code GenTest
  • Loading branch information
berngp authored Jul 6, 2022
2 parents dacf2fa + 9263ef4 commit 081e11c
Show file tree
Hide file tree
Showing 2 changed files with 545 additions and 98 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -69,7 +63,7 @@ class EntitiesClientApiGenTest {
assertThat(representation.typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -91,13 +85,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -111,7 +99,7 @@ class EntitiesClientApiGenTest {
assertThat(representation.typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -137,13 +125,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -153,15 +135,15 @@ class EntitiesClientApiGenTest {
assertThat(projections[3].typeSpec.name).isEqualTo("EntitiesMovieKey_Actor_ActorProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(2)
assertThat(representations).hasSize(2)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "actor")
assertThat(representations[1].typeSpec.name).isEqualTo("IActorRepresentation")
assertThat(representations[1].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "name")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -182,13 +164,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -197,15 +173,15 @@ class EntitiesClientApiGenTest {
assertThat(projections[2].typeSpec.name).isEqualTo("EntitiesMovieKey_ActorsProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(2)
assertThat(representations).hasSize(2)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId", "actors")
assertThat(representations[0].typeSpec.fieldSpecs[1]).extracting("type")
.toString()
.contains("java.util.List<com.netflix.graphql.dgs.codegen.tests.generated.client.ActorRepresentation>")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand Down Expand Up @@ -233,13 +209,7 @@ class EntitiesClientApiGenTest {
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -253,7 +223,7 @@ class EntitiesClientApiGenTest {
assertThat(projections[6].typeSpec.name).isEqualTo("EntitiesMovieCastKey_ActorProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(3)
assertThat(representations).hasSize(3)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId", "actor")
Expand All @@ -264,7 +234,7 @@ class EntitiesClientApiGenTest {
assertThat(representations[2].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movie", "actor")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -287,13 +257,7 @@ class EntitiesClientApiGenTest {
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -304,15 +268,15 @@ class EntitiesClientApiGenTest {
assertThat(projections[3].typeSpec.name).isEqualTo("EntitiesMovieActorKeyProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(2)
assertThat(representations).hasSize(2)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId")
assertThat(representations[1].typeSpec.name).isEqualTo("MovieActorRepresentation")
assertThat(representations[1].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "name")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -334,13 +298,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -349,15 +307,15 @@ class EntitiesClientApiGenTest {
assertThat(projections[2].typeSpec.name).isEqualTo("EntitiesMovieKey_ActorProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(2)
assertThat(representations).hasSize(2)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "movieId", "actor")
assertThat(representations[1].typeSpec.name).isEqualTo("PersonRepresentation")
assertThat(representations[1].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "name", "age")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand All @@ -381,13 +339,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand All @@ -396,12 +348,13 @@ class EntitiesClientApiGenTest {
assertThat(projections[2].typeSpec.name).isEqualTo("EntitiesMovieKey_GenreProjection")

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(2)
assertThat(representations).hasSize(2)
assertThat(representations[0].typeSpec.name).isEqualTo("MovieRepresentation")
assertThat(representations[0].typeSpec.fieldSpecs).extracting("name")
.containsExactlyInAnyOrder("__typename", "id", "genre")
assertThat(representations[1].typeSpec.name).isEqualTo("MovieGenreRepresentation")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
Expand Down Expand Up @@ -436,13 +389,7 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections[0].typeSpec.name).isEqualTo("EntitiesProjectionRoot")
Expand Down Expand Up @@ -482,11 +429,11 @@ class EntitiesClientApiGenTest {
assertThat(representations.first { it.typeSpec.name == "LocationRepresentation" }.typeSpec.fieldSpecs)
.extracting("name").containsExactlyInAnyOrder("__typename", "id")

assertCompilesJava(codeGenResult.javaSources())
codeGenResult.assertCompile()
}

@Test
fun testScalarsInEntities() {
fun `Entities can have scalar fields`() {
val schema = """
type Query {
movieCountry: MovieCountry
Expand All @@ -500,19 +447,14 @@ class EntitiesClientApiGenTest {
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true,
typeMapping = mapOf("Long" to "java.lang.Long")
)
).generate()
val codeGenResult = codeGen(schema)

val representations = codeGenResult.javaDataTypes.filter { "Representation" in it.typeSpec.name }
assertThat(representations.size).isEqualTo(1)
assertThat(representations).hasSize(1)
val projections = codeGenResult.clientProjections
assertThat(projections.size).isEqualTo(3)
assertCompilesJava(codeGenResult.javaSources())
assertThat(projections).hasSize(3)

codeGenResult.assertCompile()
}

@Test
Expand Down Expand Up @@ -545,6 +487,8 @@ class EntitiesClientApiGenTest {

val projections = codeGenResult.clientProjections.filter { "Entities" in it.typeSpec.name }
assertThat(projections).isEmpty()

codeGenResult.assertCompile()
}

@Test
Expand All @@ -564,15 +508,9 @@ class EntitiesClientApiGenTest {
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true
)
).generate()
val codeGenResult = codeGen(schema)
// then
val testClassLoader = assertCompilesJava(codeGenResult).toClassLoader()
val testClassLoader = codeGenResult.assertCompile().toClassLoader()
// assert projection classes
val (entityRootProjectionClass, entitiesFooKeyProjectionClass, entitiesFooKey_BarFieldProjectionClass, entitiesFooKey_MBarFieldProjection) =
arrayOf(
Expand Down Expand Up @@ -618,4 +556,18 @@ class EntitiesClientApiGenTest {
.describedAs("method: $name").isNotNull.returns(returnClass) { it.returnType }
}
}

companion object {
fun codeGen(schema: String): CodeGenResult {
return CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true,
language = Language.JAVA
)
).generate()
}
fun CodeGenResult.assertCompile() = assertCompilesJava(this)
}
}
Loading

0 comments on commit 081e11c

Please sign in to comment.