Skip to content

Commit 2934843

Browse files
Add tests to verify only required types are generated with include queries.
1 parent 2e33ed1 commit 2934843

File tree

1 file changed

+152
-0
lines changed
  • graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen

1 file changed

+152
-0
lines changed

graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/CodeGenTest.kt

+152
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,157 @@ class CodeGenTest {
17861786
assertCompilesJava(result.javaDataTypes + result.javaInterfaces)
17871787
}
17881788

1789+
@Test
1790+
fun generateOnlyRequiredDataTypesForQuery() {
1791+
val schema = """
1792+
type Query {
1793+
shows(showFilter: ShowFilter): [Video]
1794+
people(personFilter: PersonFilter): [Person]
1795+
}
1796+
1797+
union Video = Show | Movie
1798+
1799+
type Movie {
1800+
title: String
1801+
duration: Int
1802+
related: Related
1803+
}
1804+
1805+
type Related {
1806+
video: Video
1807+
}
1808+
1809+
type Show {
1810+
title: String
1811+
tags(from: Int, to: Int, sourceType: SourceType): [ShowTag]
1812+
isLive(countryFilter: CountryFilter): Boolean
1813+
}
1814+
1815+
enum ShouldNotInclude { YES, NO }
1816+
1817+
input NotUsed {
1818+
field: String
1819+
}
1820+
1821+
input ShowFilter {
1822+
title: String
1823+
showType: ShowType
1824+
similarTo: SimilarityInput
1825+
}
1826+
1827+
input SimilarityInput {
1828+
tags: [String]
1829+
}
1830+
1831+
enum ShowType {
1832+
MOVIE, SERIES
1833+
}
1834+
1835+
input CountryFilter {
1836+
countriesToExclude: [String]
1837+
}
1838+
1839+
enum SourceType { FOO, BAR }
1840+
1841+
type Person {
1842+
name: String
1843+
}
1844+
""".trimIndent()
1845+
1846+
val codeGenResult = CodeGen(
1847+
CodeGenConfig(
1848+
schemas = setOf(schema),
1849+
packageName = basePackageName,
1850+
includeQueries = setOf("shows"),
1851+
generateDataTypes = false,
1852+
writeToFiles = false
1853+
)
1854+
).generate()
1855+
1856+
assertThat(codeGenResult.javaDataTypes)
1857+
.extracting("typeSpec").extracting("name").containsExactly("ShowFilter", "SimilarityInput", "CountryFilter")
1858+
assertThat(codeGenResult.javaEnumTypes)
1859+
.extracting("typeSpec").extracting("name").containsExactly("ShowType", "SourceType")
1860+
assertThat(codeGenResult.clientProjections).isEmpty()
1861+
1862+
assertCompilesJava(codeGenResult.javaDataTypes + codeGenResult.javaEnumTypes)
1863+
}
1864+
1865+
@Test
1866+
fun generateAllDataTypesForAllQueriesWhenSetToTrue() {
1867+
val schema = """
1868+
type Query {
1869+
shows(showFilter: ShowFilter): [Video]
1870+
people(personFilter: PersonFilter): [Person]
1871+
}
1872+
1873+
union Video = Show | Movie
1874+
1875+
type Movie {
1876+
title: String
1877+
duration: Int
1878+
related: Related
1879+
}
1880+
1881+
type Related {
1882+
video: Video
1883+
}
1884+
1885+
type Show {
1886+
title: String
1887+
isLive(countryFilter: CountryFilter): Boolean
1888+
}
1889+
1890+
enum ShouldNotInclude { YES, NO }
1891+
1892+
input NotUsed {
1893+
field: String
1894+
}
1895+
1896+
input ShowFilter {
1897+
title: String
1898+
showType: ShowType
1899+
similarTo: SimilarityInput
1900+
}
1901+
1902+
input SimilarityInput {
1903+
tags: [String]
1904+
}
1905+
1906+
enum ShowType {
1907+
MOVIE, SERIES
1908+
}
1909+
1910+
input CountryFilter {
1911+
countriesToExclude: [String]
1912+
}
1913+
1914+
enum SourceType { FOO, BAR }
1915+
1916+
type Person {
1917+
name: String
1918+
}
1919+
""".trimIndent()
1920+
1921+
val codeGenResult = CodeGen(
1922+
CodeGenConfig(
1923+
schemas = setOf(schema),
1924+
packageName = basePackageName,
1925+
includeQueries = setOf("shows"),
1926+
generateDataTypes = true,
1927+
writeToFiles = false
1928+
)
1929+
).generate()
1930+
1931+
assertThat(codeGenResult.javaDataTypes)
1932+
.extracting("typeSpec").extracting("name").containsExactly("Movie", "Related", "Show", "Person", "NotUsed", "ShowFilter", "SimilarityInput", "CountryFilter")
1933+
assertThat(codeGenResult.javaEnumTypes)
1934+
.extracting("typeSpec").extracting("name").containsExactly("ShouldNotInclude", "ShowType", "SourceType")
1935+
assertThat(codeGenResult.clientProjections).isEmpty()
1936+
1937+
assertCompilesJava(codeGenResult.javaDataTypes + codeGenResult.javaEnumTypes + codeGenResult.javaInterfaces)
1938+
}
1939+
17891940
@Test
17901941
fun skipCodegenOnTypes() {
17911942
val schema = """
@@ -2690,6 +2841,7 @@ class CodeGenTest {
26902841
assertThat(searchResultPage.typeSpec.superinterfaces).extracting("simpleName").containsExactly("ISearchResultPage")
26912842
assertThat(searchResultPage.typeSpec.fieldSpecs).extracting("name").containsExactly("items")
26922843
parameterizedTypeName = searchResultPage.typeSpec.fieldSpecs[0].type as ParameterizedTypeName
2844+
parameterizedTypeName = searchResultPage.typeSpec.fieldSpecs[0].type as ParameterizedTypeName
26932845
assertThat(parameterizedTypeName.rawType).extracting("simpleName").isEqualTo("List")
26942846
assertThat(parameterizedTypeName.typeArguments[0]).extracting("simpleName").isEqualTo("SearchResult")
26952847

0 commit comments

Comments
 (0)