@Override public Collection<String> delegate(UserManager userManager) { return userManager.getUsersWithGroup(groupName, transitive); } });
@Override public Collection<String> delegate(UserManager userManager) { return userManager.getUsersWithGroup(groupName); } });
@Override public void sendGroupMessage(final String groupName, final Message message) { Collection<String> userNames = securitySupportProvider.get().getUserManager().getUsersWithGroup(groupName, true); for (String userName : userNames) { sendMessage(userName, message); } // Reset it to null simply to avoid assumptions about the id in calling code message.setId(null); }
private Set<String> getAllRecipients(final Task task) { HashSet<String> users = new HashSet<String>(); log.debug("Found actorId [{}]", task.getActorId()); if (StringUtils.isNotBlank(task.getActorId())) { users.add(task.getActorId()); } if (task.getActorIds() != null) { log.debug("Found actorIds {}", task.getActorIds()); users.addAll(task.getActorIds()); } log.debug("Found groups {}", task.getGroupIds()); if (task.getGroupIds() != null) { for (String group : task.getGroupIds()) { Collection<String> usersOfGroupTransitive = securitySupport.get().getUserManager().getUsersWithGroup(group, true); users.addAll(usersOfGroupTransitive); } } return users; }
@Before @Override public void setUp() throws Exception { this.securitySupport = mock(SecuritySupport.class); this.userManager = mock(UserManager.class); ComponentsTestUtil.setInstance(SecuritySupport.class, securitySupport); doReturn(userManager).when(securitySupport).getUserManager(); this.group = new MgnlGroup("1", "group", Arrays.asList("subGroup1"), Collections.EMPTY_LIST); this.subGroup1 = new MgnlGroup("2", "subGroup1", Collections.EMPTY_LIST, Collections.EMPTY_LIST); this.subGroup2 = new MgnlGroup("3", "subGroup2", Collections.EMPTY_LIST, Collections.EMPTY_LIST); this.alice = new MgnlUser("alice", "admin", Arrays.<String>asList("group"), Collections.EMPTY_LIST, Collections.EMPTY_MAP); this.bob = new MgnlUser("bob", "admin", Arrays.<String>asList("subGroup1"), Collections.EMPTY_LIST, Collections.EMPTY_MAP); this.charlie = new MgnlUser("charlie", "admin", Arrays.<String>asList("subGroup2"), Collections.EMPTY_LIST, Collections.EMPTY_MAP); when(userManager.getUsersWithGroup("group", true)).thenReturn(Arrays.asList("alice")); when(userManager.getUsersWithGroup("subGroup1", true)).thenReturn(Arrays.asList(new String[]{"alice", "bob"})); when(userManager.getUsersWithGroup("subGroup2", true)).thenReturn(Arrays.asList("charlie")); }
@Test public void getUsersWithGroupIgnoresUnsupportedUserManagerAndCollects() { // GIVEN when(aUserManager.getUsersWithGroup(anyString())).thenReturn(Lists.newArrayList("ALY", "BILLY")); when(bUserManager.getUsersWithGroup(anyString())).thenReturn(Lists.newArrayList("ALY", "CAMERON")); final DelegatingUserManager delegator = new DelegatingUserManager(ImmutableMap.of( "aUsers", aUserManager, "nope", nopeUserManager, "bUsers", bUserManager)); // WHEN THEN assertThat(new Execution() { @Override public void evaluate() throws Exception { userNamesResult = delegator.getUsersWithGroup("all"); } }, throwsNothing()); assertThat(userNamesResult, is(not(empty()))); assertThat(userNamesResult, containsInAnyOrder("ALY", "BILLY", "CAMERON")); } }
@Test public void testSendGroupMessage() throws RepositoryException { // GIVEN MessagesManager.MessageListener listenerA = mock(MessagesManager.MessageListener.class); messagesManager.registerMessagesListener("alice", listenerA); MessagesManager.MessageListener listenerB = mock(MessagesManager.MessageListener.class); messagesManager.registerMessagesListener("bob", listenerB); final String testGroup = "bobOnlyGroup"; when(userManager.getUsersWithGroup(testGroup, true)).thenReturn(Arrays.asList(new String[]{"bob"})); Message message = new Message(); message.setType(MessageType.ERROR); message.setSubject("subject"); message.setMessage("message"); // WHEN messagesManager.sendGroupMessage(testGroup, message); // THEN assertNull(message.getId()); verify(listenerA, never()).messageSent(any(Message.class)); verify(listenerB).messageSent(any(Message.class)); assertFalse("Alice is not in that group, so she should not have received any message", session.nodeExists("/alice")); assertTrue("Bob is in that group, so he should have received a message", session.nodeExists("/bob/0")); }
@Test public void testSendTransitiveGroupMessage() throws RepositoryException { // GIVEN MessagesManager.MessageListener listenerB = mock(MessagesManager.MessageListener.class); messagesManager.registerMessagesListener("bob", listenerB); final String transitiveGroup = "group2"; // bob is in the transitive but not in the direct group ... however, // since we use only UserManager.getUsersWithGroup(String groupName, boolean includeUsersFromTransitiveGroups) in MessagesManagerImpl, there is not so much to mock here // Testing returning the correct users (including users from transitive groups) is tested in MgnlUserManagerRepositoryTest now. // Hence, this test here might be removed. when(userManager.getUsersWithGroup(transitiveGroup, true)).thenReturn(Arrays.asList(new String[]{"bob"})); Message message = new Message(); message.setType(MessageType.ERROR); message.setSubject("subject"); message.setMessage("message"); // WHEN messagesManager.sendGroupMessage(transitiveGroup, message); // THEN assertNull(message.getId()); verify(listenerB).messageSent(any(Message.class)); assertTrue("Bob is in that group, so he should have received a message", session.nodeExists("/bob/0")); }