package jnpf.dmsPermission; import jnpf.permission.UserApi; import jnpf.permission.entity.UserEntity; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class DmsUserDisplayNameResolverTest { @Test void resolvesDistinctUsersInOneBatchAndFormatsAvailableFields() { UserApi userApi = mock(UserApi.class); DmsUserDisplayNameResolver resolver = new DmsUserDisplayNameResolver(userApi); when(userApi.getUserName(anyList())).thenReturn(Arrays.asList( user("user-1", "张三", "zhangsan"), user("user-2", "李四", null), user("user-3", null, "wangwu"), user("user-4", " ", " "))); Map result = resolver.resolve(Arrays.asList( "user-1", " user-1 ", "user-2", "user-3", "user-4", null)); assertEquals("张三(zhangsan)", result.get("user-1")); assertEquals("李四", result.get("user-2")); assertEquals("wangwu", result.get("user-3")); assertFalse(result.containsKey("user-4")); ArgumentCaptor> ids = ArgumentCaptor.forClass(List.class); verify(userApi).getUserName(ids.capture()); assertEquals(Arrays.asList("user-1", "user-2", "user-3", "user-4"), ids.getValue()); } @Test void returnsEmptyMapWhenUserServiceIsUnavailable() { UserApi userApi = mock(UserApi.class); DmsUserDisplayNameResolver resolver = new DmsUserDisplayNameResolver(userApi); when(userApi.getUserName(anyList())).thenThrow(new IllegalStateException("unavailable")); Map result = resolver.resolve(Collections.singletonList("user-1")); assertEquals(Collections.emptyMap(), result); } private UserEntity user(String id, String realName, String account) { UserEntity result = new UserEntity(); result.setId(id); result.setRealName(realName); result.setAccount(account); return result; } }