Skip to content

Commit 77836de

Browse files
committed
Address cubic-dev comments
1 parent 0252d3c commit 77836de

4 files changed

Lines changed: 87 additions & 5 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PostmanCollectionCodegen.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ public void addToMap(CodegenOperation codegenOperation) {
332332
}
333333
}
334334

335+
tagName = formatDescription(tagName);
336+
tagDescription = formatDescription(tagDescription);
337+
335338
PostmanRequestFolder folder = new PostmanRequestFolder(tagName, tagDescription);
336339
List<CodegenOperation> list = codegenOperationsByTag.get(folder);
337340

modules/openapi-generator/src/main/resources/postman-collection/postman.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
{{#codegenOperationsByTag}}
1313
{{#entrySet}}
1414
{
15-
"name": "{{key.name}}",
16-
"description": "{{key.description}}",
15+
"name": "{{{key.name}}}",
16+
"description": "{{{key.description}}}",
1717
"item": [{{#value}}
1818
{{>item}}{{^-last}},{{/-last}}{{/value}}
1919
]

modules/openapi-generator/src/test/java/org/openapitools/codegen/postman/PostmanCollectionCodegenTest.java

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,21 @@ public void testBasicGeneration() throws IOException {
7777
assertFileContains(path, "\"name\": \"Get User\"");
7878
// verify request endpoint
7979
TestUtils.assertFileContains(path, "\"name\": \"/users/:userId\"");
80-
// verify folder name and description
81-
TestUtils.assertFileContains(path, "\"name\": \"basic\"");
82-
TestUtils.assertFileContains(path, "\"description\": \"Basic tag\"");
80+
81+
ObjectMapper objectMapper = new ObjectMapper();
82+
JsonNode root = objectMapper.readTree(new File(output + "/postman.json"));
83+
JsonNode folders = root.get("item");
84+
85+
JsonNode basicFolder = null;
86+
for (JsonNode folder : folders) {
87+
if ("basic".equals(folder.get("name").asText())) {
88+
basicFolder = folder;
89+
break;
90+
}
91+
}
92+
93+
assertNotNull(basicFolder);
94+
assertEquals("Basic tag", basicFolder.get("description").asText());
8395

8496
}
8597

@@ -106,6 +118,38 @@ public void testBasicGenerationJson() throws IOException {
106118
assertFileContains(path, "\"schema\": \"https://schema.getpostman.com/json/collection/v2.1.0/collection.json\"");
107119
}
108120

121+
@Test
122+
public void testTagDescriptionIsJsonEscaped() throws IOException {
123+
File output = Files.createTempDirectory("postmantest_").toFile();
124+
output.deleteOnExit();
125+
126+
final CodegenConfigurator configurator = new CodegenConfigurator()
127+
.setGeneratorName("postman-collection")
128+
.setInputSpec("src/test/resources/3_0/postman-collection/TagDescriptionEscaping.yaml")
129+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
130+
131+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
132+
DefaultGenerator generator = new DefaultGenerator();
133+
List<File> files = generator.opts(clientOptInput).generate();
134+
135+
files.forEach(File::deleteOnExit);
136+
137+
ObjectMapper objectMapper = new ObjectMapper();
138+
JsonNode root = objectMapper.readTree(new File(output + "/postman.json"));
139+
JsonNode folders = root.get("item");
140+
141+
JsonNode basicFolder = null;
142+
for (JsonNode folder : folders) {
143+
if ("basic".equals(folder.get("name").asText())) {
144+
basicFolder = folder;
145+
break;
146+
}
147+
}
148+
149+
assertNotNull(basicFolder);
150+
assertEquals("Basic \"quoted\" tag\nsecond line", basicFolder.get("description").asText());
151+
}
152+
109153
@Test
110154
public void testValidatePostmanJson() throws IOException {
111155

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Tag Description Escaping
4+
version: '1.0'
5+
servers:
6+
- url: 'http://localhost:5001'
7+
paths:
8+
'/users/{userId}':
9+
get:
10+
summary: Get User
11+
operationId: get-users-userId
12+
tags:
13+
- basic
14+
parameters:
15+
- description: Unique identifier of the user
16+
name: userId
17+
in: path
18+
required: true
19+
schema:
20+
type: string
21+
responses:
22+
'200':
23+
description: User Found
24+
content:
25+
application/json:
26+
schema:
27+
type: object
28+
properties:
29+
id:
30+
type: integer
31+
tags:
32+
- name: basic
33+
description: |-
34+
Basic "quoted" tag
35+
second line

0 commit comments

Comments
 (0)