Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit f5944d5

Browse files
committed
Adds tow regex tests
1 parent a4cf7a0 commit f5944d5

File tree

3 files changed

+64
-4
lines changed

3 files changed

+64
-4
lines changed

modules/openapi-json-schema-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2497,7 +2497,7 @@ private List<Object> getPatternAndModifiers(String pattern) {
24972497
24982498
json schema test cases omit the leading and trailing /s, so make sure that the regex allows that
24992499
*/
2500-
Pattern valueExtractor = Pattern.compile("^/?(.+?)/?([sim]?)$");
2500+
Pattern valueExtractor = Pattern.compile("^/?(.+?)/?([simu]{0,4})$");
25012501
Matcher m = valueExtractor.matcher(pattern);
25022502
if (m.find()) {
25032503
int groupCount = m.groupCount();
@@ -2511,13 +2511,13 @@ private List<Object> getPatternAndModifiers(String pattern) {
25112511
String isolatedPattern = m.group(1);
25122512
String flags = m.group(2);
25132513
if (flags.contains("s")) {
2514-
modifiers.add("DOTALL");
2514+
modifiers.add("s");
25152515
}
25162516
if (flags.contains("i")) {
2517-
modifiers.add("IGNORECASE");
2517+
modifiers.add("i");
25182518
}
25192519
if (flags.contains("m")) {
2520-
modifiers.add("MULTILINE");
2520+
modifiers.add("m");
25212521
}
25222522
return Arrays.asList(isolatedPattern, modifiers);
25232523
}

modules/openapi-json-schema-generator/src/test/java/org/openapitools/codegen/python/PythonClientTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.nio.charset.StandardCharsets;
3333
import java.nio.file.Files;
3434
import java.nio.file.Path;
35+
import java.util.Arrays;
3536
import java.util.Collections;
3637
import java.util.List;
3738
import java.util.Map;
@@ -164,4 +165,36 @@ public void testApisNotGenerated() throws Exception {
164165
Assert.assertFalse(Files.isDirectory(pathThatShouldNotExist));
165166
output.deleteOnExit();
166167
}
168+
169+
@Test
170+
public void testRegexWithoutTrailingSlashWorks() {
171+
OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/11_regex.yaml");
172+
PythonClientCodegen codegen = new PythonClientCodegen();
173+
codegen.setOpenAPI(openAPI);
174+
175+
String modelName = "UUID";
176+
Schema schema = openAPI.getComponents().getSchemas().get(modelName);
177+
178+
CodegenModel cm = codegen.fromModel(modelName, schema);
179+
String expectedRegexPattern = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}";
180+
Assert.assertEquals(cm.getPattern(), expectedRegexPattern);
181+
Assert.assertEquals(cm.vendorExtensions.get("x-regex"), expectedRegexPattern);
182+
Assert.assertFalse(cm.vendorExtensions.containsKey("x-modifiers"));
183+
}
184+
185+
@Test
186+
public void testRegexWithMultipleFlagsWorks() {
187+
OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/11_regex.yaml");
188+
PythonClientCodegen codegen = new PythonClientCodegen();
189+
codegen.setOpenAPI(openAPI);
190+
191+
String modelName = "StringWithRegexWithThreeFlags";
192+
Schema schema = openAPI.getComponents().getSchemas().get(modelName);
193+
194+
CodegenModel cm = codegen.fromModel(modelName, schema);
195+
String expectedRegexPattern = "a.";
196+
Assert.assertEquals(cm.getPattern(), expectedRegexPattern);
197+
Assert.assertEquals(cm.vendorExtensions.get("x-regex"), expectedRegexPattern);
198+
Assert.assertEquals(cm.vendorExtensions.get("x-modifiers"), Arrays.asList("s", "i", "m"));
199+
}
167200
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Test
4+
version: 1.0.0-SNAPSHOT
5+
paths:
6+
/test:
7+
get:
8+
tags:
9+
- Test Resource
10+
parameters:
11+
- name: uuid
12+
in: query
13+
schema:
14+
$ref: '#/components/schemas/UUID'
15+
responses:
16+
"200":
17+
description: OK
18+
components:
19+
schemas:
20+
UUID:
21+
format: uuid
22+
pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"
23+
type: string
24+
StringWithRegexWithThreeFlags:
25+
format: uuid
26+
pattern: "/a./sim"
27+
type: string

0 commit comments

Comments
 (0)