package jnpf.flowable.service.dev;
|
|
import jnpf.base.UserInfo;
|
import jnpf.exception.WorkFlowException;
|
import jnpf.flowable.mapper.DevApprovalSignatureMapper;
|
import jnpf.util.UserProvider;
|
import org.junit.BeforeClass;
|
import org.junit.Test;
|
import org.mockito.MockedStatic;
|
import java.util.Date;
|
import static org.junit.Assert.*;
|
import static org.mockito.Mockito.*;
|
|
public class DevApprovalSignaturesTest {
|
@BeforeClass public static void context() {
|
jnpf.util.context.SpringContext.setApplicationContext(mock(org.springframework.context.ApplicationContext.class));
|
}
|
@Test public void bindsRealSignerTenantInstanceAgeAndUnconsumedEvidence() throws Exception {
|
DevApprovalSignatureMapper mapper = mock(DevApprovalSignatureMapper.class);
|
DevApprovalSignatures service = new DevApprovalSignatures(mapper);
|
UserInfo user = new UserInfo(); user.setUserId("signer"); user.setTenantId("tenant");
|
DevApprovalSignature sign = new DevApprovalSignature(); sign.setId("sign"); sign.setUserId("signer");
|
sign.setCreatedAt(new Date()); sign.setMetaData("{\"biz_module\":\"workflow-dev-approval\",\"biz_data\":[\"task\"]}");
|
when(mapper.find("sign", "tenant")).thenReturn(sign);
|
try (MockedStatic<UserProvider> users = mockStatic(UserProvider.class)) {
|
users.when(UserProvider::getUser).thenReturn(user);
|
users.when(UserProvider::getLoginUserId).thenReturn("signer");
|
assertSame(sign, service.require("task", "sign"));
|
assertSame(sign, service.require("task", "sign")); // same run can sign multiple nodes
|
reject(() -> service.require("other-task", "sign"));
|
reject(() -> service.require("task", "missing"));
|
reject(() -> service.require("task", ""));
|
sign.setUserId("somebody-else"); reject(() -> service.require("task", "sign")); sign.setUserId("signer");
|
sign.setCreatedAt(new Date(System.currentTimeMillis() - 31 * 60 * 1000));
|
reject(() -> service.require("task", "sign")); sign.setCreatedAt(new Date());
|
sign.setExtraJson("{}"); reject(() -> service.require("task", "sign")); sign.setExtraJson(null);
|
sign.setMetaData("{}"); reject(() -> service.require("task", "sign"));
|
user.setTenantId("other"); reject(() -> service.require("task", "sign"));
|
}
|
}
|
interface Operation { void run() throws WorkFlowException; }
|
private static void reject(Operation op) throws Exception {
|
try { op.run(); fail("must reject invalid evidence"); } catch (WorkFlowException expected) { }
|
}
|
}
|