Skip to content

Commit 0e167d8

Browse files
author
zxBCN Valeriu_Tuguran,Constantin (IT EDP) EXTERNAL
committed
Add marketplace external service mock.
1 parent 374fa94 commit 0e167d8

15 files changed

Lines changed: 311 additions & 38 deletions

File tree

api-project-component-v0/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
<version>${project.version}</version>
4545
</dependency>
4646

47+
<dependency>
48+
<groupId>org.opendevstack.apiservice</groupId>
49+
<artifactId>external-service-marketplace</artifactId>
50+
<version>${project.version}</version>
51+
</dependency>
52+
4753
<dependency>
4854
<groupId>io.jsonwebtoken</groupId>
4955
<artifactId>jjwt-api</artifactId>
@@ -89,6 +95,7 @@
8995
<artifactId>spring-boot-starter-test</artifactId>
9096
<scope>test</scope>
9197
</dependency>
98+
9299
<dependency>
93100
<groupId>org.springframework.security</groupId>
94101
<artifactId>spring-security-core</artifactId>

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ public static CreateComponentResponse error(String projectId) {
1515
return response;
1616
}
1717

18-
public static CreateComponentResponse entityCreated(String projectId, String componentName) {
18+
public static CreateComponentResponse entityCreated(String projectId, String componentId) {
1919
CreateComponentResponse response = new CreateComponentResponse();
2020
response.setErrorCode(HttpStatus.CREATED.value());
21-
response.setMessage(componentName + " component created successfully in project " + projectId);
21+
response.setMessage(componentId + " component created successfully in project " + projectId);
2222
return response;
2323
}
2424
}

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ public class ProjectComponentsController implements ProjectComponentsApi {
2727
public ResponseEntity<CreateComponentResponse> createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) {
2828
try {
2929
Component component = componentsFacade.createProjectComponent(projectId, createComponentRequest);
30+
log.info("Created component {} for project id {} and request {}", component, projectId, createComponentRequest);
3031
if (component == null) {
3132
log.error("Failed to create component for project '{}'", projectId);
3233
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId));
3334
}
34-
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId, component.getName()));
35+
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId, component.getId()));
3536
} catch (Exception e) {
3637
log.error("Error while trying to create component for project '" + projectId + "': " + e.getMessage(), e);
3738
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId));
@@ -42,6 +43,7 @@ public ResponseEntity<CreateComponentResponse> createProjectComponent(String pro
4243
public ResponseEntity<Component> getProjectComponent(String projectId, String componentId) {
4344
try {
4445
Component component = componentsFacade.getProjectComponent(projectId, componentId);
46+
log.info("Retrieved component '{}' for project '{}': {}", componentId, projectId, component);
4547
if (component == null) {
4648
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
4749
}

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,41 @@
22

33
import lombok.AllArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5-
import org.opendevstack.apiservice.project.mock.ComponentMockService;
5+
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
6+
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
7+
import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService;
8+
import org.opendevstack.apiservice.project.mapper.MarketplaceMapper;
69
import org.opendevstack.apiservice.project.model.Component;
710
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
811
import org.springframework.stereotype.Service;
912

13+
import java.util.List;
14+
1015
@Service
1116
@AllArgsConstructor
1217
@Slf4j
1318
public class ComponentsFacade {
1419

15-
private final ComponentMockService marketplaceExternalService;
20+
private final MarketplaceService marketplaceExternalService;
21+
22+
private final MarketplaceMapper marketplaceMapper;
1623

1724
public Component getProjectComponent(String projectId, String componentId) {
18-
return marketplaceExternalService.getProjectComponent(projectId, componentId);
25+
ProjectComponent marketplaceComponent = marketplaceExternalService.getProjectComponent(projectId, componentId);
26+
if (marketplaceComponent == null) {
27+
log.info("Marketplace component with id {} not found", componentId);
28+
return null;
29+
}
30+
return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent);
1931
}
2032

2133
public Component createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) {
22-
return marketplaceExternalService.createProjectComponent(projectId, createComponentRequest);
34+
List<CreateComponentParameter> createComponentParameterList = marketplaceMapper.mapCreateComponentRequestToCreateComponentParameterList(createComponentRequest);
35+
ProjectComponent marketplaceComponent = marketplaceExternalService.createProjectComponent(projectId, createComponentParameterList);
36+
if (marketplaceComponent == null) {
37+
log.error("Failed to create component in marketplace for project with id {}", projectId);
38+
return null;
39+
}
40+
return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent);
2341
}
2442
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.opendevstack.apiservice.project.mapper;
2+
3+
4+
import org.mapstruct.Mapper;
5+
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
6+
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
7+
import org.opendevstack.apiservice.project.model.Component;
8+
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
9+
10+
import java.util.List;
11+
12+
@Mapper(componentModel = "spring")
13+
public interface MarketplaceMapper {
14+
15+
default Component mapMarketplaceComponentToV0Component(ProjectComponent source) {
16+
if (source == null) {
17+
return null;
18+
}
19+
Component target = new Component();
20+
target.setId(source.getComponentId());
21+
target.setStatus(source.getStatus());
22+
return target;
23+
}
24+
25+
default List<CreateComponentParameter> mapCreateComponentRequestToCreateComponentParameterList(CreateComponentRequest createComponentRequest) {
26+
return createComponentRequest.getParams().entrySet().stream()
27+
.map(entry -> new CreateComponentParameter(entry.getKey(), "string", entry.getValue()))
28+
.toList();
29+
}
30+
}

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void testCreateProjectComponent_whenSuccess_thenReturnOk() throws Exception {
4040
Component testComponent = buildTestComponent();
4141
String testProjectId = "testProjectId";
4242
CreateComponentRequest testCreateComponentRequest = buildTestCreateComponentRequest();
43-
CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testComponent.getName(),
43+
CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testComponent.getId(),
4444
testProjectId);
4545

4646
when(componentsFacade.createProjectComponent(anyString(), any(CreateComponentRequest.class)))

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsServiceTest.java renamed to api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsFacadeTest.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,56 @@
33
import org.junit.jupiter.api.BeforeEach;
44
import org.junit.jupiter.api.Test;
55
import org.junit.jupiter.api.extension.ExtendWith;
6+
import org.mapstruct.factory.Mappers;
67
import org.mockito.Mock;
78
import org.mockito.junit.jupiter.MockitoExtension;
8-
import org.opendevstack.apiservice.project.mock.ComponentMockService;
9+
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
10+
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
11+
import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService;
12+
import org.opendevstack.apiservice.project.mapper.MarketplaceMapper;
913
import org.opendevstack.apiservice.project.model.Component;
1014
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
1115

16+
import java.util.List;
17+
1218
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.mockito.ArgumentMatchers.any;
1320
import static org.mockito.ArgumentMatchers.anyString;
1421
import static org.mockito.ArgumentMatchers.eq;
1522
import static org.mockito.Mockito.when;
16-
import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestComponent;
1723
import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestCreateComponentRequest;
24+
import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestMarketplaceComponent;
25+
import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestMarketplaceCreateComponentParameters;
1826

1927
@ExtendWith(MockitoExtension.class)
20-
class ComponentsServiceTest {
28+
class ComponentsFacadeTest {
29+
30+
private final MarketplaceMapper marketplaceMapper = Mappers.getMapper(MarketplaceMapper.class);
2131

2232
@Mock
23-
private ComponentMockService marketPlaceExternalService;
33+
private MarketplaceService marketplaceExternalService;
2434

2535
private ComponentsFacade componentsFacade;
2636

2737
@BeforeEach
2838
void setup() {
29-
componentsFacade = new ComponentsFacade(marketPlaceExternalService);
39+
componentsFacade = new ComponentsFacade(marketplaceExternalService, marketplaceMapper); //TODO
3040
}
3141

3242
@Test
3343
void testGetProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception {
34-
Component testComponent = buildTestComponent();
44+
ProjectComponent testComponent = buildTestMarketplaceComponent();
3545

36-
when(marketPlaceExternalService.getProjectComponent(anyString(), eq("testId")))
46+
when(marketplaceExternalService.getProjectComponent(anyString(), eq("testId")))
3747
.thenReturn(testComponent);
3848

3949
Component retrievedComponent = componentsFacade.getProjectComponent("testId", "testId");
40-
assertThat(retrievedComponent).isEqualTo(testComponent);
50+
assertThat(retrievedComponent.getId()).isEqualTo(testComponent.getComponentId());
4151
}
4252

4353
@Test
4454
void testGetProjectComponent_whenNoComponentFound_thenReturnNull() throws Exception {
45-
when(marketPlaceExternalService.getProjectComponent(anyString(), eq("testId")))
55+
when(marketplaceExternalService.getProjectComponent(anyString(), eq("testId")))
4656
.thenReturn(null);
4757

4858
Component retrievedComponent = componentsFacade.getProjectComponent("testId", "testId");
@@ -51,22 +61,22 @@ void testGetProjectComponent_whenNoComponentFound_thenReturnNull() throws Except
5161

5262
@Test
5363
void testCreateProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception {
54-
Component testComponent = buildTestComponent();
64+
ProjectComponent testComponent = buildTestMarketplaceComponent();
5565
CreateComponentRequest testRequest = buildTestCreateComponentRequest();
5666

57-
when(marketPlaceExternalService.createProjectComponent(anyString(), eq(testRequest)))
67+
when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class)))
5868
.thenReturn(testComponent);
5969

6070
Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest);
61-
assertThat(retrievedComponent).isEqualTo(testComponent);
71+
assertThat(retrievedComponent.getId()).isEqualTo(testComponent.getComponentId());
6272
}
6373

