Skip to content

Commit 0a11a94

Browse files
authored
Merge pull request #11231 from swagger-api/java11-sample-tests
Java11 sample tests
2 parents 157d3d3 + 8feaa16 commit 0a11a94

File tree

27 files changed

+2227
-5
lines changed

27 files changed

+2227
-5
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
name: Test Framework V2 Java 11 Feign
2+
3+
on:
4+
# execute on demand
5+
workflow_dispatch:
6+
branches: ['master']
7+
8+
jobs:
9+
10+
# builds codegen cli and uploads its artifact
11+
build-codegen:
12+
13+
runs-on: ubuntu-latest
14+
15+
strategy:
16+
matrix:
17+
java: [ 8 ]
18+
19+
steps:
20+
- uses: actions/checkout@v2
21+
- uses: actions/setup-java@v1
22+
with:
23+
java-version: ${{ matrix.java }}
24+
- name: build codegen
25+
run: |
26+
mkdir codegen-cli
27+
echo "BUILDING Codegen"
28+
mvn -version
29+
mvn -q -B package -DskipTests -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=3
30+
cp modules/swagger-codegen-cli/target/swagger-codegen-cli.jar codegen-cli
31+
- name: upload codegen cli
32+
uses: actions/upload-artifact@v2
33+
with:
34+
name: codegen-cli
35+
path: codegen-cli
36+
- name: upload python test cfg files
37+
uses: actions/upload-artifact@v2
38+
with:
39+
name: java-feign-custom-test-files
40+
path: samples/custom-tests/java/v2/feign
41+
42+
generate:
43+
44+
needs: build-codegen
45+
46+
runs-on: ubuntu-latest
47+
48+
strategy:
49+
matrix:
50+
java: [ 8 ]
51+
52+
53+
outputs:
54+
generate_outcome: ${{ steps.outcome.outputs.generate_outcome }}
55+
56+
steps:
57+
- uses: actions/checkout@v2
58+
- uses: actions/setup-java@v1
59+
with:
60+
java-version: ${{ matrix.java }}
61+
- name: Download codegen cli
62+
uses: actions/download-artifact@v2
63+
with:
64+
name: codegen-cli
65+
- name: generate
66+
id: generate
67+
continue-on-error: true
68+
uses: ./.github/actions/generate
69+
with:
70+
language: "java"
71+
job-name: ${{ env.JOB_NAME }}
72+
spec-url: "https://petstore.swagger.io/v2/swagger.json"
73+
options: " --library feign --additional-properties java11=true,wiremock=true"
74+
- id: outcome
75+
run: |
76+
echo "::set-output name=generate_outcome::${{ steps.generate.outcome }}"
77+
echo ${{ steps.generate.outcome }} > generate_outcome_${{ env.JOB_NAME }}
78+
- name: upload generate outcome
79+
uses: actions/upload-artifact@v2
80+
with:
81+
name: ${{ env.JOB_NAME }}generate_outcome
82+
path: generate_outcome_${{ env.JOB_NAME }}
83+
- name: upload generate logs
84+
uses: actions/upload-artifact@v2
85+
with:
86+
name: ${{ env.JOB_NAME }}generate_logs
87+
path: ${{ steps.generate.outputs.logs }}
88+
- name: upload generated code
89+
if: contains(steps.generate.outcome, 'success')
90+
uses: actions/upload-artifact@v2
91+
with:
92+
name: ${{ env.JOB_NAME }}generated
93+
path: ${{ steps.generate.outputs.path }}
94+
env:
95+
JOB_NAME: "java11-feign-v2-sample"
96+
97+
build:
98+
99+
needs: generate
100+
if: contains(needs.generate.outputs.generate_outcome, 'success')
101+
runs-on: ubuntu-latest
102+
103+
strategy:
104+
###############################################
105+
##### DYNAMIC: Dependent on build environment
106+
###############################################
107+
matrix:
108+
java-version: [1.8]
109+
###############################################
110+
##### END DYNAMIC: Dependent on build environment
111+
###############################################
112+
steps:
113+
- uses: actions/checkout@v2
114+
- name: Download artifacts
115+
uses: actions/download-artifact@v2
116+
with:
117+
name: ${{ env.JOB_NAME }}generated
118+
path: generated/${{ env.JOB_NAME }}
119+
- name: Download logs
120+
uses: actions/download-artifact@v2
121+
with:
122+
name: ${{ env.JOB_NAME }}generate_logs
123+
###############################################
124+
##### DYNAMIC: Dependent on build environment
125+
###############################################
126+
- name: Set up JDK 11
127+
uses: actions/setup-java@v1
128+
with:
129+
java-version: ${{ matrix.java-version }}
130+
###############################################
131+
##### END DYNAMIC: Dependent on build environment
132+
###############################################
133+
- name: Download Java Feign Test Files
134+
uses: actions/download-artifact@v2
135+
with:
136+
name: java-feign-custom-test-files
137+
path: java-feign-custom-test-files
138+
- name: setup test files
139+
id: test-files
140+
run: |
141+
echo "removing default test files (with not cases)"
142+
rm generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/PetApiTest.java
143+
rm generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/StoreApiTest.java
144+
rm generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/UserApiTest.java
145+
146+
echo "copying custom test files"
147+
cp java-feign-custom-test-files/PetApiTest.java generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/
148+
cp java-feign-custom-test-files/StoreApiTest.java generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/
149+
cp java-feign-custom-test-files/UserApiTest.java generated/${{ env.JOB_NAME }}/src/test/java/io/swagger/client/api/
150+
151+
- name: build
152+
id: build
153+
uses: ./.github/actions/build
154+
continue-on-error: true
155+
with:
156+
path: generated/${{ env.JOB_NAME }}
157+
job-name: ${{ env.JOB_NAME }}
158+
build-commands: "mvn clean package -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.count=3"
159+
- id: outcome
160+
run: |
161+
echo "::set-output name=build_outcome::${{ steps.build.outcome }}"
162+
echo ${{ steps.build.outcome }} > ${{ env.JOB_NAME }}build_outcome
163+
- name: upload build outcome
164+
uses: actions/upload-artifact@v2
165+
with:
166+
name: ${{ env.JOB_NAME }}build_outcome
167+
path: ${{ env.JOB_NAME }}build_outcome
168+
- name: upload logs
169+
uses: actions/upload-artifact@v2
170+
with:
171+
name: ${{ env.JOB_NAME }}logs
172+
path: ${{ steps.build.outputs.logs }}
173+
env:
174+
JOB_NAME: "java11-feign-v2-sample"

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.swagger.codegen.languages.features.IgnoreUnknownJacksonFeatures;
1111
import io.swagger.codegen.languages.features.PerformBeanValidationFeatures;
1212

