diff --git a/src/main/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapter.java b/src/main/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapter.java index b4330ce..80625e8 100644 --- a/src/main/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapter.java +++ b/src/main/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapter.java @@ -326,8 +326,15 @@ private List finalizeUserActionParameters(List< var baseNonCustomizableParamsNames = baseNonCustomizableUserActionParams.stream() .map(CatalogItemUserActionParameter::getName) .collect(Collectors.toSet()); + var customizableParamsPairs = customizableParamsPairsJoinedWithUserParams.stream() - .filter(pair -> !baseNonCustomizableParamsNames.contains(pair.getLeft().getName())) + .filter(pair -> { + var userDefinedParamName = Optional.ofNullable(pair.getLeft()) + .map(CatalogItemUserActionParameter::getName) + .orElse(Strings.EMPTY); + + return !baseNonCustomizableParamsNames.contains(userDefinedParamName); + }) .toList(); diff --git a/src/test/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapterTest.java b/src/test/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapterTest.java index 13e47c5..739b4ea 100644 --- a/src/test/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapterTest.java +++ b/src/test/java/org/opendevstack/component_catalog/server/controllers/CatalogApiAdapterTest.java @@ -430,6 +430,54 @@ void givenACatalogItem_AndItemContainsParameters_AndOneParameterSharesNameWithAN assertThat(parameterNonCustomizable.get().getDefaultValue().get()).isEqualTo("123"); } + @Test + void givenACatalogItem_AndItemContainsParameters_AndOneParameterIsCustomizable_andCustomUserActionDoesNotDefineIt_whenFinalizeUserActions_thenCustomParameterAppers() { + // given + var customUserActionProvision = generateCustomUserActions(); + var defaultUserActionProvision = generateDefaultUserActionEntity(); + var parametersWithExtraOneList = new ArrayList<>(Arrays.asList(defaultUserActionProvision.getParameters())); + var extraCustomizableParameterName = "extraCustomizableParameter"; + var extraCustomizableParameterValue = "123999"; + var extraCustomizableParameter = UserActionEntityParameterMother.of(extraCustomizableParameterName, + "string", + true, + extraCustomizableParameterValue, + Collections.emptyList(), + List.of(UserActionEntityParameterLocationMother.of()), + Collections.emptyList(), + "Workflow to execute.", + "workflow placeholder", + "workflow hint", + true, + false, + List.of(UserActionEntityParameterValidationMother.of())); + parametersWithExtraOneList.add(extraCustomizableParameter); + + defaultUserActionProvision.setParameters(parametersWithExtraOneList.toArray(UserActionEntityParameter[]::new)); + + var clusters = Collections.emptyList(); + var userGroups = Collections.emptyList(); + var projectKey = Strings.EMPTY; + var catalogItemId = Strings.EMPTY; + + List customUserActions = List.of(customUserActionProvision); + UserActionEntity[] defaultUserActions = {defaultUserActionProvision}; + + // when + var mergedUserActions = catalogApiAdapter.finalizeUserActions( + customUserActions, defaultUserActions, clusters, userGroups, projectKey, catalogItemId); + + // then + assertThat(mergedUserActions).hasSize(1); + + var parameters = mergedUserActions.getFirst().getParameters(); + + assertThat(parameters).hasSize(4); + var generatedExtraCustomizableParameter = parameters.stream().filter(p -> p.getName().equals(extraCustomizableParameterName)).findFirst(); + assertThat(generatedExtraCustomizableParameter).isPresent(); + assertThat(generatedExtraCustomizableParameter.get().getDefaultValue().get()).isEqualTo(extraCustomizableParameterValue); + } + private UserActionEntity generateDefaultUserActionEntity() { var defaultParameter = UserActionEntityParameterMother.of(); var defaultParameterNonCustomizable = UserActionEntityParameterMother.of(PARAMETER_NON_CUSTOMIZABLE_NAME);