package jnpf.flowable.service; import jnpf.flowable.mapper.FilePermissionRuntimeMapper; import jnpf.flowable.mapper.TemplateNodeMapper; import jnpf.flowable.model.filepermission.FilePermissionNativeState; import jnpf.flowable.util.ServiceUtil; import jnpf.flowable.util.filepermission.FilePermissionSnapshot; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class NativeFilePermissionReadReuseTest { @Test public void reuseSkipsDefinitionRoundTripButStillDetectsConcurrentTransition() { FilePermissionRuntimeMapper mapper = mock(FilePermissionRuntimeMapper.class); TemplateNodeMapper nodes = mock(TemplateNodeMapper.class); ServiceUtil forms = mock(ServiceUtil.class); var service = new NativeFilePermissionRuntimeSource(mapper,nodes,forms); var before = new FilePermissionNativeState(); before.setTaskId("task"); before.setFlowId("flow"); before.setStatus(0); before.setFlowType(1); var after = new FilePermissionNativeState(); after.setTaskId("task"); after.setFlowId("flow"); after.setStatus(1); after.setFlowType(1); when(mapper.find("task")).thenReturn(before,after); when(nodes.getList("flow")).thenReturn(List.of()); var snapshot = FilePermissionSnapshot.read(FilePermissionSnapshot.create("tenant","task","flow",Map.of("version",1,"rules",List.of())),"tenant","task"); var result = service.readWithPublishedForm("tenant","task","form","user",snapshot,"{\"fields\":[]}"); assertTrue(result.transitioning); verify(mapper,times(2)).find("task"); verifyNoInteractions(forms); } }