刘光辉
118 分钟以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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) { }
    }
}