/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.ext.security.management.client.widgets.management.editor.acl;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.ext.security.management.client.widgets.management.editor.acl.node.MultiplePermissionNodeViewer;
import org.uberfire.ext.security.management.client.widgets.management.editor.acl.node.PermissionNodeViewer;
import org.uberfire.ext.security.management.client.widgets.management.editor.acl.node.PermissionWidgetFactory;
import org.uberfire.security.authz.Permission;
import org.uberfire.security.client.authz.tree.LoadCallback;
import org.uberfire.security.client.authz.tree.PermissionNode;
import org.uberfire.security.client.authz.tree.impl.PermissionGroupNode;
import org.uberfire.security.client.authz.tree.impl.PermissionResourceNode;
import org.uberfire.security.impl.authz.DotNamedPermission;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class MultiplePermissionNodeViewerTest {
@Mock
MultiplePermissionNodeViewer.View view;
@Mock
PermissionWidgetFactory widgetFactory;
@Mock
PermissionNode childNode1;
@Mock
PermissionNode childNode2;
@Mock
PermissionNodeViewer childViewer1;
@Mock
PermissionNodeViewer childViewer2;
MultiplePermissionNodeViewer presenter;
PermissionGroupNode permissionGroupNode;
PermissionResourceNode permissionResourceNode;
Permission permission1;
Permission permission2;
Permission permission3;
@Before
public void setUp() {
presenter = new MultiplePermissionNodeViewer(view,
widgetFactory);
when(widgetFactory.createViewer(childNode1)).thenReturn(childViewer1);
when(widgetFactory.createViewer(childNode2)).thenReturn(childViewer2);
permission1 = new DotNamedPermission("p1",
false);
permission2 = new DotNamedPermission("p2",
true);
permission3 = new DotNamedPermission("p2.a",
false);
permissionGroupNode = spy(new PermissionGroupNode(null));
permissionGroupNode.setNodeName("r1");
permissionResourceNode = spy(new PermissionResourceNode("r2",
null));
permissionResourceNode.setNodeName("r2");
permissionResourceNode.addPermission(permission1,
"grant1",
"deny1");
permissionResourceNode.addPermission(permission2,
"grant2",
"deny2");
when(childNode1.getNodeName()).thenReturn("p2.a");
when(childNode1.getPermissionList()).thenReturn(Arrays.asList(permission3));
doAnswer(invocationOnMock -> {
LoadCallback callback = (LoadCallback) invocationOnMock.getArguments()[0];
callback.afterLoad(Arrays.asList(childNode1,
childNode2));
return null;
}).when(permissionGroupNode).expand(any(LoadCallback.class));
doAnswer(invocationOnMock -> {
LoadCallback callback = (LoadCallback) invocationOnMock.getArguments()[0];
callback.afterLoad(Arrays.asList(childNode1));
return null;
}).when(permissionResourceNode).expand(any(LoadCallback.class));
}
@Test
public void testInitGroupNode() {
presenter.show(permissionGroupNode);
assertEquals(presenter.getPermissionNode(),
permissionGroupNode);
verify(view).setNodeName("r1");
verify(view,
never()).setNodeFullName(anyString());
verify(view).setPermissionsVisible(false);
verify(view).addChildViewer(childViewer1);
verify(view).addChildViewer(childViewer2);
}
@Test
public void testInitResourceNode() {
presenter.show(permissionResourceNode);
assertEquals(presenter.getPermissionNode(),
permissionResourceNode);
verify(view,
never()).addChildViewer(any());
verify(view).setNodeName("r2");
verify(view,
never()).setNodeFullName(anyString());
verify(view).setPermissionsVisible(true);
verify(view).addItemsGrantedPermission("grant2",
"r2");
verify(view).addItemException("p2.a");
}
}