@Test
public void shouldDeleteIntegrationsUpdatingDeploymentsAndDeletingOpensShiftResources() {
final Integration integration = new Integration.Builder().id("to-delete").build();
when(dataManager.fetch(Integration.class, "to-delete")).thenReturn(integration);
final Integration firstIntegration = new Integration.Builder().createFrom(integration).name("first to delete")
.build();
final IntegrationDeployment deployment1 = new IntegrationDeployment.Builder().spec(firstIntegration).version(1)
.targetState(IntegrationDeploymentState.Unpublished)
.stepsDone(Collections.singletonMap("deploy", "something")).build();
final Integration secondIntegration = new Integration.Builder().createFrom(integration).name("second to delete")
.build();
final IntegrationDeployment deployment2 = new IntegrationDeployment.Builder().spec(secondIntegration).version(2)
.currentState(IntegrationDeploymentState.Published).targetState(IntegrationDeploymentState.Published)
.stepsDone(Collections.singletonMap("deploy", "something")).build();
when(dataManager.fetchAllByPropertyValue(IntegrationDeployment.class, "integrationId", "to-delete"))
.thenReturn(Stream.of(deployment1, deployment2));
final ArgumentCaptor<Integration> updated = ArgumentCaptor.forClass(Integration.class);
doNothing().when(dataManager).update(updated.capture());
handler.delete("to-delete");
assertThat(updated.getValue()).isEqualToIgnoringGivenFields(
new Integration.Builder().createFrom(integration).isDeleted(true).build(), "updatedAt");
verify(dataManager).update(new IntegrationDeployment.Builder().spec(firstIntegration).version(1)
.currentState(IntegrationDeploymentState.Pending).targetState(IntegrationDeploymentState.Unpublished)
.build().deleted());
verify(dataManager).update(new IntegrationDeployment.Builder().spec(secondIntegration).version(2)
.currentState(IntegrationDeploymentState.Published).targetState(IntegrationDeploymentState.Unpublished)
.build().deleted().deleted());
verify(openShiftService).delete("first to delete");
verify(openShiftService).delete("second to delete");
}