Skip to content

Commit badf212

Browse files
rpanackalJonas-Isr
andauthored
fix: [OData] TreatserviceNameMappings.properties readonly (#1029)
Co-authored-by: Jonas-Isr <[email protected]>
1 parent 67b3eb3 commit badf212

File tree

4 files changed

+190
-8
lines changed
  • datamodel
    • odata-v4/odata-v4-generator/src
    • odata/odata-generator/src

4 files changed

+190
-8
lines changed

datamodel/odata-v4/odata-v4-generator/src/main/java/com/sap/cloud/sdk/datamodel/odatav4/generator/EdmService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,9 @@ public Collection<ServiceAction> getAllServiceActions()
247247
public String getJavaPackageName()
248248
{
249249
final String javaPackageNameKey = name + SERVICE_MAPPINGS_PACKAGE_SUFFIX;
250-
final String javaPackageName = serviceNameMappings.getString(javaPackageNameKey).orElseGet(this::getTitle);
251-
return NamingUtils.serviceNameToJavaPackageName(javaPackageName);
250+
return serviceNameMappings
251+
.getString(javaPackageNameKey)
252+
.orElseGet(() -> NamingUtils.serviceNameToJavaPackageName(getTitle()));
252253
}
253254

254255
@Override
@@ -261,8 +262,9 @@ public String getName()
261262
public String getJavaClassName()
262263
{
263264
final String javaClassNameKey = name + SERVICE_MAPPINGS_CLASS_SUFFIX;
264-
final String javaClassName = serviceNameMappings.getString(javaClassNameKey).orElseGet(this::getTitle);
265-
return NamingUtils.serviceNameToBaseJavaClassName(javaClassName);
265+
return serviceNameMappings
266+
.getString(javaClassNameKey)
267+
.orElseGet(() -> NamingUtils.serviceNameToBaseJavaClassName(getTitle()));
266268
}
267269

268270
@Override
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.sap.cloud.sdk.datamodel.odatav4.generator;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.doReturn;
5+
import static org.mockito.Mockito.mock;
6+
7+
import java.util.List;
8+
import java.util.Optional;
9+
import java.util.stream.Stream;
10+
11+
import javax.annotation.Nonnull;
12+
13+
import org.apache.olingo.commons.api.edm.Edm;
14+
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
15+
import org.apache.olingo.commons.api.edm.EdmSchema;
16+
import org.junit.jupiter.params.ParameterizedTest;
17+
import org.junit.jupiter.params.provider.Arguments;
18+
import org.junit.jupiter.params.provider.MethodSource;
19+
20+
import com.google.common.collect.ArrayListMultimap;
21+
import com.sap.cloud.sdk.datamodel.odata.utility.ServiceNameMappings;
22+
23+
class EdmServiceTest
24+
{
25+
26+
@ParameterizedTest
27+
@MethodSource( "getServiceNameMappingScenarios" )
28+
void testServiceNameMappingsGenerated(
29+
@Nonnull final String serviceName,
30+
@Nonnull final String expectedPackageName,
31+
@Nonnull final String expectedClassName )
32+
{
33+
34+
// Mock ServiceNameMappings to return empty Optional (no stored mappings)
35+
final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class);
36+
doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".packageName");
37+
doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".className");
38+
39+
final EdmService service =
40+
new EdmService(
41+
serviceName,
42+
mockMappings,
43+
createMockEdm(),
44+
mock(ServiceDetails.class),
45+
ArrayListMultimap.create(),
46+
false);
47+
48+
assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName);
49+
assertThat(service.getJavaClassName()).isEqualTo(expectedClassName);
50+
}
51+
52+
@ParameterizedTest
53+
@MethodSource( "getServiceNameMappingScenarios" )
54+
void testStoredServiceNameMappingsAreUnchanged(
55+
@Nonnull final String serviceName,
56+
@Nonnull final String expectedPackageName,
57+
@Nonnull final String expectedClassName )
58+
{
59+
60+
// Mock ServiceNameMappings to return stored mappings
61+
final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class);
62+
doReturn(Optional.of(expectedPackageName)).when(mockMappings).getString(serviceName + ".packageName");
63+
doReturn(Optional.of(expectedClassName)).when(mockMappings).getString(serviceName + ".className");
64+
65+
final EdmService service =
66+
new EdmService(
67+
serviceName,
68+
mockMappings,
69+
createMockEdm(),
70+
mock(ServiceDetails.class),
71+
ArrayListMultimap.create(),
72+
false);
73+
74+
assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName);
75+
assertThat(service.getJavaClassName()).isEqualTo(expectedClassName);
76+
}
77+
78+
private static Edm createMockEdm()
79+
{
80+
final Edm mockEdm = mock(Edm.class);
81+
final EdmEntityContainer mockContainer = mock(EdmEntityContainer.class);
82+
final EdmSchema mockSchema = mock(EdmSchema.class);
83+
doReturn(mockContainer).when(mockEdm).getEntityContainer();
84+
doReturn(List.of(mockSchema)).when(mockEdm).getSchemas();
85+
return mockEdm;
86+
}
87+
88+
private static Stream<Arguments> getServiceNameMappingScenarios()
89+
{
90+
return Stream
91+
.of(
92+
Arguments.of("API_MATERIAL_DOCUMENT_SRV", "materialdocumentsrv", "MATERIALDOCUMENTSRV"),
93+
Arguments.of("Product_Api_Service", "product", "Product" // "Api" and "Service" removed
94+
));
95+
}
96+
}

