package io.swagger; import static org.testng.Assert.assertEquals; import io.swagger.util.PathUtils; import org.testng.annotations.Test; import java.util.HashMap; import java.util.Map; public class PathUtilsTest { @Test(description = "parse regex with slash inside it from issue 1153") public void parseRegexWithSlashInside() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/{itemId: [0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{3}/[A-Za-z0-9]+}", regexMap); assertEquals(path, "/{itemId}"); assertEquals(regexMap.get("itemId"), "[0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{2}/[0-9]{3}/[A-Za-z0-9]+"); } @Test(description = "parse two part path with one param") public void parseTwoPartPathWithOneParam() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/api/{itemId: [0-9]{4}/[0-9]{2,4}/[A-Za-z0-9]+}", regexMap); assertEquals(path, "/api/{itemId}"); assertEquals(regexMap.get("itemId"), "[0-9]{4}/[0-9]{2,4}/[A-Za-z0-9]+"); } @Test(description = "parse two part path with two params and white spaces around") public void parseTwoPartPathWithTwoParams() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/{itemId: [0-9]{4}/[A-Za-z0-9]+}/{ api : [aA-zZ]+ }", regexMap); assertEquals(path, "/{itemId}/{api}"); assertEquals(regexMap.get("itemId"), "[0-9]{4}/[A-Za-z0-9]+"); assertEquals(regexMap.get("api"), "[aA-zZ]+"); } @Test(description = "parse simple path") public void parseSimplePath() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/api/itemId", regexMap); assertEquals(path, "/api/itemId"); assertEquals(regexMap.size(), 0); } @Test(description = "parse path with param without regex") public void parsePathWithoutRegex() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/api/{name}", regexMap); assertEquals(path, "/api/{name}"); assertEquals(regexMap.size(), 0); } @Test(description = "parse path with two params in one part") public void parsePathWithTwoParamsInOnePart() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/{a:\\w+}-{b:\\w+}/c", regexMap); assertEquals(path, "/{a}-{b}/c"); assertEquals(regexMap.get("a"), "\\w+"); assertEquals(regexMap.get("b"), "\\w+"); } @Test(description = "parse path like /swagger.{json|yaml}") public void test() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/swagger.{json|yaml}", regexMap); assertEquals(path, "/swagger.{json|yaml}"); assertEquals(regexMap.size(), 0); } @Test(description = "parse path with many braces and slashes iside") public void parsePathWithBracesAndSlashes() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/api/{regex:/(?!\\{\\})\\w*|/\\{\\w+:*([^\\{\\}]*(\\{.*\\})*)*\\}}", regexMap); assertEquals(path, "/api/{regex}"); assertEquals(regexMap.get("regex"), "/(?!\\{\\})\\w*|/\\{\\w+:*([^\\{\\}]*(\\{.*\\})*)*\\}"); } @Test(description = "collect path") public void collectPath() { final String path = PathUtils.collectPath("api", "/users/", "{userId}/"); assertEquals(path, "/api/users/{userId}"); } @Test(description = "collect path with many slashes inside") public void collectPathWithSlashesInside() { final String path = PathUtils.collectPath("///api/users///", "///getUser///", "/ /"); assertEquals(path, "/api/users/getUser"); } @Test(description = "not fail when passed path is null") public void testNullPath() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath(null, regexMap); assertEquals(path, null); } @Test(description = "not fail when regex is not valid") public void testInvalidRegex() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("/api/{fail: [a-z]", regexMap); assertEquals(path, null); } @Test(description = "not fail when passed path is empty") public void testEmptyPath() { final Map<String, String> regexMap = new HashMap<String, String>(); final String path = PathUtils.parsePath("", regexMap); assertEquals(path, "/"); } @Test(description = "not fail when passed path is null") public void testNullCollectedPath() { final String path = PathUtils.collectPath(null, null); assertEquals(path, "/"); } @Test(description = "not fail when passed path is empty") public void testEmptyCollectedPath() { final String path = PathUtils.collectPath(""); assertEquals(path, "/"); } }