Skip to content

Commit e56bfe4

Browse files
sulliswing328
authored andcommitted
[scala][client] add Scala code generation test (#3859)
* [scala][client] add Scala reserved words test * fix filesystem path in [ScalaAkkaClientCodegenTest] * add additional reserved words in scala_reserved_words.yaml * ScalaAkkaClientCodegenTest: set mainPackage * scala_reserved_words.yaml: declare 'required' fields * rename test method * tweak test description
1 parent dc2907a commit e56bfe4

File tree

2 files changed

+139
-4
lines changed

2 files changed

+139
-4
lines changed

modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,17 @@
2121
import io.swagger.v3.oas.models.OpenAPI;
2222
import io.swagger.v3.oas.models.media.*;
2323
import io.swagger.v3.parser.util.SchemaTypeUtil;
24-
import org.openapitools.codegen.CodegenModel;
25-
import org.openapitools.codegen.CodegenProperty;
26-
import org.openapitools.codegen.DefaultCodegen;
27-
import org.openapitools.codegen.TestUtils;
24+
import org.openapitools.codegen.*;
25+
import org.openapitools.codegen.config.CodegenConfigurator;
2826
import org.openapitools.codegen.languages.ScalaAkkaClientCodegen;
2927
import org.testng.Assert;
3028
import org.testng.annotations.Test;
3129

30+
import java.io.File;
31+
import java.nio.file.Files;
32+
import java.util.HashMap;
33+
import java.util.Map;
34+
3235
public class ScalaAkkaClientCodegenTest {
3336

3437
private ScalaAkkaClientCodegen scalaAkkaClientCodegen;
@@ -276,4 +279,52 @@ public void mapModelTest() {
276279
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Map", "Children")).size(), 1);
277280
}
278281

282+
@Test(description = "validate codegen output")
283+
public void codeGenerationTest() throws Exception {
284+
Map<String, Object> properties = new HashMap<>();
285+
properties.put("mainPackage", "hello.world");
286+
287+
File output = Files.createTempDirectory("test").toFile();
288+
output.deleteOnExit();
289+
290+
final DefaultCodegen codegen = new ScalaAkkaClientCodegen();
291+
292+
final CodegenConfigurator configurator = new CodegenConfigurator()
293+
.setGeneratorName(codegen.getName())
294+
.setAdditionalProperties(properties)
295+
.setInputSpec("src/test/resources/3_0/scala_reserved_words.yaml")
296+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
297+
298+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
299+
MockDefaultGenerator generator = new MockDefaultGenerator();
300+
generator.opts(clientOptInput).generate();
301+
302+
Map<String, String> generatedFiles = generator.getFiles();
303+
Assert.assertEquals(generatedFiles.size(), 13);
304+
305+
final String someObjFilename = new File(output, "src/main/scala/hello/world/model/SomeObj.scala").getAbsolutePath().replace("\\", "/");
306+
final String someObjFileContents = generatedFiles.get(someObjFilename);
307+
Assert.assertTrue(someObjFileContents.contains("package hello.world.model"));
308+
Assert.assertTrue(someObjFileContents.contains("case class SomeObj"));
309+
Assert.assertTrue(someObjFileContents.contains("id: Long,"));
310+
Assert.assertTrue(someObjFileContents.contains("name: Option[String] = None,"));
311+
Assert.assertTrue(someObjFileContents.contains("`val`: Option[String] = None,"));
312+
Assert.assertTrue(someObjFileContents.contains("`var`: Option[String] = None,"));
313+
Assert.assertTrue(someObjFileContents.contains("`class`: Option[String] = None,"));
314+
Assert.assertTrue(someObjFileContents.contains("`trait`: Option[String] = None,"));
315+
Assert.assertTrue(someObjFileContents.contains("`object`: Option[String] = None,"));
316+
Assert.assertTrue(someObjFileContents.contains("`try`: String,"));
317+
Assert.assertTrue(someObjFileContents.contains("`catch`: String,"));
318+
Assert.assertTrue(someObjFileContents.contains("`finally`: String,"));
319+
Assert.assertTrue(someObjFileContents.contains("`def`: Option[String] = None,"));
320+
Assert.assertTrue(someObjFileContents.contains("`for`: Option[String] = None,"));
321+
Assert.assertTrue(someObjFileContents.contains("`implicit`: Option[String] = None,"));
322+
Assert.assertTrue(someObjFileContents.contains("`match`: Option[String] = None,"));
323+
Assert.assertTrue(someObjFileContents.contains("`case`: Option[String] = None,"));
324+
Assert.assertTrue(someObjFileContents.contains("`import`: Option[String] = None,"));
325+
Assert.assertTrue(someObjFileContents.contains("`lazy`: String,"));
326+
Assert.assertTrue(someObjFileContents.contains("`private`: Option[String] = None,"));
327+
Assert.assertTrue(someObjFileContents.contains("`type`: Option[String] = None,"));
328+
Assert.assertTrue(someObjFileContents.contains("foobar: Boolean"));
329+
}
279330
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
openapi: 3.0.1
2+
info:
3+
title: ping some object
4+
version: '1.0'
5+
servers:
6+
- url: 'http://localhost:8082/'
7+
paths:
8+
/ping:
9+
post:
10+
operationId: postPing
11+
tags:
12+
- ping
13+
requestBody:
14+
content:
15+
'application/json':
16+
schema:
17+
$ref: "#/components/schemas/SomeObj"
18+
responses:
19+
'200':
20+
description: OK
21+
content:
22+
'application/json':
23+
schema:
24+
$ref: "#/components/schemas/SomeObj"
25+
components:
26+
schemas:
27+
SomeObj:
28+
type: object
29+
properties:
30+
$_type:
31+
type: string
32+
# using 'enum' & 'default' for '$_type' is a work-around until constants are supported
33+
# See https://github.com/OAI/OpenAPI-Specification/issues/1313
34+
enum:
35+
- SomeObjIdentifier
36+
default: SomeObjIdentifier
37+
id:
38+
type: integer
39+
format: int64
40+
name:
41+
type: string
42+
val:
43+
type: string
44+
var:
45+
type: string
46+
class:
47+
type: string
48+
trait:
49+
type: string
50+
object:
51+
type: string
52+
try:
53+
type: string
54+
catch:
55+
type: string
56+
finally:
57+
type: string
58+
def:
59+
type: string
60+
for:
61+
type: string
62+
implicit:
63+
type: string
64+
match:
65+
type: string
66+
case:
67+
type: string
68+
import:
69+
type: string
70+
lazy:
71+
type: string
72+
private:
73+
type: string
74+
type:
75+
type: string
76+
foobar:
77+
type: boolean
78+
required:
79+
- id
80+
- try
81+
- catch
82+
- finally
83+
- lazy
84+
- foobar

0 commit comments

Comments
 (0)