13+
import io.swagger.codegen.mustache.LowercaseLambda;
1314
import org.apache.commons.lang3.BooleanUtils;
1415
import org.apache.commons.lang3.StringUtils;
1516
import org.slf4j.Logger;
@@ -43,6 +44,8 @@ public class JavaClientCodegen extends AbstractJavaCodegen
4344
public static final String RETROFIT_2 = "retrofit2";
4445
public static final String REST_ASSURED = "rest-assured";
4546

47+
public static final String WIREMOCK_OPTION = "wiremock";
48+
4649
protected String gradleWrapperPackage = "gradle.wrapper";
4750
protected boolean useRxJava = false;
4851
protected boolean useRxJava2 = false;
@@ -76,6 +79,8 @@ public JavaClientCodegen() {
7679
cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Send gzip-encoded requests"));
7780
cliOptions.add(CliOption.newBoolean(USE_RUNTIME_EXCEPTION, "Use RuntimeException instead of Exception"));
7881

82+
cliOptions.add(CliOption.newBoolean(WIREMOCK_OPTION, "Use wiremock to generate endpoint calls to mock on generated tests."));
83+
7984
supportedLibraries.put("jersey1", "HTTP client: Jersey client 1.19.4. JSON processing: Jackson 2.11.4. Enable Java6 support using '-DsupportJava6=true'. Enable gzip request encoding using '-DuseGzipFeature=true'.");
8085
supportedLibraries.put("feign", "HTTP client: OpenFeign 9.4.0. JSON processing: Jackson 2.11.4");
8186
supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.29.1. JSON processing: Jackson 2.11.4");
@@ -114,6 +119,10 @@ public String getHelp() {
114119

115120
@Override
116121
public void processOpts() {
122+
if (RETROFIT_1.equalsIgnoreCase(library)) {
123+
dateLibrary = "joda";
124+
}
125+
117126
super.processOpts();
118127

119128
if (additionalProperties.containsKey(USE_RX_JAVA) && additionalProperties.containsKey(USE_RX_JAVA2)) {
@@ -159,6 +168,13 @@ public void processOpts() {
159168
this.setUseRuntimeException(convertPropertyToBooleanAndWriteBack(USE_RUNTIME_EXCEPTION));
160169
}
161170

171+
if (additionalProperties.containsKey(WIREMOCK_OPTION)) {
172+
final boolean useWireMock = additionalProperties.get(WIREMOCK_OPTION) != null && Boolean.parseBoolean(additionalProperties.get(WIREMOCK_OPTION).toString());
173+
additionalProperties.put(WIREMOCK_OPTION, useWireMock);
174+
}
175+
176+
additionalProperties.put("lowercase", new LowercaseLambda());
177+
162178
final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/");
163179
final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/");
164180
final String apiFolder = (sourceFolder + '/' + apiPackage).replace(".", "/");

modules/swagger-codegen/src/main/resources/Java/api_test.mustache

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,75 @@
22

33
package {{package}};
44

5-
import {{invokerPackage}}.ApiException;
65
{{#imports}}import {{import}};
76
{{/imports}}
87
import org.junit.Test;
98
import org.junit.Ignore;
109

10+
{{#wiremock}}
11+
import com.github.tomakehurst.wiremock.WireMockServer;
12+
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
13+
import java.net.HttpURLConnection;
14+
import org.junit.AfterClass;
15+
import org.junit.BeforeClass;
16+
{{/wiremock}}
17+
1118
{{^fullJavaUtil}}
1219
import java.util.ArrayList;
1320
import java.util.HashMap;
1421
import java.util.List;
1522
import java.util.Map;
1623
{{/fullJavaUtil}}
1724

25+
{{#wiremock}}
26+
import static com.github.tomakehurst.wiremock.client.WireMock.*;
27+
{{/wiremock}}
1828
/**
1929
* API tests for {{classname}}
2030
*/
2131
@Ignore
2232
public class {{classname}}Test {
2333
2434
private final {{classname}} api = new {{classname}}();
35+
{{#wiremock}}
36+
private static WireMockServer wireMockServer;
37+
38+
public {{classname}}Test() {
39+
api.getApiClient().setBasePath("http://localhost:" + wireMockServer.port());
40+
}
41+
42+
@BeforeClass
43+
public static void setUp() {
44+
wireMockServer = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
45+
wireMockServer.start();
46+
47+
configureFor(wireMockServer.port());
48+
{{#operations}}
49+
{{#operation}}
50+
stubFor({{#lowercase}}{{httpMethod}}{{/lowercase}}(urlPathMatching("{{{path}}}"))
51+
.willReturn(aResponse()
52+
.withStatus(HttpURLConnection.HTTP_OK)));
53+
{{/operation}}
54+
{{/operations}}
55+
}
56+
57+
@AfterClass
58+
public static void tearDown() {
59+
wireMockServer.stop();
60+
}
61+
{{/wiremock}}
2562

2663
{{#operations}}{{#operation}}
2764
/**
2865
* {{summary}}
2966
*
3067
* {{notes}}
3168
*
32-
* @throws ApiException
69+
* @throws Exception
3370
* if the Api call fails
3471
*/
3572
@Test
36-
public void {{operationId}}Test() throws ApiException {
73+
public void {{operationId}}Test() throws Exception {
3774
{{#allParams}}
3875
{{{dataType}}} {{paramName}} = null;
3976
{{/allParams}}

modules/swagger-codegen/src/main/resources/Java/libraries/feign/api_test.mustache

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,60 @@ import {{invokerPackage}}.ApiClient;
66
import org.junit.Before;
77
import org.junit.Test;
88

9+
{{#wiremock}}
10+
import com.github.tomakehurst.wiremock.WireMockServer;
11+
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
12+
import java.net.HttpURLConnection;
13+
import org.junit.AfterClass;
14+
{{/wiremock}}
15+
916
{{^fullJavaUtil}}
1017
import java.util.ArrayList;
1118
import java.util.HashMap;
1219
import java.util.List;
1320
import java.util.Map;
1421
{{/fullJavaUtil}}
1522

23+
{{#wiremock}}
24+
import static com.github.tomakehurst.wiremock.client.WireMock.*;
25+
{{/wiremock}}
26+
1627
/**
1728
* API tests for {{classname}}
1829
*/
1930
public class {{classname}}Test {
2031
2132
private {{classname}} api;
2233

34+
{{#wiremock}}
35+
private static WireMockServer wireMockServer;
36+
37+
@Before
38+
public void setup() {
39+
wireMockServer = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
40+
wireMockServer.start();
41+
42+
configureFor(wireMockServer.port());
43+
api = new ApiClient().setBasePath("http://localhost:" + wireMockServer.port()).buildClient({{classname}}.class);
44+
{{#operations}}{{#operation}}
45+
stubFor({{#lowercase}}{{httpMethod}}{{/lowercase}}(urlPathMatching("{{{path}}}"))
46+
.willReturn(aResponse()
47+
.withStatus(HttpURLConnection.HTTP_OK)));
48+
{{/operation}}{{/operations}}
49+
}
50+
51+
@AfterClass
52+
public static void tearDown() {
53+
wireMockServer.stop();
54+
}
55+
{{/wiremock}}
56+
{{^wiremock}}
57+
2358
@Before
2459
public void setup() {
2560
api = new ApiClient().buildClient({{classname}}.class);
2661
}
62+
{{/wiremock}}
2763

2864
{{#operations}}{{#operation}}
2965
/**

modules/swagger-codegen/src/main/resources/Java/libraries/feign/pom.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,14 @@
304304
<version>1.7.1</version>
305305
<scope>test</scope>
306306
</dependency>
307+
{{#wiremock}}
308+
<dependency>
309+
<groupId>com.github.tomakehurst</groupId>
310+
<artifactId>wiremock</artifactId>
311+
<version>2.27.2</version>
312+
<scope>test</scope>
313+
</dependency>
314+
{{/wiremock}}
307315
</dependencies>
308316
<properties>
309317
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/pom.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,14 @@
315315
<version>${junit-version}</version>
316316
<scope>test</scope>
317317
</dependency>
318+
{{#wiremock}}
319+
<dependency>
320+
<groupId>com.github.tomakehurst</groupId>
321+
<artifactId>wiremock</artifactId>
322+
<version>2.27.2</version>
323+
<scope>test</scope>
324+
</dependency>
325+
{{/wiremock}}
318326
</dependencies>
319327
<properties>
320328
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

0 commit comments

Comments
 (0)