package jnpf.base.service;
|
|
import jnpf.base.UserInfo;
|
import jnpf.flowable.WorkFlowApi;
|
import jnpf.flowable.model.filepermission.FilePermissionReader;
|
import jnpf.flowable.model.filepermission.FilePermissionView;
|
import jnpf.util.UserProvider;
|
import org.junit.Before;
|
import org.junit.Test;
|
import org.mockito.MockedStatic;
|
import org.springframework.beans.factory.ObjectProvider;
|
import static org.junit.Assert.*;
|
import static org.mockito.Mockito.*;
|
|
public class UploadFilePermissionQueryTest {
|
private WorkFlowApi workflow;
|
private ObjectProvider<FilePermissionReader> local;
|
private UploadFilePermissionQuery query;
|
|
@Before @SuppressWarnings("unchecked") public void setup() {
|
workflow = mock(WorkFlowApi.class);
|
local = mock(ObjectProvider.class);
|
query = new UploadFilePermissionQuery(workflow, local);
|
}
|
|
@Test public void tokenlessCallbackOwnerStaysInCurrentExecutionContext() {
|
UserInfo owner = new UserInfo(); owner.setUserId("lease-owner"); owner.setTenantId("tenant");
|
assertNull(owner.getToken());
|
FilePermissionView result = FilePermissionView.legacy("task", "form");
|
when(local.getIfAvailable()).thenReturn((task, form) -> {
|
assertSame(owner, UserProvider.getLocalLoginUser());
|
assertEquals("task", task); assertEquals("form", form);
|
return result;
|
});
|
try (MockedStatic<UserProvider> users = mockStatic(UserProvider.class)) {
|
users.when(UserProvider::getLocalLoginUser).thenReturn(owner);
|
assertSame(result, query.current("task", "form"));
|
}
|
verifyNoInteractions(workflow);
|
}
|
|
@Test public void localDenialNeverFallsBackToRemoteIdentity() {
|
FilePermissionReader reader = mock(FilePermissionReader.class);
|
FilePermissionView denied = FilePermissionView.unavailable("task", "form", "PERMISSION_UNAVAILABLE");
|
when(local.getIfAvailable()).thenReturn(reader);
|
when(reader.current("task", "form")).thenReturn(denied);
|
assertSame(denied, query.current("task", "form"));
|
verifyNoInteractions(workflow);
|
}
|
|
@Test public void localFailureNeverFallsBackToRemoteIdentity() {
|
FilePermissionReader reader = mock(FilePermissionReader.class);
|
when(local.getIfAvailable()).thenReturn(reader);
|
when(reader.current("task", "form")).thenThrow(new IllegalStateException("unavailable"));
|
try {
|
query.current("task", "form");
|
fail("local failure must stop the action");
|
} catch (IllegalStateException expected) {
|
assertEquals("unavailable", expected.getMessage());
|
}
|
verifyNoInteractions(workflow);
|
}
|
|
@Test public void separateDeploymentRetainsCurrentUserRemoteQuery() {
|
FilePermissionView result = FilePermissionView.legacy("task", "form");
|
when(workflow.filePermissions("task", "form")).thenReturn(result);
|
assertSame(result, query.current("task", "form"));
|
verify(workflow).filePermissions("task", "form");
|
}
|
@Test public void publishedFormReuseKeepsLocalDenialAndRemoteDeploymentBoundary() {
|
FilePermissionReader reader = mock(FilePermissionReader.class);
|
FilePermissionView denied = FilePermissionView.unavailable("task", "form", "PERMISSION_UNAVAILABLE");
|
when(local.getIfAvailable()).thenReturn(reader);
|
when(reader.currentWithPublishedForm("task","form","{}" )).thenReturn(denied);
|
assertSame(denied,query.currentWithPublishedForm("task","form","{}"));
|
verifyNoInteractions(workflow);
|
when(local.getIfAvailable()).thenReturn(null);
|
when(workflow.filePermissions("task","form")).thenReturn(denied);
|
assertSame(denied,query.currentWithPublishedForm("task","form","{}"));
|
verify(workflow).filePermissions("task","form");
|
}
|
|
}
|