added missing adapter to start loan agreement

This commit is contained in:
Luc Weinbrecht
2022-05-05 07:24:08 +02:00
parent f3b41a92f1
commit 75e884325f
10 changed files with 92 additions and 42 deletions

View File

@@ -2,10 +2,8 @@ package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common;
public class ProcessConstants {
public static final String PROCESS_DEFINITION = "Loan_Agreement";
public static final String LOAN_START_EVENT_MESSAGE_REF = "loanAgreementReceivedMessage";
public static final String LOAN_AGREEMENT_NUMBER = "loanAgreementNumber";
public static final String RECOMMENDATION_START_EVENT_MESSAGE_REF = "crossSellingPotentialDiscoveredMessage";
public static final String RECOMMENDATION_CUSTOMER_NUMBER = "customerNumber";

View File

@@ -1,24 +1,22 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.in.process;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.CaseId;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreement;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementQuery;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.RecommendationTrigger;
import lombok.RequiredArgsConstructor;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.*;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_AGREEMENT_NUMBER;
@RequiredArgsConstructor
@Component
public class SendCrossSellingRecommendation implements JavaDelegate {
private final RuntimeService runtimeService;
private final RecommendationTrigger recommendationTrigger;
private final LoanAgreementQuery loanAgreementQuery;
@Override
@@ -26,17 +24,6 @@ public class SendCrossSellingRecommendation implements JavaDelegate {
Long loanNumber = (Long) execution.getVariable(LOAN_AGREEMENT_NUMBER);
LoanAgreement loanAgreement = loanAgreementQuery.loadByNumber(new LoanAgreementNumber(loanNumber));
Map<String, Object> processVariables = new HashMap<>();
processVariables.put(RECOMMENDATION_CUSTOMER_NUMBER, loanAgreement.getRecipient().getCustomerNumber().getValue());
runtimeService.startProcessInstanceByMessage(
RECOMMENDATION_START_EVENT_MESSAGE_REF,
buildCrossSellingBusinessKey(loanNumber, execution.getBusinessKey()),
processVariables
);
}
private String buildCrossSellingBusinessKey(Long loanNumber, String caseId) {
return caseId + "-" + loanNumber;
recommendationTrigger.startLoanAgreement(new CaseId(execution.getBusinessKey()), loanAgreement);
}
}

View File

@@ -0,0 +1,28 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.out.process;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.CaseId;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.WorkflowCommand;
import lombok.RequiredArgsConstructor;
import org.camunda.bpm.engine.RuntimeService;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_AGREEMENT_NUMBER;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_START_EVENT_MESSAGE_REF;
@RequiredArgsConstructor
@Component
class ProcessEngineClient implements WorkflowCommand {
private final RuntimeService runtimeService;
@Override
public void startLoanAgreement(CaseId caseId, LoanAgreementNumber loanAgreementNumber) {
Map<String, Object> processVariables = new HashMap<>();
processVariables.put(LOAN_AGREEMENT_NUMBER, loanAgreementNumber.getValue());
runtimeService.startProcessInstanceByMessage(LOAN_START_EVENT_MESSAGE_REF, caseId.getValue(), processVariables);
}
}

View File

@@ -8,7 +8,7 @@ import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.in.LoanAgreemen
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementCommand;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementDistributor;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementQuery;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.RecommendationTrigger;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.WorkflowCommand;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -17,15 +17,15 @@ import org.springframework.stereotype.Service;
public class LoanAgreementService implements LoanAgreementCreation, LoanAgreementStatusCommand {
private final LoanAgreementCommand loanAgreementCommand;
private final RecommendationTrigger recommendationTrigger;
private final LoanAgreementDistributor loanAgreementDistributor;
private final LoanAgreementQuery loanAgreementQuery;
private final WorkflowCommand workflowCommand;
@Override
public void create(LoanAgreement loanAgreement, CaseId caseId) {
try {
LoanAgreement savedLoanAgreement = loanAgreementCommand.save(loanAgreement);
recommendationTrigger.startLoanAgreement(caseId, savedLoanAgreement);
workflowCommand.startLoanAgreement(caseId, savedLoanAgreement.getLoanAgreementNumber());
} catch (Exception e) {
throw new LoanAgreementException("Cloud not save the loan agreement", e);
}

View File

@@ -1,7 +1,6 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreement;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
public interface LoanAgreementCommand {
LoanAgreement save(LoanAgreement loanAgreement);

View File

@@ -0,0 +1,8 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.CaseId;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
public interface WorkflowCommand {
void startLoanAgreement(CaseId caseId, LoanAgreementNumber loanAgreementNumber);
}

View File

@@ -1,18 +1,16 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.in.process;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.CaseId;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreement;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementQuery;
import org.camunda.bpm.engine.RuntimeService;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.RecommendationTrigger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoSettings;
import java.util.HashMap;
import java.util.Map;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.*;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_AGREEMENT_NUMBER;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.TestdataGenerator.createLoanAgreementWithNumber;
import static org.mockito.Mockito.*;
@@ -23,7 +21,7 @@ class SendCrossSellingRecommendationTest {
private SendCrossSellingRecommendation classUnderTest;
@Mock
private RuntimeService runtimeService;
private RecommendationTrigger recommendationTrigger;
@Mock
LoanAgreementQuery loanAgreementQuery;
@@ -40,12 +38,6 @@ class SendCrossSellingRecommendationTest {
classUnderTest.execute(delegateExecution);
Map<String, Object> processVariables = new HashMap<>();
processVariables.put(RECOMMENDATION_CUSTOMER_NUMBER, loanAgreement.getRecipient().getCustomerNumber().getValue());
verify(runtimeService).startProcessInstanceByMessage(
RECOMMENDATION_START_EVENT_MESSAGE_REF,
caseId + "-" + loanAgreement.getLoanAgreementNumber().getValue(),
processVariables
);
verify(recommendationTrigger).startLoanAgreement(new CaseId(caseId), loanAgreement);
}
}

View File

@@ -1,7 +1,6 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.out.db;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreement;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

View File

@@ -0,0 +1,39 @@
package de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.out.process;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.CaseId;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreementNumber;
import org.camunda.bpm.engine.RuntimeService;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoSettings;
import java.util.HashMap;
import java.util.Map;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_AGREEMENT_NUMBER;
import static de.weinbrecht.luc.bpm.architecture.loan.agreement.adapter.common.ProcessConstants.LOAN_START_EVENT_MESSAGE_REF;
import static org.mockito.Mockito.verify;
@MockitoSettings
class ProcessEngineClientTest {
@InjectMocks
private ProcessEngineClient classUnderTest;
@Mock
private RuntimeService runtimeService;
private final CaseId caseId = new CaseId("11");
private final LoanAgreementNumber loanAgreementNumber = new LoanAgreementNumber(1L);
@Test
void should_class_runtime_service_to_start() {
Map<String, Object> processVariables = new HashMap<>();
processVariables.put(LOAN_AGREEMENT_NUMBER, loanAgreementNumber.getValue());
classUnderTest.startLoanAgreement(caseId, loanAgreementNumber);
verify(runtimeService).startProcessInstanceByMessage(LOAN_START_EVENT_MESSAGE_REF, caseId.getValue(), processVariables);
}
}

View File

@@ -6,7 +6,7 @@ import de.weinbrecht.luc.bpm.architecture.loan.agreement.domain.model.LoanAgreem
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementCommand;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementDistributor;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.LoanAgreementQuery;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.RecommendationTrigger;
import de.weinbrecht.luc.bpm.architecture.loan.agreement.usecase.out.WorkflowCommand;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@@ -27,7 +27,7 @@ class LoanAgreementServiceTest {
private LoanAgreementCommand loanAgreementCommand;
@Mock
private RecommendationTrigger recommendationTrigger;
private WorkflowCommand workflowCommand;
@Mock
private LoanAgreementDistributor loanAgreementDistributor;
@@ -44,7 +44,7 @@ class LoanAgreementServiceTest {
classUnderTest.create(loanAgreement, caseId);
verify(recommendationTrigger).startLoanAgreement(caseId, savedLoanAgreement);
verify(workflowCommand).startLoanAgreement(caseId, savedLoanAgreement.getLoanAgreementNumber());
}
@Test
@@ -56,7 +56,7 @@ class LoanAgreementServiceTest {
assertThrows(LoanAgreementException.class,
() -> classUnderTest.create(loanAgreement, caseId));
verify(recommendationTrigger, never()).startLoanAgreement(eq(caseId), any());
verify(workflowCommand, never()).startLoanAgreement(eq(caseId), any());
}
@Test