刘光辉
7 小时以前 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
46
47
48
49
50
51
52
53
package jnpf.base.service;
 
import cn.hutool.crypto.digest.DigestUtil;
import jnpf.base.model.uploadedit.UploadEditLease;
import jnpf.util.JsonUtil;
import org.junit.Test;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.Collections;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
 
public class UploadEditTemporaryServiceTest {
    @Test @SuppressWarnings("unchecked")
    public void statusHonorsOwnerTenantAndExpiryWithoutLoadingForm() {
        UploadEditAccess access = mock(UploadEditAccess.class);
        StringRedisTemplate redis = mock(StringRedisTemplate.class);
        ValueOperations<String, String> values = mock(ValueOperations.class);
        when(redis.opsForValue()).thenReturn(values);
        String leaseId = "0123456789abcdef0123456789abcdef";
        String key = "upload-edit:temporary:" + DigestUtil.sha256Hex("tenant") + ":" + leaseId;
        UploadEditLease lease = new UploadEditLease();
        lease.setTenantId("tenant"); lease.setOwnerId("owner"); lease.setLeaseId(leaseId);
        when(values.get(key)).thenReturn(JsonUtil.getObjectToString(Collections.singletonMap("lease", lease)));
        UploadEditTemporaryService service = new UploadEditTemporaryService(access, mock(DmsAuditTemporaryEditService.class), redis);
 
        assertTrue(service.canReadStatus("tenant", "owner", leaseId));
        assertFalse(service.canReadStatus("tenant", "other-owner", leaseId));
        assertFalse(service.canReadStatus("other-tenant", "owner", leaseId));
        when(values.get(key)).thenReturn(null);
        assertFalse(service.canReadStatus("tenant", "owner", leaseId));
        verifyNoInteractions(access);
    }
    @Test @SuppressWarnings("unchecked")
    public void temporaryLeaseRefreshesDownloadPermissionInsteadOfTrustingCachedGrant() {
        UploadEditAccess access = mock(UploadEditAccess.class);
        StringRedisTemplate redis = mock(StringRedisTemplate.class);
        ValueOperations<String, String> values = mock(ValueOperations.class);
        when(redis.opsForValue()).thenReturn(values);
        String leaseId = "0123456789abcdef0123456789abcdef";
        String key = "upload-edit:temporary:" + DigestUtil.sha256Hex("tenant") + ":" + leaseId;
        UploadEditLease lease = new UploadEditLease();
        lease.setTenantId("tenant"); lease.setOwnerId("owner"); lease.setLeaseId(leaseId); lease.setAllowDownload(true);
        java.util.Map<String, Object> state = new java.util.HashMap<>();
        state.put("lease", lease); state.put("context", java.util.Map.of("modelId", "model", "field", "files"));
        when(values.get(key)).thenReturn(JsonUtil.getObjectToString(state));
        when(access.allowDownload(any())).thenReturn(false);
        UploadEditTemporaryService service = new UploadEditTemporaryService(access, mock(DmsAuditTemporaryEditService.class), redis);
        assertFalse(service.find("tenant", "owner", leaseId).isAllowDownload());
        verify(access).authorizeTemporary(any(), eq("owner"));
    }
 
}