Skip to content

Commit 2da8545

Browse files
feat(build): add apiGroup to config (#42)
1 parent 66bf124 commit 2da8545

File tree

3 files changed

+104
-2
lines changed

3 files changed

+104
-2
lines changed

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/SwaggerGeneratorConvention.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.gradle.api.plugins.JavaPluginExtension;
2222
import org.hidetake.gradle.swagger.generator.SwaggerGeneratorPlugin;
2323

24+
import java.nio.file.Path;
2425
import java.util.Map;
2526

2627
import static org.eclipse.edc.plugins.edcbuild.conventions.ConventionFunctions.requireExtension;
@@ -30,6 +31,9 @@
3031
* Congfigures the Swagger Generator to create openapi yaml file per project
3132
*/
3233
class SwaggerGeneratorConvention implements EdcConvention {
34+
35+
private static final String DEFAULT_API_GROUP = "";
36+
3337
@Override
3438
public void apply(Project target) {
3539
// apply root script plugin
@@ -46,10 +50,15 @@ public void apply(Project target) {
4650

4751
var javaExt = requireExtension(target, JavaPluginExtension.class);
4852
var swaggerExt = requireExtension(target, BuildExtension.class).getSwagger();
49-
var outputPath = defaultOutputDirectory(target);
53+
var fallbackOutputDir = defaultOutputDirectory(target);
5054

5155
var outputFileName = swaggerExt.getOutputFilename().getOrElse(target.getName());
52-
var outputDir = swaggerExt.getOutputDirectory().getOrElse(outputPath.toFile());
56+
57+
var apiGroup = swaggerExt.getApiGroup().getOrElse(DEFAULT_API_GROUP);
58+
var outputDir = Path.of(swaggerExt.getOutputDirectory().getOrElse(fallbackOutputDir.toFile()).toURI())
59+
.resolve(apiGroup)
60+
.toFile();
61+
5362
var resourcePkgs = swaggerExt.getResourcePackages(); // already provides the default
5463

5564
target.getTasks().withType(ResolveTask.class, task -> {

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/extensions/SwaggerGeneratorExtension.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,7 @@ public String getMergedFileExtension() {
7777
public void setMergedFileExtension(String mergedFileExtension) {
7878
this.mergedFileExtension = mergedFileExtension;
7979
}
80+
81+
public abstract Property<String> getApiGroup();
82+
8083
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
* Copyright (c) 2022 Microsoft Corporation
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Apache License, Version 2.0 which is available at
6+
* https://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* SPDX-License-Identifier: Apache-2.0
9+
*
10+
* Contributors:
11+
* Microsoft Corporation - initial API and implementation
12+
*
13+
*/
14+
15+
package org.eclipse.edc.plugins.edcbuild.conventions;
16+
17+
import io.swagger.v3.plugins.gradle.tasks.ResolveTask;
18+
import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension;
19+
import org.gradle.api.Project;
20+
import org.gradle.api.plugins.JavaPlugin;
21+
import org.gradle.testfixtures.ProjectBuilder;
22+
import org.hidetake.gradle.swagger.generator.SwaggerGeneratorPlugin;
23+
import org.junit.jupiter.api.BeforeEach;
24+
import org.junit.jupiter.api.Test;
25+
26+
import java.io.File;
27+
28+
import static org.assertj.core.api.Assertions.assertThat;
29+
30+
class SwaggerGeneratorConventionTest {
31+
32+
33+
private static final String PROJECT_NAME = "testproject";
34+
private Project project;
35+
36+
@BeforeEach
37+
void setUp() {
38+
project = ProjectBuilder.builder().withName(PROJECT_NAME).build();
39+
project.getPluginManager().apply("io.swagger.core.v3.swagger-gradle-plugin");
40+
project.getPluginManager().apply(JavaPlugin.class);
41+
project.getExtensions().create("edcBuild", BuildExtension.class, project.getObjects());
42+
}
43+
44+
@Test
45+
void apply_whenApiGroupNotSpecified_shouldUseDefault() {
46+
var convention = new SwaggerGeneratorConvention();
47+
convention.apply(project);
48+
49+
assertThat(project.getPlugins().findPlugin(SwaggerGeneratorPlugin.class)).isNotNull();
50+
51+
var resolveTask = (ResolveTask) project.getTasks().getByName("resolve");
52+
53+
assertThat(resolveTask.getOutputDir().getPath()).endsWith("/resources/openapi/yaml");
54+
assertThat(resolveTask.getOutputFileName()).isEqualTo(PROJECT_NAME);
55+
assertThat(resolveTask.getOutputFormat()).isEqualTo(ResolveTask.Format.YAML);
56+
}
57+
58+
@Test
59+
void apply_whenApiGroupSpecified_shouldAppend() {
60+
var swagger = ConventionFunctions.requireExtension(project, BuildExtension.class).getSwagger();
61+
swagger.getApiGroup().set("test-api");
62+
var convention = new SwaggerGeneratorConvention();
63+
convention.apply(project);
64+
65+
assertThat(project.getPlugins().findPlugin(SwaggerGeneratorPlugin.class)).isNotNull();
66+
67+
var resolveTask = (ResolveTask) project.getTasks().getByName("resolve");
68+
69+
assertThat(resolveTask.getOutputDir().getPath()).endsWith("/resources/openapi/yaml/test-api");
70+
assertThat(resolveTask.getOutputFileName()).isEqualTo(PROJECT_NAME);
71+
assertThat(resolveTask.getOutputFormat()).isEqualTo(ResolveTask.Format.YAML);
72+
}
73+
74+
@Test
75+
void apply_whenOutputDirSet_shouldAppend() {
76+
var swagger = ConventionFunctions.requireExtension(project, BuildExtension.class).getSwagger();
77+
swagger.getApiGroup().set("test-api");
78+
swagger.getOutputDirectory().set(new File("some/funny/path"));
79+
var convention = new SwaggerGeneratorConvention();
80+
convention.apply(project);
81+
82+
assertThat(project.getPlugins().findPlugin(SwaggerGeneratorPlugin.class)).isNotNull();
83+
84+
var resolveTask = (ResolveTask) project.getTasks().getByName("resolve");
85+
86+
assertThat(resolveTask.getOutputDir().getPath()).endsWith("/some/funny/path/test-api");
87+
assertThat(resolveTask.getOutputFileName()).isEqualTo(PROJECT_NAME);
88+
assertThat(resolveTask.getOutputFormat()).isEqualTo(ResolveTask.Format.YAML);
89+
}
90+
}

0 commit comments

Comments
 (0)