datamodel/odata/odata-generator/src/main/java/com/sap/cloud/sdk/datamodel/odata/generator/EdmService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,9 @@ public Collection<FunctionImport> getAllFunctionImports()
160160
public String getJavaPackageName()
161161
{
162162
final String javaPackageNameKey = name + SERVICE_MAPPINGS_PACKAGE_SUFFIX;
163-
final String javaPackageName = serviceNameMappings.getString(javaPackageNameKey).orElseGet(this::getTitle);
164-
return NamingUtils.serviceNameToJavaPackageName(javaPackageName);
163+
return serviceNameMappings
164+
.getString(javaPackageNameKey)
165+
.orElseGet(() -> NamingUtils.serviceNameToJavaPackageName(getTitle()));
165166
}
166167

167168
@Override
@@ -174,8 +175,9 @@ public String getName()
174175
public String getJavaClassName()
175176
{
176177
final String javaClassNameKey = name + SERVICE_MAPPINGS_CLASS_SUFFIX;
177-
final String javaClassName = serviceNameMappings.getString(javaClassNameKey).orElseGet(this::getTitle);
178-
return NamingUtils.serviceNameToBaseJavaClassName(javaClassName);
178+
return serviceNameMappings
179+
.getString(javaClassNameKey)
180+
.orElseGet(() -> NamingUtils.serviceNameToBaseJavaClassName(getTitle()));
179181
}
180182

181183
@Override
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.sap.cloud.sdk.datamodel.odata.generator;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.doReturn;
5+
import static org.mockito.Mockito.mock;
6+
7+
import java.util.Optional;
8+
import java.util.stream.Stream;
9+
10+
import javax.annotation.Nonnull;
11+
12+
import org.apache.olingo.odata2.api.edm.Edm;
13+
import org.junit.jupiter.params.ParameterizedTest;
14+
import org.junit.jupiter.params.provider.Arguments;
15+
import org.junit.jupiter.params.provider.MethodSource;
16+
17+
import com.google.common.collect.ArrayListMultimap;
18+
import com.sap.cloud.sdk.datamodel.odata.utility.ServiceNameMappings;
19+
20+
class EdmServiceTest
21+
{
22+
23+
@ParameterizedTest
24+
@MethodSource( "getServiceNameMappingScenarios" )
25+
void testServiceNameMappingsGeneration(
26+
@Nonnull final String serviceName,
27+
@Nonnull final String expectedPackageName,
28+
@Nonnull final String expectedClassName )
29+
{
30+
31+
// Mock ServiceNameMappings to return empty Optional (no stored mappings)
32+
final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class);
33+
doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".packageName");
34+
doReturn(Optional.empty()).when(mockMappings).getString(serviceName + ".className");
35+
36+
final EdmService service =
37+
new EdmService(
38+
serviceName,
39+
mockMappings,
40+
mock(Edm.class),
41+
mock(ServiceDetails.class),
42+
ArrayListMultimap.create(),
43+
false);
44+
45+
assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName);
46+
assertThat(service.getJavaClassName()).isEqualTo(expectedClassName);
47+
}
48+
49+
@ParameterizedTest
50+
@MethodSource( "getServiceNameMappingScenarios" )
51+
void testStoredServiceNameMappingsAreUnchanged(
52+
@Nonnull final String serviceName,
53+
@Nonnull final String expectedPackageName,
54+
@Nonnull final String expectedClassName )
55+
{
56+
// Mock ServiceNameMappings to return stored mappings
57+
final ServiceNameMappings mockMappings = mock(ServiceNameMappings.class);
58+
doReturn(Optional.of(expectedPackageName)).when(mockMappings).getString(serviceName + ".packageName");
59+
doReturn(Optional.of(expectedClassName)).when(mockMappings).getString(serviceName + ".className");
60+
61+
final EdmService service =
62+
new EdmService(
63+
serviceName,
64+
mockMappings,
65+
mock(Edm.class),
66+
mock(ServiceDetails.class),
67+
ArrayListMultimap.create(),
68+
false);
69+
70+
assertThat(service.getJavaPackageName()).isEqualTo(expectedPackageName);
71+
assertThat(service.getJavaClassName()).isEqualTo(expectedClassName);
72+
}
73+
74+
private static Stream<Arguments> getServiceNameMappingScenarios()
75+
{
76+
return Stream
77+
.of(
78+
Arguments.of("API_MATERIAL_DOCUMENT_SRV", "materialdocumentsrv", "MATERIALDOCUMENTSRV"),
79+
Arguments.of("Product_Api_Service", "product", "Product" // "Api" and "Service" removed
80+
));
81+
}
82+
}

0 commit comments

Comments
 (0)