}
}
+ final ArrayNode pathParams = JsonNodeFactory.instance.arrayNode();
for (final RpcDefinition rpcDefinition : module.getRpcs()) {
final String resolvedPath = getResourcePath("operations", context) + "/" + moduleName + ":"
+ rpcDefinition.getQName().getLocalName();
addOperations(rpcDefinition, moduleName, deviceName, paths, moduleName, definitionNames,
- resolvedPath);
+ resolvedPath, pathParams);
}
LOG.debug("Number of Paths found [{}]", paths.size());
((ActionNodeContainer) node).getActions().forEach(actionDef -> {
final String resolvedPath = "/rests/operations" + resourcePath.substring(11)
+ "/" + resolvePathArgumentsName(actionDef.getQName(), node.getQName(), schemaContext);
- addOperations(actionDef, moduleName, deviceName, paths, parentName, definitionNames, resolvedPath);
+ addOperations(actionDef, moduleName, deviceName, paths, parentName, definitionNames, resolvedPath,
+ pathParams);
});
}
private static void addOperations(final OperationDefinition operDef, final String moduleName,
final Optional<String> deviceName, final Map<String, Path> paths, final String parentName,
- final DefinitionNames definitionNames, final String resourcePath) {
+ final DefinitionNames definitionNames, final String resourcePath, final ArrayNode parentPathParams) {
final var pathBuilder = new Path.Builder();
- pathBuilder.post(buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames));
+ pathBuilder.post(buildPostOperation(operDef, moduleName, deviceName, parentName, definitionNames,
+ parentPathParams));
paths.put(resourcePath, pathBuilder.build());
}
}
public static Operation buildPostOperation(final OperationDefinition operDef, final String moduleName,
- final Optional<String> deviceName, final String parentName, final DefinitionNames definitionNames) {
- final ArrayNode parameters = JsonNodeFactory.instance.arrayNode();
+ final Optional<String> deviceName, final String parentName, final DefinitionNames definitionNames,
+ final ArrayNode parentPathParameters) {
+ final ArrayNode parameters = JsonNodeFactory.instance.arrayNode().addAll(parentPathParameters);
final String operationName = operDef.getQName().getLocalName();
final String inputName = operationName + INPUT_SUFFIX;
final String summary = buildSummaryValue(HttpMethod.POST, moduleName, deviceName, operationName);
assertEquals(List.of("name"), getPathParameters(doc.paths(), pathToList5));
}
+ /**
+ * Test that request for actions is correct and has parameters.
+ */
+ @Test
+ public void testActionPathsParams() {
+ final var module = context.findModule("action-types").orElseThrow();
+ final var doc = generator.getOpenApiSpec(module, "http", "localhost:8181", "/", "", context);
+
+ final var pathWithParameters = "/rests/operations/action-types:list={name}/list-action";
+ assertTrue(doc.paths().containsKey(pathWithParameters));
+ assertEquals(List.of("name"), getPathParameters(doc.paths(), pathWithParameters));
+
+ final var pathWithoutParameters = "/rests/operations/action-types:multi-container/inner-container/action";
+ assertTrue(doc.paths().containsKey(pathWithoutParameters));
+ assertEquals(List.of(), getPathParameters(doc.paths(), pathWithoutParameters));
+ }
+
@Test
public void testSimpleOpenApiObjects() {
final var module = context.findModule("my-yang", Revision.of("2022-10-06")).orElseThrow();
assertTrue(mountPointApi.paths().containsKey(pathToList5));
assertEquals(List.of("name"), getPathParameters(mountPointApi.paths(), pathToList5));
}
+
+ /**
+ * Test that request for actions is correct and has parameters.
+ */
+ @Test
+ public void testActionPathsParamsForMountPointApi() throws Exception {
+ final var mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ openApi.onMountPointCreated(INSTANCE_ID);
+
+ final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, Optional.empty());
+ assertNotNull("Failed to find Datastore API", mountPointApi);
+
+ final var pathWithParameters =
+ "/rests/operations/nodes/node=123/yang-ext:mount/action-types:list={name}/list-action";
+ assertTrue(mountPointApi.paths().containsKey(pathWithParameters));
+ assertEquals(List.of("name"), getPathParameters(mountPointApi.paths(), pathWithParameters));
+
+ final var pathWithoutParameters =
+ "/rests/operations/nodes/node=123/yang-ext:mount/action-types:multi-container/inner-container/action";
+ assertTrue(mountPointApi.paths().containsKey(pathWithoutParameters));
+ assertEquals(List.of(), getPathParameters(mountPointApi.paths(), pathWithoutParameters));
+ }
}