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"));
|
}
|
|
}
|