Skip to content

Commit b79dfe1

Browse files
Add support for catalogItemSlug in provisioning operations and refactor related test cases.
1 parent 0d9c140 commit b79dfe1

7 files changed

Lines changed: 116 additions & 51 deletions

File tree

src/main/java/org/opendevstack/component_provisioner/server/controllers/ProvisionResultsApiController.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ public class ProvisionResultsApiController implements ProvisionResultsApi {
2323
private final AuthenticationProvider authenticationProvider;
2424
private final ProvisionResultsApiFacade provisionResultsApiFacade;
2525

26-
public ProvisionResultsApiController(AuthenticationProvider authenticationProvider, ProvisionResultsApiFacade provisionResultsApiFacade) {
27-
this.authenticationProvider = authenticationProvider;
28-
this.provisionResultsApiFacade = provisionResultsApiFacade;
29-
}
30-
3126
@Override
3227
public ResponseEntity<Void> notifyProvisioningStatusUpdate(String projectKey, String status, NotifyProvisioningStatusUpdateRequest notifyProvisioningCompletedRequest) {
3328
log.debug("Notifying provision status update. ProjectKey: {}, Status: {}, notifyProvisioningCompletedRequest: {}", projectKey, status, notifyProvisioningCompletedRequest);
@@ -36,13 +31,15 @@ public ResponseEntity<Void> notifyProvisioningStatusUpdate(String projectKey, St
3631

3732
provisionResultsApiFacade.validate(projectKey, status, notifyProvisioningCompletedRequest);
3833

39-
provisionResultsApiFacade.notifyProvisioningStatusUpdate(projectKey,
34+
provisionResultsApiFacade.notifyProvisioningStatusUpdate(
35+
projectKey,
4036
ProjectComponentStatus.valueOf(status),
4137
notifyProvisioningCompletedRequest.getComponentId(),
4238
notifyProvisioningCompletedRequest.getCatalogItemId(),
4339
notifyProvisioningCompletedRequest.getCatalogItemSlug(),
4440
notifyProvisioningCompletedRequest.getComponentUrl(),
45-
accessToken);
41+
accessToken
42+
);
4643

4744
return ResponseEntity.ok().build();
4845
}

src/main/java/org/opendevstack/component_provisioner/server/facade/ProvisionResultsApiFacade.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,19 @@ public AwxResponse requestProvisionToAwx(String projectKey, String componentId,
8282
}
8383

8484
public void notifyProvisioningStatusUpdate(String projectKey, ProjectComponentStatus status, String componentId,
85-
String catalogItemId, String componentUrl, String accessToken) {
85+
String catalogItemId,String catalogItemSlug, String componentUrl,
86+
String accessToken) {
8687
String resolvedCatalogItemId = catalogItemId;
87-
resolvedCatalogItemId = resolveCatalogItemId(catalogItemId, catalogItemSlug, idToken, resolvedCatalogItemId);
88-
provisionService.notifyProvisioningStatusUpdate(projectKey, status, componentId, resolvedCatalogItemId, componentUrl, idToken, accessToken);
88+
resolvedCatalogItemId = resolveCatalogItemId(accessToken, catalogItemId, catalogItemSlug, resolvedCatalogItemId);
89+
provisionService.notifyProvisioningStatusUpdate(projectKey, status, componentId, resolvedCatalogItemId, componentUrl, accessToken);
8990
}
9091

91-
private String resolveCatalogItemId(String catalogItemId, String catalogItemSlug, String idToken, String resolvedCatalogItemId) {
92+
private String resolveCatalogItemId(String accessToken, String catalogItemId, String catalogItemSlug, String resolvedCatalogItemId) {
9293
if (StringUtils.isNotBlank(catalogItemSlug) && StringUtils.isBlank(catalogItemId)) {
9394
log.debug("Resolving catalogItemId for catalogItemSlug: {}", catalogItemSlug);
9495
CatalogItem catalogItem;
9596
try {
96-
catalogItem = componentCatalogService.getCatalogItemBySlug(idToken, catalogItemSlug);
97+
catalogItem = componentCatalogService.getCatalogItemBySlug(accessToken, catalogItemSlug);
9798
} catch (RestClientException e) {
9899
throw new SlugNotFoundException("Catalog item slug not found: " + catalogItemSlug);
99100
}
@@ -103,10 +104,6 @@ private String resolveCatalogItemId(String catalogItemId, String catalogItemSlug
103104
return resolvedCatalogItemId;
104105
}
105106

106-
public void deleteProvisioningStatus(String projectKey, String componentId, String idToken) {
107-
provisionService.deleteProvisioningStatus(projectKey, componentId, idToken);
108-
}
109-
110107
public void deleteProvisioningStatus(String projectKey, String componentId, String accessToken) {
111108
provisionService.deleteProvisioningStatus(projectKey, componentId, accessToken);
112109
}

src/main/java/org/opendevstack/component_provisioner/server/services/ComponentCatalogService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ public CatalogItem getCatalogItem(String accessToken, String catalogItemId, Stri
150150
}
151151

152152
@Cacheable
153-
public CatalogItem getCatalogItemBySlug(String idToken, String slug) {
154-
var apiClient = apiClientsBuilder.componentCatalogApiClient(idToken, componentCatalogServiceProps.getBaseRestUrl().toString());
153+
public CatalogItem getCatalogItemBySlug(String accessToken, String slug) {
154+
var apiClient = apiClientsBuilder.componentCatalogApiClient(accessToken, componentCatalogServiceProps.getBaseRestUrl().toString());
155155
var catalogItemsApi = apiClientsBuilder.catalogItemsApi(apiClient);
156156

157157
var catalogItem = catalogItemsApi.getCatalogItemBySlug(slug);

src/test/java/org/opendevstack/component_provisioner/server/controllers/ProvisionResultsApiControllerTest.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.opendevstack.component_provisioner.server.controllers.model.ProjectComponentStatus;
1010
import org.opendevstack.component_provisioner.server.controllers.model.awx.AwxResponse;
1111
import org.opendevstack.component_provisioner.server.facade.ProvisionResultsApiFacade;
12+
import org.opendevstack.component_provisioner.server.model.CreateIncidentAction;
1213
import org.opendevstack.component_provisioner.server.model.CreateIncidentActionMother;
1314
import org.opendevstack.component_provisioner.server.model.NotifyProvisioningStatusUpdateRequest;
1415
import org.opendevstack.component_provisioner.server.model.ProvisionActionResponse;
@@ -43,12 +44,14 @@ void givenAProvisionService_whenNotifyProvisioningCompletedIsCalled_thenReturnsO
4344
var status = ProjectComponentStatus.CREATED;
4445
var componentId = "componentId";
4546
var catalogItemId = "catalogItemId";
47+
var catalogItemSlug = "catalogItemSlug";
4648
var componentUrl = "componentUrl";
4749
var accessToken = "accessToken";
4850

4951
var request = new NotifyProvisioningStatusUpdateRequest();
5052
request.setComponentId(componentId);
5153
request.setCatalogItemId(catalogItemId);
54+
request.setCatalogItemSlug(catalogItemSlug);
5255
request.setComponentUrl(componentUrl);
5356

5457
when(authenticationProvider.getAccessToken()).thenReturn(accessToken);
@@ -58,12 +61,12 @@ void givenAProvisionService_whenNotifyProvisioningCompletedIsCalled_thenReturnsO
5861

5962
// then
6063
assertEquals(HttpStatus.OK, response.getStatusCode());
61-
verify(provisionResultsApiFacade).notifyProvisioningStatusUpdate(projectKey, status, componentId, catalogItemId, componentUrl, accessToken);
62-
verify(provisionResultsApiFacade).validate(projectKey, status.name());
64+
verify(provisionResultsApiFacade).notifyProvisioningStatusUpdate(projectKey, status, componentId, catalogItemId, catalogItemSlug, componentUrl, accessToken);
65+
verify(provisionResultsApiFacade).validate(projectKey, status.name(), request);
6366
}
6467

6568
@Test
66-
void givenAProjectKey_AndAComponentId_whenDeleteProvisioningStatus_thenReturnsOk() {
69+
void givenAProjectKeyAndAComponentId_whenDeleteProvisioningStatusIsCalled_thenReturnsOk() {
6770
// given
6871
var projectKey = "project-key";
6972
var componentId = "componentId";
@@ -82,7 +85,7 @@ void givenAProjectKey_AndAComponentId_whenDeleteProvisioningStatus_thenReturnsOk
8285
}
8386

8487
@Test
85-
void givenAProjectKey_AndAComponentId_AndCreateIncidentAction_whenCreateIncident_thenReturnsOk() {
88+
void givenAProjectKeyAndAComponentIdAndCreateIncidentAction_whenCreateIncidentIsCalled_thenReturnsOk() {
8689
// given
8790
var projectKey = "project-key";
8891
var componentId = "componentId";
@@ -104,26 +107,26 @@ void givenAProjectKey_AndAComponentId_AndCreateIncidentAction_whenCreateIncident
104107
verify(provisionResultsApiFacade).validate(projectKey, componentId, createIncidentAction);
105108
verify(provisionResultsApiFacade).addSystemParametersToAction(projectKey, createIncidentAction);
106109
verify(provisionResultsApiFacade).requestProvisionToAwx(projectKey, componentId, createIncidentAction);
107-
verify(provisionResultsApiFacade).notifyProvisioningStatusUpdate(eq(projectKey), eq(ProjectComponentStatus.DELETING), eq(componentId), isNull(), isNull(), anyString());
110+
verify(provisionResultsApiFacade).notifyProvisioningStatusUpdate(eq(projectKey), eq(ProjectComponentStatus.DELETING), eq(componentId), isNull(), isNull(), isNull(), anyString());
108111
}
109112

110113
@Test
111-
void givenInvalidComponentId_whenCreateIncident_thenThrowsInvalidRestEntityException() {
114+
void givenInvalidComponentId_whenCreateIncidentIsCalled_thenThrowsInvalidRestEntityException() {
112115
// given
113116
String projectKey = "PRJ";
114117
String componentId = "";
115118

116119
var action = CreateIncidentActionMother.of();
117120

118-
doThrow(new InvalidRestEntityException("project_key, component_id are required.")).when(provisionResultsApiFacade).validate(any(), any(), any());
121+
doThrow(new InvalidRestEntityException("project_key, component_id are required.")).when(provisionResultsApiFacade).validate(any(String.class), any(String.class), any(CreateIncidentAction.class));
119122

120123
// when / then
121124
var ex = assertThrows(InvalidRestEntityException.class, () -> provisionResultsApiController.createIncident(projectKey, componentId, action));
122125
assertThat(ex.getMessage()).isEqualTo("project_key, component_id are required.");
123126
}
124127

125128
@Test
126-
void givenAProjectKey_AndAComponentId_AndCreateIncidentAction_whenCreateIncident_AndComponentAlreadyInDeletingState_thenReturnsOk_andIgnoreAWXCall() {
129+
void givenAProjectKeyAndAComponentIdAndCreateIncidentAction_whenCreateIncidentIsCalledAndComponentAlreadyInDeletingState_thenReturnsOkAndIgnoreAWXCall() {
127130
// given
128131
var projectKey = "project-key";
129132
var componentId = "componentId";
@@ -143,7 +146,7 @@ void givenAProjectKey_AndAComponentId_AndCreateIncidentAction_whenCreateIncident
143146
}
144147

145148
@Test
146-
void givenInvalidStatus_whenNotifyProvisioningStatusUpdate_then400OrInvalidRestEntityException() {
149+
void givenInvalidStatus_whenNotifyProvisioningStatusUpdateIsCalled_thenThrowsInvalidRestEntityException() {
147150
// given
148151
var projectKey = "project-key";
149152
var invalidStatus = "NOT_A_STATUS";
@@ -152,7 +155,7 @@ void givenInvalidStatus_whenNotifyProvisioningStatusUpdate_then400OrInvalidRestE
152155
request.setCatalogItemId("cat-1");
153156
request.setComponentUrl("http://example");
154157

155-
doThrow(new InvalidRestEntityException(exceptionMsg)).when(provisionResultsApiFacade).validate(any(String.class), any(String.class));
158+
doThrow(new InvalidRestEntityException(exceptionMsg)).when(provisionResultsApiFacade).validate(any(String.class), any(String.class), any(NotifyProvisioningStatusUpdateRequest.class));
156159

157160
// when / then
158161
var exception = assertThrows(InvalidRestEntityException.class, () -> provisionResultsApiController.notifyProvisioningStatusUpdate(projectKey, invalidStatus, request));
@@ -161,7 +164,7 @@ void givenInvalidStatus_whenNotifyProvisioningStatusUpdate_then400OrInvalidRestE
161164
}
162165

163166
@Test
164-
void givenLowercaseStatus_whenNotifyProvisioningStatusUpdate_thenEitherOkOrReject() {
167+
void givenLowercaseStatus_whenNotifyProvisioningStatusUpdateIsCalled_thenThrowsInvalidRestEntityException() {
165168
// given
166169
var projectKey = "project-key";
167170
var statusLowercase = "created";
@@ -170,7 +173,7 @@ void givenLowercaseStatus_whenNotifyProvisioningStatusUpdate_thenEitherOkOrRejec
170173
request.setCatalogItemId("cat-1");
171174
request.setComponentUrl("http://example");
172175

173-
doThrow(new InvalidRestEntityException(exceptionMsg)).when(provisionResultsApiFacade).validate(any(String.class), any(String.class));
176+
doThrow(new InvalidRestEntityException(exceptionMsg)).when(provisionResultsApiFacade).validate(any(String.class), any(String.class), any(NotifyProvisioningStatusUpdateRequest.class));
174177

175178
// when / then
176179
var exception = assertThrows(InvalidRestEntityException.class, () -> provisionResultsApiController.notifyProvisioningStatusUpdate(projectKey, statusLowercase, request));

0 commit comments

Comments
 (0)