Skip to content

Commit 0ac236a

Browse files
committed
improve tests
Signed-off-by: Julia Plewa <[email protected]>
1 parent c36fd4f commit 0ac236a

13 files changed

+708
-184
lines changed

src/main/kotlin/org/virtuslab/pulumikotlin/codegen/step2intermediate/IntermediateRepresentationGenerator.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,13 @@ object IntermediateRepresentationGenerator {
7777
fun <V> createTypes(
7878
map: Map<String, V>,
7979
usageKind: UsageKind? = null,
80+
isProvider: Boolean = false,
8081
propertyExtractor: (V) -> RootTypeProperty?,
8182
) = map
8283
.mapValues { propertyExtractor(it.value) }
8384
.filterNotNullValues()
8485
.flatMap { (name, value) ->
85-
createRootTypes(context, name, value, listOfNotNull(usageKind))
86+
createRootTypes(context, name, value, listOfNotNull(usageKind), isProvider)
8687
}
8788

8889
val syntheticTypes = listOf(
@@ -99,6 +100,7 @@ object IntermediateRepresentationGenerator {
99100
createTypes(
100101
mapOf(DEFAULT_PROVIDER_TOKEN to schema.provider),
101102
UsageKind(Root, Resource, Input),
103+
isProvider = true,
102104
) { resource ->
103105
ObjectProperty(
104106
properties = resource.inputProperties,
@@ -119,7 +121,7 @@ object IntermediateRepresentationGenerator {
119121

120122
private fun createResources(types: Map<TypeKey, RootType>, context: Context): List<ResourceType> {
121123
return context.schema.resources.mapNotNull { (typeToken, resource) ->
122-
createResource(typeToken, resource, context, types)
124+
createResource(typeToken, resource, context, types, isProvider = false)
123125
}
124126
}
125127

@@ -128,7 +130,7 @@ object IntermediateRepresentationGenerator {
128130
resource: SchemaModel.Resource,
129131
context: Context,
130132
types: Map<TypeKey, RootType>,
131-
isProvider: Boolean = false,
133+
isProvider: Boolean,
132134
): ResourceType? {
133135
val resultFields = resource.properties
134136
.letIf(isProvider, ::filterStringProperties)
@@ -162,7 +164,7 @@ object IntermediateRepresentationGenerator {
162164
private fun createFunctions(types: Map<TypeKey, RootType>, context: Context): List<FunctionType> {
163165
return context.schema.functions.mapNotNull { (typeName, function) ->
164166
try {
165-
val pulumiName = PulumiName.from(typeName, context.namingConfiguration)
167+
val pulumiName = PulumiName.from(typeName, context.namingConfiguration, isProvider = false)
166168

167169
val inputUsageKind = UsageKind(Root, Function, Input)
168170
val argumentType = findTypeOrEmptyComplexType(
@@ -203,6 +205,7 @@ object IntermediateRepresentationGenerator {
203205
typeName: String,
204206
rootType: RootTypeProperty,
205207
forcedUsageKinds: List<UsageKind> = emptyList(),
208+
isProvider: Boolean,
206209
): List<RootType> {
207210
val usages = forcedUsageKinds.ifEmpty {
208211
val allUsagesForTypeName = context.referenceFinder.getUsages(typeName)
@@ -216,7 +219,7 @@ object IntermediateRepresentationGenerator {
216219
}
217220

218221
try {
219-
val pulumiName = PulumiName.from(typeName, context.namingConfiguration)
222+
val pulumiName = PulumiName.from(typeName, context.namingConfiguration, isProvider)
220223
return usages.map { usage ->
221224
when (rootType) {
222225
is ObjectProperty -> ComplexType(
@@ -304,7 +307,7 @@ object IntermediateRepresentationGenerator {
304307
} else if (context.referencedStringTypesResolver.shouldGenerateStringType(referencedTypeName)) {
305308
StringType
306309
} else {
307-
val pulumiName = PulumiName.from(referencedTypeName, context.namingConfiguration)
310+
val pulumiName = PulumiName.from(referencedTypeName, context.namingConfiguration, isProvider = false)
308311
when (context.referenceFinder.resolve(referencedTypeName)) {
309312
is ObjectProperty -> ReferencedComplexType(
310313
TypeMetadata(pulumiName, usageKind, getKDoc(property)),
@@ -398,8 +401,11 @@ object IntermediateRepresentationGenerator {
398401
name = with(name) {
399402
PulumiName(
400403
providerName.lowercase(),
401-
namespace.map { it.lowercase() },
404+
providerNameOverride?.lowercase(),
405+
baseNamespace.map { it.lowercase() },
406+
moduleName?.lowercase(),
402407
name.lowercase(),
408+
isProvider = isProvider,
403409
)
404410
},
405411
)

src/main/kotlin/org/virtuslab/pulumikotlin/codegen/step2intermediate/PulumiName.kt

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,21 @@ import org.virtuslab.pulumikotlin.codegen.utils.decapitalize
1616

1717
data class PulumiName(
1818
val providerName: String,
19-
val namespace: List<String>,
19+
val providerNameOverride: String?,
20+
val baseNamespace: List<String>,
21+
val moduleName: String?,
2022
val name: String,
21-
val isProvider: Boolean = false,
23+
val isProvider: Boolean,
2224
) {
25+
val namespace: List<String>
26+
get() = (
27+
baseNamespace +
28+
(providerNameOverride ?: providerName) +
29+
moduleName
30+
)
31+
.filterNotNull()
32+
.filter { it.isNotBlank() }
33+
.map { it.replace("-", "") }
2334

2435
private data class Modifiers(
2536
val nameSuffix: String,
@@ -176,20 +187,16 @@ data class PulumiName(
176187
}
177188

178189
fun toFunctionGroupObjectName(namingFlags: NamingFlags): String {
179-
return when (namingFlags.language) {
180-
Kotlin, Java -> {
181-
if (namespace.isEmpty()) {
182-
"${getProviderPrefix()}Functions"
183-
} else {
184-
namespace.last().replace(".", "_").capitalize() + "Functions"
185-
}
186-
}
190+
return if (moduleName != null) {
191+
moduleName.replace(".", "_").capitalize() + "Functions"
192+
} else {
193+
getProviderPrefix(namingFlags.language).replace(".", "_").capitalize() + "Functions"
187194
}
188195
}
189196

190197
fun toResourceName(namingFlags: NamingFlags): String {
191198
return if (namingFlags.language == Kotlin && isProvider) {
192-
"${getProviderPrefix()}${name.capitalize()}"
199+
"${getProviderPrefix(namingFlags.language)}${name.capitalize()}"
193200
} else {
194201
name.capitalize()
195202
}
@@ -217,7 +224,13 @@ data class PulumiName(
217224
}
218225
}
219226

220-
private fun getProviderPrefix() = providerName.split("-").joinToString("") { it.capitalize() }
227+
private fun getProviderPrefix(languageType: LanguageType): String {
228+
val splitProviderName = providerName.split("-")
229+
return when (languageType) {
230+
Kotlin -> splitProviderName.joinToString("") { it.capitalize() }
231+
Java -> splitProviderName.joinToString("").capitalize()
232+
}
233+
}
221234

222235
private fun packageToString(packageList: List<String>): String {
223236
return packageList.joinToString(".")
@@ -266,37 +279,46 @@ data class PulumiName(
266279

267280
require(segments.size == EXPECTED_NUMBER_OF_SEGMENTS_IN_TOKEN) { "Malformed token $token" }
268281

269-
fun substituteWithOverride(name: String) = namingConfiguration.packageOverrides[name] ?: name
282+
fun substituteWithOverride(name: String) = namingConfiguration.packageOverrides[name]
270283

271284
val module = when (segments[1]) {
272-
"providers" -> ""
285+
"providers" -> null
273286
else -> {
274287
val moduleMatches = namingConfiguration.moduleFormatRegex.matchEntire(segments[1])
275288
?.groupValues
276289
.orEmpty()
277290

278291
if (moduleMatches.size < 2 || moduleMatches[1].startsWith("index")) {
279-
""
292+
null
280293
} else {
281294
moduleMatches[1]
282295
}
283296
}
284297
}
285298

286-
val providerName = substituteWithOverride(namingConfiguration.providerName)
287-
val moduleName = substituteWithOverride(module)
288-
289-
val namespace = (namingConfiguration.baseNamespace + providerName + moduleName)
290-
.filter { it.isNotBlank() }
291-
.map { it.replace("-", "") }
299+
val providerNameOverride = substituteWithOverride(namingConfiguration.providerName)
300+
val moduleName = module?.let { substituteWithOverride(it) } ?: module
292301

293302
val name = segments[2]
294303

295304
if (name.contains("/")) {
305+
val namespace = (
306+
namingConfiguration.baseNamespace +
307+
(providerNameOverride ?: namingConfiguration.providerName) +
308+
moduleName
309+
)
310+
.filterNotNull()
296311
throw InvalidPulumiName(name, namespace)
297312
}
298313

299-
return PulumiName(namingConfiguration.providerName, namespace, name, isProvider = isProvider)
314+
return PulumiName(
315+
namingConfiguration.providerName,
316+
providerNameOverride,
317+
namingConfiguration.baseNamespace,
318+
moduleName,
319+
name,
320+
isProvider,
321+
)
300322
}
301323
}
302324
}

src/test/kotlin/org/virtuslab/pulumikotlin/TestUtils.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ internal fun <T> extractOutputValue(output: Output<T>?): T? {
1515
return value
1616
}
1717

18-
internal fun <T> concat(iterableOfIterables: Iterable<Iterable<T>>?): List<T> =
19-
iterableOfIterables?.flatten().orEmpty()
20-
21-
internal fun <T> concat(vararg iterables: Iterable<T>?): List<T> =
22-
concat(iterables.filterNotNull().asIterable())
23-
24-
internal fun namingConfigurationWithSlashInModuleFormat(providerName: String) =
25-
PulumiNamingConfiguration.create(providerName = providerName, moduleFormat = "(.*)(?:/[^/]*)")
18+
internal fun namingConfigurationWithSlashInModuleFormat(
19+
providerName: String,
20+
packageOverrides: Map<String, String> = emptyMap(),
21+
) =
22+
PulumiNamingConfiguration.create(
23+
providerName = providerName,
24+
moduleFormat = "(.*)(?:/[^/]*)",
25+
packageOverrides = packageOverrides,
26+
)
2627

2728
private fun messagePrefix(message: String?) = if (message == null) "" else "$message. "
2829

0 commit comments

Comments
 (0)