6474

6575
@Test
6676
void testCreateProjectComponent_whenFailure_thenReturnNull() throws Exception {
6777
CreateComponentRequest testRequest = buildTestCreateComponentRequest();
6878

69-
when(marketPlaceExternalService.createProjectComponent(anyString(), eq(testRequest)))
79+
when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class)))
7080
.thenReturn(null);
7181

7282
Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest);

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package org.opendevstack.apiservice.project.util;
22

3+
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
4+
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
35
import org.opendevstack.apiservice.project.model.Component;
46
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
57
import org.opendevstack.apiservice.project.model.CreateComponentResponse;
68
import org.springframework.http.HttpStatus;
79

10+
import java.util.ArrayList;
11+
import java.util.List;
12+
813
public class TestObjectsBuilder {
914

1015
private TestObjectsBuilder() {
@@ -19,17 +24,32 @@ public static Component buildTestComponent() {
1924
return component;
2025
}
2126

27+
public static ProjectComponent buildTestMarketplaceComponent() {
28+
ProjectComponent component = new ProjectComponent();
29+
component.setComponentId("testComponentId");
30+
component.setCanBeDeleted(false);
31+
component.setComponentUrl("http://test.component.url");
32+
return component;
33+
}
34+
2235
public static CreateComponentRequest buildTestCreateComponentRequest() {
2336
CreateComponentRequest request = new CreateComponentRequest();
2437
request.setName("testComponentName");
2538
request.setProductId("testProductId");
2639
return request;
2740
}
2841

29-
public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String componentName, String projectId) {
42+
public static List<CreateComponentParameter> buildTestMarketplaceCreateComponentParameters() {
43+
List<CreateComponentParameter> parameters = new ArrayList<>();
44+
parameters.add(new CreateComponentParameter("name", "string", "testComponentName"));
45+
parameters.add(new CreateComponentParameter("productId", "string", "testProductId"));
46+
return parameters;
47+
}
48+
49+
public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String componentId, String projectId) {
3050
CreateComponentResponse response = new CreateComponentResponse();
3151
response.setErrorCode(HttpStatus.CREATED.value());
32-
response.setMessage(componentName + " component created successfully in project " + projectId);
52+
response.setMessage(componentId + " component created successfully in project " + projectId);
3353
return response;
3454
}
3555

core/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@
109109
<version>${project.version}</version>
110110
</dependency>
111111

112+
<dependency>
113+
<groupId>org.opendevstack.apiservice</groupId>
114+
<artifactId>external-service-marketplace</artifactId>
115+
<version>${project.version}</version>
116+
</dependency>
117+
112118
<dependency>
113119
<groupId>org.opendevstack.apiservice</groupId>
114120
<artifactId>api-project-users</artifactId>

0 commit comments

Comments
 (0)