From c6c78baca7d3d9ce4520cb7699b4ec65e2273915 Mon Sep 17 00:00:00 2001 From: nmirasch Date: Mon, 5 Aug 2024 13:16:33 +0200 Subject: [PATCH] =?UTF-8?q?RHPAM-4779:=20SLA=20due=20date=20value=20in=20P?= =?UTF-8?q?rocessInstanceLog=20table=20is=20not=20upd=E2=80=A6=20(#2396)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * RHPAM-4779: SLA due date value in ProcessInstanceLog table is not updated after updating process SLA * Add test for coverage --------- Co-authored-by: gmunozfe --- .../process/audit/AbstractAuditLogger.java | 3 +- .../audit/AbstractAuditLoggerAdapter.java | 7 + .../audit/JPAWorkingMemoryDbLogger.java | 24 +++ .../audit/event/AuditEventBuilder.java | 3 + .../event/DefaultAuditEventBuilderImpl.java | 23 +++ .../audit/jms/AsyncAuditLogProducer.java | 9 +- .../instance/command/UpdateTimerCommand.java | 9 ++ .../command/UpdateTimerCommandTest.java | 147 ++++++++++++++++++ .../impl/ManagedAuditEventBuilderImpl.java | 8 + .../audit/ServicesAwareAuditEventBuilder.java | 8 + .../ServicesAwareAuditEventBuilderTest.java | 29 +++- 11 files changed, 267 insertions(+), 3 deletions(-) create mode 100644 jbpm-flow/src/test/java/org/jbpm/process/instance/command/UpdateTimerCommandTest.java diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java index 25dbb5b909..fed845ac89 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLogger.java @@ -35,7 +35,8 @@ public abstract class AbstractAuditLogger implements ProcessEventListener { public static final int BEFORE_VAR_CHANGE_EVENT_TYPE = 8; public static final int AFTER_VAR_CHANGE_EVENT_TYPE = 9; public static final int ON_ASYNC_NODE_EVENT_TYPE = 10; - + public static final int ON_DATA_CHANGE_EVENT_TYPE = 11; + protected AuditEventBuilder builder = new DefaultAuditEventBuilderImpl(); /* diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLoggerAdapter.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLoggerAdapter.java index 5ea3376c20..ad7e79fc44 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLoggerAdapter.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/AbstractAuditLoggerAdapter.java @@ -20,6 +20,7 @@ import org.jbpm.process.instance.impl.ProcessInstanceImpl; import org.jbpm.workflow.instance.impl.NodeInstanceImpl; import org.kie.api.event.process.ProcessCompletedEvent; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; @@ -145,4 +146,10 @@ public void afterSLAViolated(SLAViolatedEvent event) { protected abstract void slaProcessInstanceViolated(SLAViolatedEvent event); + @Override + public void onProcessDataChangedEvent(ProcessDataChangedEvent event){ + processDataChanged(event); + } + + protected abstract void processDataChanged(ProcessDataChangedEvent event); } diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/JPAWorkingMemoryDbLogger.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/JPAWorkingMemoryDbLogger.java index 57ce2289d9..566fcaf15c 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/JPAWorkingMemoryDbLogger.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/JPAWorkingMemoryDbLogger.java @@ -44,6 +44,7 @@ import org.jbpm.process.core.impl.ProcessImpl; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; import org.kie.api.event.process.ProcessCompletedEvent; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessEventListener; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; @@ -181,6 +182,27 @@ protected void processStarted(ProcessStartedEvent event) { persist(log, event); } + @Override + protected void processDataChanged(ProcessDataChangedEvent event) { + EntityManager em = getEntityManager(event); + Object tx = joinTransaction(em); + long processInstanceId = event.getProcessInstance().getId(); + ProcessInstanceLog log = (ProcessInstanceLog) getProcessInstanceMetadata(event.getProcessInstance(), METADATA_PROCESSINTANCE_LOG); + if (log == null) { + List result = em.createQuery("from ProcessInstanceLog as log where log.processInstanceId = :piId and log.end is null") + .setParameter("piId", processInstanceId).getResultList(); + if (result != null && !result.isEmpty()) { + log = result.get(result.size() - 1); + } + } + if (log != null) { + log.setSlaCompliance(((ProcessInstance) event.getProcessInstance()).getSlaCompliance()); + log.setSlaDueDate(((ProcessInstance) event.getProcessInstance()).getSlaDueDate()); + setProcessInstanceMetadata(event.getProcessInstance(), METADATA_PROCESSINTANCE_LOG, log); + em.merge(log); + } + leaveTransaction(em, tx); + } @Override protected void processCompleted(ProcessCompletedEvent event) { @@ -227,6 +249,7 @@ protected void slaProcessInstanceViolated(SLAViolatedEvent event) { } if (log != null) { log.setSlaCompliance(((ProcessInstance) event.getProcessInstance()).getSlaCompliance()); + log.setSlaDueDate(((ProcessInstance) event.getProcessInstance()).getSlaDueDate()); setProcessInstanceMetadata(event.getProcessInstance(), METADATA_PROCESSINTANCE_LOG, log); em.merge(log); } @@ -252,6 +275,7 @@ protected void slaNodeInstanceViolated(SLAViolatedEvent event) { } if (log != null) { log.setSlaCompliance(((NodeInstance) event.getNodeInstance()).getSlaCompliance()); + log.setSlaDueDate(((ProcessInstance) event.getProcessInstance()).getSlaDueDate()); setNodeInstanceMetadata(event.getNodeInstance(), METADATA_NODEINSTANCE_LOG, log); ((NodeInstanceImpl) event.getNodeInstance()).getMetaData().put(METADATA_NODEINSTANCE_LOG, log); em.merge(log); diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/event/AuditEventBuilder.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/event/AuditEventBuilder.java index 044a110d7a..259c2bfb02 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/event/AuditEventBuilder.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/event/AuditEventBuilder.java @@ -16,6 +16,7 @@ package org.jbpm.process.audit.event; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessCompletedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; @@ -38,4 +39,6 @@ public interface AuditEventBuilder { AuditEvent buildEvent(ProcessAsyncNodeScheduledEvent pnle); AuditEvent buildEvent(ProcessVariableChangedEvent pvce); + + AuditEvent buildEvent(ProcessDataChangedEvent pdce); } diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/event/DefaultAuditEventBuilderImpl.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/event/DefaultAuditEventBuilderImpl.java index 107ac72de3..13f7a5ee02 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/event/DefaultAuditEventBuilderImpl.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/event/DefaultAuditEventBuilderImpl.java @@ -32,6 +32,7 @@ import org.kie.api.event.process.ProcessNodeTriggeredEvent; import org.kie.api.event.process.ProcessStartedEvent; import org.kie.api.event.process.ProcessVariableChangedEvent; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.process.NodeInstance; import org.kie.api.runtime.process.ProcessInstance; @@ -256,6 +257,28 @@ public AuditEvent buildEvent(ProcessVariableChangedEvent pvce) { return log; } + @Override + public AuditEvent buildEvent(ProcessDataChangedEvent pdce) { + ProcessInstanceImpl pi = (ProcessInstanceImpl) pdce.getProcessInstance(); + ProcessInstanceLog logEvent = new ProcessInstanceLog(pi.getId(), pi.getProcessId()); + logEvent.setOutcome(pi.getOutcome()); + logEvent.setStatus(pi.getState()); + logEvent.setProcessInstanceDescription( pi.getDescription() ); + logEvent.setSlaCompliance(pi.getSlaCompliance()); + logEvent.setSlaDueDate(pi.getSlaDueDate()); + logEvent.setProcessName(pi.getProcess().getName()); + logEvent.setProcessVersion(pi.getProcess().getVersion()); + logEvent.setProcessType(((WorkflowProcess)pi.getProcess()).getProcessType()); + // store correlation key in its external form + CorrelationKey correlationKey = (CorrelationKey) pi.getMetaData().get("CorrelationKey"); + if (correlationKey != null) { + logEvent.setCorrelationKey(correlationKey.toExternalForm()); + } + long parentProcessInstanceId = (Long) pi.getMetaData().getOrDefault("ParentProcessInstanceId", -1L); + logEvent.setParentProcessInstanceId(parentProcessInstanceId); + return logEvent; + } + protected String getNodeContainerId(NodeContainer nodeContainer) { if (nodeContainer instanceof Node) { return (String) ((Node) nodeContainer).getMetaData().get("UniqueId"); diff --git a/jbpm-audit/src/main/java/org/jbpm/process/audit/jms/AsyncAuditLogProducer.java b/jbpm-audit/src/main/java/org/jbpm/process/audit/jms/AsyncAuditLogProducer.java index ff927ee0aa..ba5b32ea8e 100644 --- a/jbpm-audit/src/main/java/org/jbpm/process/audit/jms/AsyncAuditLogProducer.java +++ b/jbpm-audit/src/main/java/org/jbpm/process/audit/jms/AsyncAuditLogProducer.java @@ -33,6 +33,7 @@ import org.jbpm.process.audit.variable.ProcessIndexerManager; import org.jbpm.workflow.instance.impl.NodeInstanceImpl; import org.kie.api.event.process.ProcessCompletedEvent; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; @@ -185,7 +186,13 @@ public void afterProcessStarted(ProcessStartedEvent event) { @Override public void beforeProcessCompleted(ProcessCompletedEvent event) { } - + + @Override + public void onProcessDataChangedEvent(ProcessDataChangedEvent event) { + ProcessInstanceLog log = (ProcessInstanceLog) builder.buildEvent(event); + sendMessage(log, ON_DATA_CHANGE_EVENT_TYPE, 9); + } + protected void sendMessage(Object messageContent, Integer eventType, int priority) { if (connectionFactory == null && queue == null) { throw new IllegalStateException("ConnectionFactory and Queue cannot be null"); diff --git a/jbpm-flow/src/main/java/org/jbpm/process/instance/command/UpdateTimerCommand.java b/jbpm-flow/src/main/java/org/jbpm/process/instance/command/UpdateTimerCommand.java index 38734c7a63..0907d72914 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/instance/command/UpdateTimerCommand.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/instance/command/UpdateTimerCommand.java @@ -27,8 +27,10 @@ import org.drools.core.command.SingleSessionCommandService; import org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession; +import org.drools.core.common.InternalKnowledgeRuntime; import org.drools.core.impl.StatefulKnowledgeSessionImpl; import org.jbpm.process.instance.InternalProcessRuntime; +import org.jbpm.process.instance.ProcessInstance; import org.jbpm.process.instance.timer.TimerInstance; import org.jbpm.process.instance.timer.TimerManager; import org.jbpm.ruleflow.instance.RuleFlowProcessInstance; @@ -135,6 +137,7 @@ public Void execute(Context context ) { if (newTimer != null) { wfp.internalSetSlaTimerId(newTimer.getId()); wfp.internalSetSlaDueDate(new Date(System.currentTimeMillis() + newTimer.getDelay())); + fireProcessInstanceDataChangedEvent(wfp); return null; } @@ -239,4 +242,10 @@ protected TimerInstance rescheduleTimer(TimerInstance timer, TimerManager tm) { return newTimer; } + + private void fireProcessInstanceDataChangedEvent(ProcessInstance processInstance){ + InternalKnowledgeRuntime kruntime = processInstance.getKnowledgeRuntime(); + InternalProcessRuntime processRuntime = (InternalProcessRuntime) kruntime.getProcessRuntime(); + processRuntime.getProcessEventSupport().fireAfterProcessDataChanged(processInstance, kruntime); + } } diff --git a/jbpm-flow/src/test/java/org/jbpm/process/instance/command/UpdateTimerCommandTest.java b/jbpm-flow/src/test/java/org/jbpm/process/instance/command/UpdateTimerCommandTest.java new file mode 100644 index 0000000000..c922781457 --- /dev/null +++ b/jbpm-flow/src/test/java/org/jbpm/process/instance/command/UpdateTimerCommandTest.java @@ -0,0 +1,147 @@ +/* + * Copyright 2023 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jbpm.process.instance.command; + +import org.drools.core.common.InternalWorkingMemory; +import org.drools.core.impl.KnowledgeBaseFactory; +import org.drools.core.runtime.process.ProcessRuntimeFactory; +import org.kie.api.event.process.*; + +import org.jbpm.process.instance.InternalProcessRuntime; +import org.jbpm.process.instance.ProcessRuntimeFactoryServiceImpl; +import org.jbpm.process.instance.timer.TimerInstance; +import org.jbpm.process.instance.timer.TimerManager; +import org.jbpm.ruleflow.instance.RuleFlowProcessInstance; +import org.jbpm.test.util.AbstractBaseTest; +import org.junit.Test; +import org.kie.api.KieBase; +import org.kie.api.runtime.KieSession; + +import org.kie.internal.command.RegistryContext; +import org.mockito.Mockito; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +public class UpdateTimerCommandTest extends AbstractBaseTest { + + public void addLogger() { + logger = LoggerFactory.getLogger(this.getClass()); + } + + static { + ProcessRuntimeFactory.setProcessRuntimeFactoryService(new ProcessRuntimeFactoryServiceImpl()); + } + + @Test + public void testUpdateTimerCommand() throws Exception { + long processInstanceId = 1234; + KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); + final KieSession workingMemory = kbase.newKieSession(); + InternalProcessRuntime processRuntime = ((InternalProcessRuntime) ((InternalWorkingMemory) workingMemory).getProcessRuntime()); + final List processEventList = new ArrayList(); + + final ProcessEventListener processEventListener = new ProcessEventListener() { + @Override + public void beforeProcessStarted(ProcessStartedEvent event) { + processEventList.add(event); + } + + @Override + public void afterProcessStarted(ProcessStartedEvent event) { + processEventList.add(event); + } + + @Override + public void beforeProcessCompleted(ProcessCompletedEvent event) { + processEventList.add(event); + } + + @Override + public void afterProcessCompleted(ProcessCompletedEvent event) { + processEventList.add(event); + } + + @Override + public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { + processEventList.add(event); + } + + @Override + public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { + processEventList.add(event); + } + + @Override + public void beforeNodeLeft(ProcessNodeLeftEvent event) { + processEventList.add(event); + } + + @Override + public void afterNodeLeft(ProcessNodeLeftEvent event) { + processEventList.add(event); + } + + @Override + public void beforeVariableChanged(ProcessVariableChangedEvent event) { + processEventList.add(event); + } + + @Override + public void afterVariableChanged(ProcessVariableChangedEvent event) { + processEventList.add(event); + } + + public void onProcessDataChangedEvent(ProcessDataChangedEvent event) { + processEventList.add(event); + } + + }; + workingMemory.addEventListener(processEventListener); + + RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance() ; + processInstance.setKnowledgeRuntime(((InternalWorkingMemory) workingMemory).getKnowledgeRuntime()); + processInstance.setId(processInstanceId); + + TimerManager timerManager = ((InternalProcessRuntime) ((InternalWorkingMemory) workingMemory).getProcessRuntime()).getTimerManager(); + TimerInstance timer = new TimerInstance(); + timer.setDelay(100000); + timerManager.registerTimer(timer, processInstance); + + processInstance.internalSetSlaTimerId(timer.getId()); + processRuntime.getProcessInstanceManager().internalAddProcessInstance(processInstance); + RegistryContext mockContext = Mockito.mock(RegistryContext.class); + when(mockContext.lookup(KieSession.class)).thenReturn(workingMemory); + + UpdateTimerCommand command = new UpdateTimerCommand(processInstance.getId(), timer.getId(), + timer.getDelay(), timer.getPeriod(), timer.getRepeatLimit()); + command.execute(mockContext); + + assertEquals(1, processEventList.size()); + assertTrue(processEventList.get(0) instanceof ProcessDataChangedEvent); + assertEquals(processInstanceId, ((ProcessDataChangedEvent) processEventList.get(0)).getProcessInstance().getId()); + + timerManager.cancelTimer(processInstanceId, timer.getId()); + } + +} diff --git a/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/ManagedAuditEventBuilderImpl.java b/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/ManagedAuditEventBuilderImpl.java index b227d5c819..23c9941b6b 100644 --- a/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/ManagedAuditEventBuilderImpl.java +++ b/jbpm-runtime-manager/src/main/java/org/jbpm/runtime/manager/impl/ManagedAuditEventBuilderImpl.java @@ -21,6 +21,7 @@ import org.jbpm.process.audit.VariableInstanceLog; import org.jbpm.process.audit.event.AuditEvent; import org.jbpm.process.audit.event.DefaultAuditEventBuilderImpl; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessCompletedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; @@ -77,6 +78,13 @@ public AuditEvent buildEvent(ProcessAsyncNodeScheduledEvent pnse) { return nodeInstanceLog; } + @Override + public AuditEvent buildEvent(ProcessDataChangedEvent pdce) { + ProcessInstanceLog instanceLog = (ProcessInstanceLog) super.buildEvent(pdce); + instanceLog.setExternalId(ownerId); + return instanceLog; + } + public String getOwnerId() { return ownerId; } diff --git a/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilder.java b/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilder.java index 272dc79425..a24a962f59 100644 --- a/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilder.java +++ b/jbpm-services/jbpm-kie-services/src/main/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilder.java @@ -25,6 +25,7 @@ import org.jbpm.process.core.context.variable.VariableScope; import org.jbpm.process.instance.ProcessInstance; import org.jbpm.process.instance.context.variable.VariableScopeInstance; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.event.process.ProcessCompletedEvent; import org.kie.api.event.process.ProcessNodeLeftEvent; import org.kie.api.event.process.ProcessAsyncNodeScheduledEvent; @@ -96,6 +97,13 @@ public AuditEvent buildEvent(ProcessVariableChangedEvent pvce) { return variableLog; } + @Override + public AuditEvent buildEvent(ProcessDataChangedEvent pdce) { + ProcessInstanceLog instanceLog = (ProcessInstanceLog) super.buildEvent(pdce); + instanceLog.setExternalId(deploymentUnitId); + return instanceLog; + } + public String getDeploymentUnitId() { return deploymentUnitId; } diff --git a/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilderTest.java b/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilderTest.java index 05da8fc851..326dd64416 100644 --- a/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilderTest.java +++ b/jbpm-services/jbpm-kie-services/src/test/java/org/jbpm/kie/services/impl/audit/ServicesAwareAuditEventBuilderTest.java @@ -21,10 +21,14 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.Date; import java.util.HashMap; import java.util.Map; import org.drools.core.event.ProcessStartedEventImpl; +import org.drools.core.event.rule.impl.ProcessDataChangedEventImpl; import org.jbpm.kie.services.test.ProcessServiceImplTest; import org.jbpm.kie.test.util.AbstractKieServicesBaseTest; import org.jbpm.process.audit.ProcessInstanceLog; @@ -35,6 +39,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.kie.api.event.process.ProcessStartedEvent; +import org.kie.api.event.process.ProcessDataChangedEvent; import org.kie.api.runtime.KieSession; import org.kie.internal.process.CorrelationKey; import org.mockito.Mock; @@ -46,6 +51,10 @@ public class ServicesAwareAuditEventBuilderTest extends AbstractKieServicesBaseTest { private static final Logger logger = LoggerFactory.getLogger(ProcessServiceImplTest.class); + + private static final Date TEST_DATE = Date.from(LocalDate.of(2024, 3, 14).atStartOfDay(ZoneId.systemDefault()).toInstant()); + + private static final String TEST_DEPLOYMENT_UNIT = "unit1"; private Map processMetadata = new HashMap<>(); @@ -73,6 +82,7 @@ public void setUp() throws Exception { builder = new ServicesAwareAuditEventBuilder(); builder.setIdentityProvider(identityProvider); + builder.setDeploymentUnitId(TEST_DEPLOYMENT_UNIT); setUpMocks(); } @@ -83,7 +93,8 @@ private void setUpMocks() { when(processInstance.getId()).thenReturn(1L); when(processInstance.getDescription()).thenReturn("Some test Process"); when(processInstance.getSlaCompliance()).thenReturn(0); - when(processInstance.getSlaDueDate()).thenReturn(null); + + when(processInstance.getSlaDueDate()).thenReturn(TEST_DATE); when(processInstance.getMetaData()).thenReturn(processMetadata); when(processInstance.getProcess()).thenReturn(process); @@ -109,6 +120,22 @@ public void testBuildProcessStartedEvent() { assertEquals("testUser", log.getIdentity()); } + + /** + * Test build the ProcessInstanceLog for data change + */ + @Test + public void testBuildProcessDataChangedEventImpl() { + + ProcessDataChangedEvent pdce = new ProcessDataChangedEventImpl(processInstance, kieRuntime); + + ProcessInstanceLog log = (ProcessInstanceLog) builder.buildEvent(pdce); + + assertEquals(TEST_DATE, log.getSlaDueDate()); + + assertEquals(TEST_DEPLOYMENT_UNIT, log.getExternalId()); + + } /** * Test build the ProcessInstanceLog for a process with initiator metadata