/*
* 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 javax.enterprise.event.Event;
import org.jboss.errai.security.shared.api.GroupImpl;
import org.jboss.errai.security.shared.api.RoleImpl;
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.client.authz.PerspectiveTreeProvider;
import org.uberfire.client.mvp.PerspectiveActivity;
import org.uberfire.ext.security.management.client.widgets.management.events.HomePerspectiveChangedEvent;
import org.uberfire.ext.security.management.client.widgets.management.events.PriorityChangedEvent;
import org.uberfire.ext.widgets.common.client.dropdown.PerspectiveDropDown;
import org.uberfire.security.authz.PermissionManager;
import org.uberfire.security.impl.authz.DefaultPermissionManager;
import org.uberfire.security.impl.authz.DefaultPermissionTypeRegistry;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ACLSettingsTest {
@Mock
ACLSettings.View view;
@Mock
PerspectiveDropDown homePerspectiveDropDown;
@Mock
PerspectiveTreeProvider perspectiveTreeProvider;
@Mock
PriorityDropDown priorityDropDown;
@Mock
Event<HomePerspectiveChangedEvent> homePerspectiveChangedEvent;
@Mock
Event<PriorityChangedEvent> priorityChangedEvent;
@Mock
PerspectiveActivity defaultPerspective;
ACLSettings presenter;
PermissionManager permissionManager;
@Before
public void setup() {
permissionManager = spy(new DefaultPermissionManager(new DefaultPermissionTypeRegistry()));
permissionManager.setAuthorizationPolicy(permissionManager.newAuthorizationPolicy()
.role("admin").home("HomeAdmin").priority(10)
.group("group1").home("HomeGroup1").priority(0)
.build()
);
presenter = new ACLSettings(view,
permissionManager,
homePerspectiveDropDown,
perspectiveTreeProvider,
priorityDropDown,
homePerspectiveChangedEvent,
priorityChangedEvent);
when(defaultPerspective.getIdentifier()).thenReturn("DefaultPerspective");
when(homePerspectiveDropDown.getDefaultPerspective()).thenReturn(defaultPerspective);
when(homePerspectiveDropDown.getItemName("DefaultPerspective")).thenReturn("DefaultPerspective");
when(homePerspectiveDropDown.getItemName("HomeAdmin")).thenReturn("HomeAdmin");
when(homePerspectiveDropDown.getItemName("HomeGroup1")).thenReturn("HomeGroup1");
when(priorityDropDown.getPriorityName(10)).thenReturn("High");
when(priorityDropDown.getPriorityName(0)).thenReturn("Normal");
}
@Test
public void testShowRole() {
presenter.show(new RoleImpl("admin"));
verify(view).setHomePerspectiveSelectorEnabled(false);
verify(view).setPrioritySelectorEnabled(false);
verify(view).setHomePerspectiveSelector(any());
verify(view).setPrioritySelector(any());
verify(view).setHomePerspectiveName("HomeAdmin");
verify(view).setHomePerspectiveTitle("HomeAdmin");
verify(view).setPriorityName("High");
}
@Test
public void testEditRole() {
presenter.edit(new RoleImpl("admin"));
verify(view).setHomePerspectiveSelectorEnabled(true);
verify(view).setPrioritySelectorEnabled(true);
verify(view).setHomePerspectiveSelector(any());
verify(view).setPrioritySelector(any());
verify(homePerspectiveDropDown).setSelectedPerspective("HomeAdmin");
verify(priorityDropDown).setSelectedPriority(10);
}
@Test
public void testShowGroup() {
presenter.show(new GroupImpl("group1"));
verify(view).setHomePerspectiveSelectorEnabled(false);
verify(view).setPrioritySelectorEnabled(false);
verify(view).setHomePerspectiveSelector(any());
verify(view).setPrioritySelector(any());
verify(view).setHomePerspectiveName("HomeGroup1");
verify(view).setHomePerspectiveTitle("HomeGroup1");
verify(view).setPriorityName("Normal");
}
@Test
public void testEditGroup() {
presenter.edit(new GroupImpl("group1"));
verify(view).setHomePerspectiveSelectorEnabled(true);
verify(view).setPrioritySelectorEnabled(true);
verify(view).setHomePerspectiveSelector(any());
verify(view).setPrioritySelector(any());
verify(homePerspectiveDropDown).setSelectedPerspective("HomeGroup1");
verify(priorityDropDown).setSelectedPriority(0);
}
@Test
public void testDefaultValues() {
reset(view);
permissionManager.setAuthorizationPolicy(permissionManager.newAuthorizationPolicy().build());
presenter = new ACLSettings(view,
permissionManager,
homePerspectiveDropDown,
perspectiveTreeProvider,
priorityDropDown,
homePerspectiveChangedEvent,
priorityChangedEvent);
presenter.show(new RoleImpl("admin"));
verify(view).setHomePerspectiveSelectorEnabled(false);
verify(view).setPrioritySelectorEnabled(false);
verify(view).setHomePerspectiveSelector(any());
verify(view).setPrioritySelector(any());
verify(view).setHomePerspectiveName("DefaultPerspective");
verify(view).setHomePerspectiveTitle("DefaultPerspective");
verify(view).setPriorityName("Normal");
}
@Test
public void testOnHomePerspectiveChange() {
presenter.onHomePerspectiveSelected();
verify(homePerspectiveChangedEvent).fire(any());
}
@Test
public void testOnPrioritySelected() {
presenter.onPrioritySelected();
verify(priorityChangedEvent).fire(any());
}
}