/* * 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.group.workflow; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwtmockito.GwtMockitoTestRunner; import org.jboss.errai.security.shared.api.Group; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.uberfire.ext.security.management.api.GroupManagerSettings; import org.uberfire.ext.security.management.client.widgets.management.AbstractSecurityManagementTest; import org.uberfire.ext.security.management.client.widgets.management.CreateEntity; import org.uberfire.ext.security.management.client.widgets.management.editor.group.GroupUsersAssignment; import org.uberfire.ext.security.management.client.widgets.management.editor.workflow.EntityWorkflowView; import org.uberfire.ext.security.management.client.widgets.management.events.AddUsersToGroupEvent; import org.uberfire.ext.security.management.client.widgets.management.events.CreateGroupEvent; import org.uberfire.ext.security.management.client.widgets.management.events.OnErrorEvent; import org.uberfire.ext.security.management.client.widgets.popup.ConfirmBox; import org.uberfire.ext.security.management.client.widgets.popup.LoadingBox; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.Command; import org.uberfire.workbench.events.NotificationEvent; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class GroupCreationWorkflowTest extends AbstractSecurityManagementTest { @Mock EventSourceMock<OnErrorEvent> errorEvent; @Mock ConfirmBox confirmBox; @Mock LoadingBox loadingBox; @Mock CreateEntity createEntity; @Mock GroupUsersAssignment groupUsersAssignment; @Mock EventSourceMock<CreateGroupEvent> onCreateGroupEvent; @Mock EntityWorkflowView view; @Mock Group group; private GroupCreationWorkflow tested; @Before public void setup() { super.setup(); when(group.getName()).thenReturn("group1"); when(view.setWidget(any(IsWidget.class))).thenReturn(view); when(view.clearNotification()).thenReturn(view); when(view.setCallback(any(EntityWorkflowView.Callback.class))).thenReturn(view); when(view.setCancelButtonVisible(anyBoolean())).thenReturn(view); when(view.setSaveButtonEnabled(anyBoolean())).thenReturn(view); when(view.setSaveButtonVisible(anyBoolean())).thenReturn(view); when(view.setSaveButtonText(anyString())).thenReturn(view); when(view.showNotification(anyString())).thenReturn(view); when(groupsManagerService.get(anyString())).thenReturn(group); GroupManagerSettings settings = mock(GroupManagerSettings.class); when(settings.allowEmpty()).thenReturn(true); when(userSystemManager.getGroupManagerSettings()).thenReturn(settings); tested = new GroupCreationWorkflow(userSystemManager, errorEvent, confirmBox, loadingBox, workbenchNotification, createEntity, groupUsersAssignment, onCreateGroupEvent, view); } @Test public void testClear() { tested.group = group; tested.clear(); assertNull(tested.group); verify(createEntity, times(1)).clear(); verify(groupUsersAssignment, times(1)).clear(); verify(view, times(1)).clearNotification(); verify(view, times(0)).setCancelButtonVisible(anyBoolean()); verify(view, times(0)).setCallback(any(EntityWorkflowView.Callback.class)); verify(view, times(0)).setSaveButtonText(anyString()); verify(view, times(0)).setWidget(any(IsWidget.class)); verify(view, times(0)).setSaveButtonVisible(anyBoolean()); verify(view, times(0)).setSaveButtonEnabled(anyBoolean()); verify(view, times(0)).showNotification(anyString()); } @Test public void testShowError() { tested.showError("error1"); verify(errorEvent, times(1)).fire(any(OnErrorEvent.class)); } @Test public void testCreate() { tested.create(); verify(createEntity, times(1)).show(anyString(), anyString()); verify(view, times(1)).setCancelButtonVisible(false); verify(view, times(1)).setCallback(any(EntityWorkflowView.Callback.class)); verify(view, times(1)).setSaveButtonText(anyString()); verify(view, times(1)).setWidget(any(IsWidget.class)); verify(view, times(1)).setSaveButtonVisible(true); verify(view, times(1)).setSaveButtonEnabled(true); verify(view, times(1)).clearNotification(); } @Test public void testShowUsersAssignment() { tested.group = group; tested.showUsersAssignment(group.getName()); verify(groupUsersAssignment, times(1)).show(anyString()); verify(view, times(1)).setCancelButtonVisible(true); verify(view, times(1)).setCallback(any(EntityWorkflowView.Callback.class)); verify(view, times(1)).setSaveButtonText(anyString()); verify(view, times(1)).setWidget(any(IsWidget.class)); verify(view, times(1)).setSaveButtonVisible(false); verify(view, times(1)).setSaveButtonEnabled(false); verify(view, times(0)).clearNotification(); } @Test public void testCheckCreateExisting() { when(groupsManagerService.get(anyString())).thenReturn(group); when(createEntity.getEntityIdentifier()).thenReturn("group1"); tested.checkCreate(); verify(loadingBox, times(1)).show(); verify(loadingBox, times(1)).hide(); verify(errorEvent, times(1)).fire(any(OnErrorEvent.class)); verify(createEntity, times(1)).setErrorState(); } @Test public void testCheckCreateConstrainedGroup() { Collection<String> cGroups = new ArrayList<String>(1); cGroups.add("admin"); when(userSystemManager.getConstrainedGroups()).thenReturn(cGroups); when(createEntity.getEntityIdentifier()).thenReturn("admin"); tested.checkCreate(); verify(loadingBox, times(1)).show(); verify(loadingBox, times(1)).hide(); verify(errorEvent, times(1)).fire(any(OnErrorEvent.class)); verify(createEntity, times(1)).setErrorState(); } @Test public void testCreateGroup() { doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocationOnMock) throws Throwable { Command noCommand = (Command) invocationOnMock.getArguments()[3]; noCommand.execute(); return null; } }).when(confirmBox).show(anyString(), anyString(), any(Command.class), any(Command.class)); tested.createGroup("group1"); verify(createEntity, times(2)).clear(); verify(loadingBox, times(1)).show(); verify(loadingBox, times(1)).hide(); verify(confirmBox, times(1)).show(anyString(), anyString(), any(Command.class), any(Command.class)); verify(workbenchNotification, times(1)).fire(any(NotificationEvent.class)); verify(onCreateGroupEvent, times(1)).fire(any(CreateGroupEvent.class)); } @Test public void testOnAssignUsers() { final AddUsersToGroupEvent addUsersToGroupEvent = mock(AddUsersToGroupEvent.class); final Set<String> users = new HashSet<String>(1); users.add("user1"); when(addUsersToGroupEvent.getContext()).thenReturn(groupUsersAssignment); when(addUsersToGroupEvent.getUsers()).thenReturn(users); tested.group = group; tested.onAssignUsers(addUsersToGroupEvent); verify(loadingBox, times(1)).show(); verify(loadingBox, times(1)).hide(); verify(workbenchNotification, times(1)).fire(any(NotificationEvent.class)); verify(onCreateGroupEvent, times(1)).fire(any(CreateGroupEvent.class)); verify(createEntity, times(1)).show(anyString(), anyString()); verify(view, times(1)).setCancelButtonVisible(false); verify(view, times(1)).setCallback(any(EntityWorkflowView.Callback.class)); verify(view, times(1)).setSaveButtonText(anyString()); verify(view, times(1)).setWidget(any(IsWidget.class)); verify(view, times(1)).setSaveButtonVisible(true); verify(view, times(1)).setSaveButtonEnabled(true); verify(view, times(1)).clearNotification(); } }