1
1
package io .swagger .codegen .v3 .generators .java ;
2
2
3
+ import com .fasterxml .jackson .annotation .JsonSubTypes ;
3
4
import io .swagger .codegen .v3 .generators .GeneratorRunner ;
4
5
import io .swagger .codegen .v3 .service .GenerationRequest ;
6
+ import org .apache .commons .io .FileUtils ;
5
7
import org .testng .Assert ;
6
8
import org .testng .annotations .Test ;
7
9
8
10
import java .io .File ;
11
+ import java .nio .file .Files ;
12
+ import java .nio .file .Paths ;
9
13
import java .util .List ;
14
+ import java .util .regex .Matcher ;
15
+ import java .util .regex .Pattern ;
10
16
11
17
public class GeneratorResultTestJava {
12
18
@@ -29,11 +35,109 @@ public void testJavaGenerator_OneOf() throws Exception {
29
35
v2Spec ,
30
36
yaml ,
31
37
flattenInlineComposedSchema ,
32
- outFolder );
38
+ outFolder , options -> {} );
33
39
34
40
Assert .assertFalse (files .isEmpty ());
35
41
for (File f : files ) {
36
42
// TODO test stuff
37
43
}
38
44
}
45
+
46
+ @ Test
47
+ public void interfaceWithCustomDiscriminator () throws Exception {
48
+
49
+ String name = "java" ;
50
+ String specPath = "3_0_0/sample_interface_with_discriminator.json" ;
51
+ GenerationRequest .CodegenVersion codegenVersion = GenerationRequest .CodegenVersion .V3 ;
52
+ boolean v2Spec = false ; // 3.0 spec
53
+ boolean yaml = false ;
54
+ boolean flattenInlineComposedSchema = true ;
55
+ String outFolder = null ; // temporary folder
56
+
57
+ File tmpFolder = GeneratorRunner .getTmpFolder ();
58
+ Assert .assertNotNull (tmpFolder );
59
+
60
+ List <File > files = GeneratorRunner .runGenerator (
61
+ name ,
62
+ specPath ,
63
+ codegenVersion ,
64
+ v2Spec ,
65
+ yaml ,
66
+ flattenInlineComposedSchema ,
67
+ tmpFolder .getAbsolutePath (),
68
+ options -> options .setLibrary ("resttemplate" ));
69
+
70
+
71
+ File interfaceFile = files .stream ().filter (f -> f .getName ().equals ("Item.java" )).findAny ().orElseThrow (() -> new RuntimeException ("No interface generated" ));
72
+
73
+ String interfaceContent = new String (Files .readAllBytes (Paths .get (interfaceFile .toURI ())));
74
+
75
+ Pattern typeInfoPattern = Pattern .compile ("(.*)(@JsonTypeInfo\\ ()(.*)(}\\ ))(.*)" , Pattern .DOTALL );
76
+
77
+ Matcher matcher = typeInfoPattern .matcher (interfaceContent );
78
+
79
+ Assert .assertTrue (matcher .matches (),
80
+ "No JsonTypeInfo generated into the interface file" );
81
+
82
+ String generatedTypeInfoLines = matcher .group (2 )+matcher .group (3 )+matcher .group (4 );
83
+
84
+ Assert .assertEquals ( generatedTypeInfoLines , "@JsonTypeInfo(" + System .lineSeparator () +
85
+ " use = JsonTypeInfo.Id.NAME," + System .lineSeparator () +
86
+ " include = JsonTypeInfo.As.PROPERTY," + System .lineSeparator () +
87
+ " property = \" aCustomProperty\" )" + System .lineSeparator () +
88
+ "@JsonSubTypes({" + System .lineSeparator () +
89
+ " @JsonSubTypes.Type(value = ClassA.class, name = \" typeA\" )," + System .lineSeparator () +
90
+ " @JsonSubTypes.Type(value = ClassB.class, name = \" typeB\" )," + System .lineSeparator () +
91
+ " @JsonSubTypes.Type(value = ClassC.class, name = \" typeC\" )" + System .lineSeparator () +
92
+ "})" , "Wrong json subtypes generated" );
93
+
94
+ FileUtils .deleteDirectory (new File (tmpFolder .getAbsolutePath ()));
95
+ }
96
+
97
+ @ Test
98
+ public void javaCustomDiscriminator () throws Exception {
99
+
100
+ String name = "java" ;
101
+ String specPath = "3_0_0/javaDiscriminatorExample.yaml" ;
102
+ GenerationRequest .CodegenVersion codegenVersion = GenerationRequest .CodegenVersion .V3 ;
103
+ boolean v2Spec = false ; // 3.0 spec
104
+ boolean yaml = true ;
105
+ boolean flattenInlineComposedSchema = true ;
106
+ String outFolder = null ; // temporary folder
107
+
108
+ File tmpFolder = GeneratorRunner .getTmpFolder ();
109
+ Assert .assertNotNull (tmpFolder );
110
+
111
+ List <File > files = GeneratorRunner .runGenerator (
112
+ name ,
113
+ specPath ,
114
+ codegenVersion ,
115
+ v2Spec ,
116
+ yaml ,
117
+ flattenInlineComposedSchema ,
118
+ tmpFolder .getAbsolutePath (),
119
+ options -> options .setLibrary ("resttemplate" ));
120
+
121
+
122
+ File interfaceFile = files .stream ().filter (f -> f .getName ().equals ("ResultForSubTypeDTO.java" )).findAny ().orElseThrow (() -> new RuntimeException ("No class generated" ));
123
+
124
+ String interfaceContent = new String (Files .readAllBytes (Paths .get (interfaceFile .toURI ())));
125
+
126
+ Pattern typeInfoPattern = Pattern .compile ("(.*)(@JsonTypeInfo\\ ()(.*)(}\\ ))(.*)" , Pattern .DOTALL );
127
+
128
+ Matcher matcher = typeInfoPattern .matcher (interfaceContent );
129
+
130
+ Assert .assertTrue (matcher .matches (),
131
+ "No JsonTypeInfo generated into the interface file" );
132
+
133
+ String generatedTypeInfoLines = matcher .group (2 )+matcher .group (3 )+matcher .group (4 );
134
+
135
+ Assert .assertEquals ( generatedTypeInfoLines , "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = \" type\" , visible = true )" + System .lineSeparator () +
136
+ "@JsonSubTypes({" + System .lineSeparator () +
137
+ " @JsonSubTypes.Type(value = SubTypeBResultDTO.class, name = \" WeirdlyNamedSubTypeB\" )," + System .lineSeparator () +
138
+ " @JsonSubTypes.Type(value = SubTypeAResultDTO.class, name = \" SubTypeA\" )," + System .lineSeparator () +
139
+ "})" );
140
+
141
+ FileUtils .deleteDirectory (new File (tmpFolder .getAbsolutePath ()));
142
+ }
39
143
}
0 commit comments