diff --git a/datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmService.java b/datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmService.java index 59a6bba61..2e53d4363 100644 --- a/datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmService.java +++ b/datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmService.java @@ -247,8 +247,9 @@ public Collection getAllServiceActions() public String getJavaPackageName() { final String javaPackageNameKey = name + SERVICE_MAPPINGS_PACKAGE_SUFFIX; - final String javaPackageName = serviceNameMappings.getString(javaPackageNameKey).orElseGet(this::getTitle); - return NamingUtils.serviceNameToJavaPackageName(javaPackageName); + return serviceNameMappings + .getString(javaPackageNameKey) + .orElseGet(() -> NamingUtils.serviceNameToJavaPackageName(getTitle())); } @Override @@ -261,8 +262,9 @@ public String getName() public String getJavaClassName() { final String javaClassNameKey = name + SERVICE_MAPPINGS_CLASS_SUFFIX; - final String javaClassName = serviceNameMappings.getString(javaClassNameKey).orElseGet(this::getTitle); - return NamingUtils.serviceNameToBaseJavaClassName(javaClassName); + return serviceNameMappings + .getString(javaClassNameKey) + .orElseGet(() -> NamingUtils.serviceNameToBaseJavaClassName(getTitle())); } @Override diff --git a/datamodel/odata-v4/odata-v4-generator/src/test/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmServiceTest.java b/datamodel/odata-v4/odata-v4-generator/src/test/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmServiceTest.java new file mode 100644 index 000000000..2179dd6c4 --- /dev/null +++ b/datamodel/odata-v4/odata-v4-generator/src/test/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmServiceTest.java @@ -0,0 +1,96 @@ +package com.sap.cloud.sdk.datamodel.odatav4.generator; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; + +import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.commons.api.edm.EdmEntityContainer; +import org.apache.olingo.commons.api.edm.EdmSchema; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import com.google.common.collect.ArrayListMultimap; +import com.sap.cloud.sdk.datamodel.odata.utility.ServiceNameMappings; + +class EdmServiceTest +{ + + @ParameterizedTest + @MethodSource( "getServiceNameMappingScenarios" ) + void testServiceNameMappingsGenerated( + @Nonnull final String serviceName, + @Nonnull final String expectedPackageName, + @Nonnull final String expectedClassName ) + { + + // Mock ServiceNameMappings to return empty Optional (no stored mappings) + final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class); + doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".packageName"); + doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".className"); + + final EdmService service = + new EdmService( + serviceName, + mockMappings, + createMockEdm(), + mock(ServiceDetails.class), + ArrayListMultimap.create(), + false); + + assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName); + assertThat(service.getJavaClassName()).isEqualTo(expectedClassName); + } + + @ParameterizedTest + @MethodSource( "getServiceNameMappingScenarios" ) + void testStoredServiceNameMappingsAreUnchanged( + @Nonnull final String serviceName, + @Nonnull final String expectedPackageName, + @Nonnull final String expectedClassName ) + { + + // Mock ServiceNameMappings to return stored mappings + final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class); + doReturn(Optional.of(expectedPackageName)).when(mockMappings).getString(serviceName + ".packageName"); + doReturn(Optional.of(expectedClassName)).when(mockMappings).getString(serviceName + ".className"); + + final EdmService service = + new EdmService( + serviceName, + mockMappings, + createMockEdm(), + mock(ServiceDetails.class), + ArrayListMultimap.create(), + false); + + assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName); + assertThat(service.getJavaClassName()).isEqualTo(expectedClassName); + } + + private static Edm createMockEdm() + { + final Edm mockEdm = mock(Edm.class); + final EdmEntityContainer mockContainer = mock(EdmEntityContainer.class); + final EdmSchema mockSchema = mock(EdmSchema.class); + doReturn(mockContainer).when(mockEdm).getEntityContainer(); + doReturn(List.of(mockSchema)).when(mockEdm).getSchemas(); + return mockEdm; + } + + private static Stream getServiceNameMappingScenarios() + { + return Stream + .of( + Arguments.of("API_MATERIAL_DOCUMENT_SRV", "materialdocumentsrv", "MATERIALDOCUMENTSRV"), + Arguments.of("Product_Api_Service", "product", "Product" // "Api" and "Service" removed + )); + } +} diff --git a/datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmService.java b/datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmService.java index 392ad6347..3ed45a34e 100644 --- a/datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmService.java +++ b/datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmService.java @@ -160,8 +160,9 @@ public Collection getAllFunctionImports() public String getJavaPackageName() { final String javaPackageNameKey = name + SERVICE_MAPPINGS_PACKAGE_SUFFIX; - final String javaPackageName = serviceNameMappings.getString(javaPackageNameKey).orElseGet(this::getTitle); - return NamingUtils.serviceNameToJavaPackageName(javaPackageName); + return serviceNameMappings + .getString(javaPackageNameKey) + .orElseGet(() -> NamingUtils.serviceNameToJavaPackageName(getTitle())); } @Override @@ -174,8 +175,9 @@ public String getName() public String getJavaClassName() { final String javaClassNameKey = name + SERVICE_MAPPINGS_CLASS_SUFFIX; - final String javaClassName = serviceNameMappings.getString(javaClassNameKey).orElseGet(this::getTitle); - return NamingUtils.serviceNameToBaseJavaClassName(javaClassName); + return serviceNameMappings + .getString(javaClassNameKey) + .orElseGet(() -> NamingUtils.serviceNameToBaseJavaClassName(getTitle())); } @Override diff --git a/datamodel/odata/odata-generator/src/test/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmServiceTest.java b/datamodel/odata/odata-generator/src/test/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmServiceTest.java new file mode 100644 index 000000000..5ddc459be --- /dev/null +++ b/datamodel/odata/odata-generator/src/test/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmServiceTest.java @@ -0,0 +1,82 @@ +package com.sap.cloud.sdk.datamodel.odata.generator; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.util.Optional; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; + +import org.apache.olingo.odata2.api.edm.Edm; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import com.google.common.collect.ArrayListMultimap; +import com.sap.cloud.sdk.datamodel.odata.utility.ServiceNameMappings; + +class EdmServiceTest +{ + + @ParameterizedTest + @MethodSource( "getServiceNameMappingScenarios" ) + void testServiceNameMappingsGeneration( + @Nonnull final String serviceName, + @Nonnull final String expectedPackageName, + @Nonnull final String expectedClassName ) + { + + // Mock ServiceNameMappings to return empty Optional (no stored mappings) + final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class); + doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".packageName"); + doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".className"); + + final EdmService service = + new EdmService( + serviceName, + mockMappings, + mock(Edm.class), + mock(ServiceDetails.class), + ArrayListMultimap.create(), + false); + + assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName); + assertThat(service.getJavaClassName()).isEqualTo(expectedClassName); + } + + @ParameterizedTest + @MethodSource( "getServiceNameMappingScenarios" ) + void testStoredServiceNameMappingsAreUnchanged( + @Nonnull final String serviceName, + @Nonnull final String expectedPackageName, + @Nonnull final String expectedClassName ) + { + // Mock ServiceNameMappings to return stored mappings + final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class); + doReturn(Optional.of(expectedPackageName)).when(mockMappings).getString(serviceName + ".packageName"); + doReturn(Optional.of(expectedClassName)).when(mockMappings).getString(serviceName + ".className"); + + final EdmService service = + new EdmService( + serviceName, + mockMappings, + mock(Edm.class), + mock(ServiceDetails.class), + ArrayListMultimap.create(), + false); + + assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName); + assertThat(service.getJavaClassName()).isEqualTo(expectedClassName); + } + + private static Stream getServiceNameMappingScenarios() + { + return Stream + .of( + Arguments.of("API_MATERIAL_DOCUMENT_SRV", "materialdocumentsrv", "MATERIALDOCUMENTSRV"), + Arguments.of("Product_Api_Service", "product", "Product" // "Api" and "Service" removed + )); + } +}