Skip to content

Commit 83ea6d4

Browse files
Merge pull request #108 from Adyen/bugfix/java-generation-failures
fix(java): fix service-specific generation and harden validation tests
2 parents 751887f + 6339d00 commit 83ea6d4

File tree

1 file changed

+38
-37
lines changed

1 file changed

+38
-37
lines changed

java/build.gradle.kts

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,37 @@ sdkAutomation.generator.set("java")
1212
val services = sdkAutomation.services.get()
1313
val serviceNaming = sdkAutomation.serviceNaming.get()
1414

15-
tasks.withType(GenerateTask::class).configureEach {
16-
val serviceId = project.name.lowercase()
17-
val modelNamespace = "com.adyen.model.${serviceId}"
18-
19-
templateDir.set("$projectDir/repo/templates-v7")
20-
library.set("jersey3")
21-
modelPackage.set(modelNamespace.replace('/', '.'))
22-
apiPackage.set("com.adyen.service.${serviceId}")
23-
apiNameSuffix.set("Api")
24-
additionalProperties.putAll(mapOf(
25-
"dateLibrary" to "java8",
26-
"openApiNullable" to "false",
27-
"enumPropertyNaming" to "legacy",
28-
"javaxPackage" to "jakarta",
29-
"containerDefaultToNull" to "true"
30-
))
31-
32-
if (serviceId.endsWith("webhooks")) {
33-
// for webhooks only apply extra config.yaml (to generate WebhookHandler)
34-
configFile.set("$projectDir/config.yaml")
35-
} else {
36-
// for APIs only add custom code to handle nullable properties
37-
additionalProperties.put("handleNullableProperties", true)
38-
}
39-
}
40-
4115
// Deployment: copy and rename models/services
4216
services.forEach { svc ->
4317
val serviceName = serviceNaming[svc.id]!!
4418
val serviceId = serviceName.lowercase()
4519

20+
// Configuration
21+
tasks.named<GenerateTask>("generate${svc.name}") {
22+
val modelNamespace = "com.adyen.model.${serviceId}"
23+
24+
templateDir.set("$projectDir/repo/templates-v7")
25+
library.set("jersey3")
26+
modelPackage.set(modelNamespace.replace('/', '.'))
27+
apiPackage.set("com.adyen.service.${serviceId}")
28+
apiNameSuffix.set("Api")
29+
additionalProperties.putAll(mapOf(
30+
"dateLibrary" to "java8",
31+
"openApiNullable" to "false",
32+
"enumPropertyNaming" to "legacy",
33+
"javaxPackage" to "jakarta",
34+
"containerDefaultToNull" to "true"
35+
))
36+
37+
if (serviceId.endsWith("webhooks")) {
38+
// for webhooks only apply extra config.yaml (to generate WebhookHandler)
39+
configFile.set("$projectDir/config.yaml")
40+
} else {
41+
// for APIs only add custom code to handle nullable properties
42+
additionalProperties.put("handleNullableProperties", true)
43+
}
44+
}
45+
4646
// words replacement to enforce naming conventions (after code generation)
4747
val replaceReservedWords = { directory: Any ->
4848
fileTree(directory).matching { include("**/*.java") }.forEach { file ->
@@ -153,29 +153,30 @@ services.forEach { svc ->
153153
// Test binlookup generation
154154
tasks.named("binlookup") {
155155
doLast {
156-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/binlookup/Amount.java").exists())
157-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/BinLookupApi.java").exists())
156+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/binlookup/Amount.java").readText().isNotEmpty())
157+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/binlookup/BinLookupApi.java").readText().isNotEmpty())
158158
// verify DefaultApi class no longer exists (it has been renamed to BinLookupApi)
159159
assert(!file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/binlookup/DefaultApi.java").exists())
160160
}
161161
}
162162
// Test checkout generation
163163
tasks.named("checkout") {
164164
doLast {
165-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/checkout/Amount.java").exists())
166-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/checkout/PaymentsApi.java").exists())
165+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/checkout/Amount.java").readText().isNotEmpty())
166+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/checkout/PaymentsApi.java").readText().isNotEmpty())
167167
}
168168
}
169169
// Test acswebhooks generation
170170
tasks.named("acswebhooks") {
171171
doLast {
172-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/acswebhooks/Amount.java").exists())
172+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/acswebhooks/Amount.java").readText().isNotEmpty())
173173
// verify no service package is created for a webhook
174174
assert(!file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/acswebhooks").exists())
175175
// verify no API class is created for a webhook
176176
assert(!file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/AcsWebhooksApi.java").exists())
177177
// verify Webhook Handler is created
178-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/acswebhooks/AcsWebhooksHandler.java").exists())
178+
val fileContent = file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/acswebhooks/AcsWebhooksHandler.java").readText()
179+
assert(fileContent.contains("getAuthenticationNotificationRequest")) { "'getAuthenticationNotificationRequest' method not found in AcsWebhooksHandler.java" }
179180
}
180181
}
181182

@@ -194,7 +195,7 @@ tasks.named("relayedauthorizationwebhooks") {
194195
// verify Webhook Handler is created
195196
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/relayedauthorizationwebhooks/RelayedAuthorizationWebhooksHandler.java").exists())
196197
// verify model is created
197-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/relayedauthorizationwebhooks/RelayedAuthorisationRequest.java").exists())
198+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/relayedauthorizationwebhooks/RelayedAuthorisationRequest.java").readText().isNotEmpty())
198199

199200
val fileContent = file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/relayedauthorizationwebhooks/RelayedAuthorizationWebhooksHandler.java").readText()
200201
assert(fileContent.contains("getRelayedAuthorisationRequest")) { "'getRelayedAuthorisationRequest' method not found in RelayedAuthorizationWebhooksHandler.java" }
@@ -203,9 +204,9 @@ tasks.named("relayedauthorizationwebhooks") {
203204

204205
tasks.named("capital") {
205206
doLast {
206-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/capital/Amount.java").exists())
207-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantsApi.java").exists())
208-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantOffersApi.java").exists())
209-
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantAccountsApi.java").exists())
207+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/model/capital/Amount.java").readText().isNotEmpty())
208+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantsApi.java").readText().isNotEmpty())
209+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantOffersApi.java").readText().isNotEmpty())
210+
assert(file("${layout.projectDirectory}/repo/src/main/java/com/adyen/service/capital/GrantAccountsApi.java").readText().isNotEmpty())
210211
}
211212
}

0 commit comments

Comments
 (0)