/*
* Copyright 2017 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.kie.workbench.common.screens.library.client.screens.organizationalunit;
import java.util.ArrayList;
import java.util.List;
import org.guvnor.structure.client.security.OrganizationalUnitController;
import org.guvnor.structure.events.AfterCreateOrganizationalUnitEvent;
import org.guvnor.structure.events.AfterDeleteOrganizationalUnitEvent;
import org.guvnor.structure.events.AfterEditOrganizationalUnitEvent;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.organizationalunit.impl.OrganizationalUnitImpl;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.screens.library.api.LibraryService;
import org.kie.workbench.common.screens.library.api.search.FilterUpdateEvent;
import org.kie.workbench.common.screens.library.client.screens.organizationalunit.popup.OrganizationalUnitPopUpPresenter;
import org.kie.workbench.common.screens.library.client.widgets.organizationalunit.OrganizationalUnitTileWidget;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mocks.CallerMock;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class OrganizationalUnitsScreenTest {
@Mock
private OrganizationalUnitsScreen.View view;
@Mock
private LibraryService libraryService;
private Caller<LibraryService> libraryServiceCaller;
@Mock
private OrganizationalUnitPopUpPresenter organizationalUnitPopUpPresenter;
@Mock
private OrganizationalUnitController organizationalUnitController;
@Mock
private ManagedInstance<OrganizationalUnitTileWidget> organizationalUnitTileWidgets;
@Mock
private OrganizationalUnitTileWidget organizationalUnitTileWidget;
private OrganizationalUnitsScreen presenter;
private OrganizationalUnit organizationalUnit1;
private OrganizationalUnit organizationalUnit2;
private OrganizationalUnit organizationalUnit3;
@Before
public void setup() {
libraryServiceCaller = new CallerMock<>(libraryService);
organizationalUnit1 = new OrganizationalUnitImpl("ou1",
"owner1",
"defaultGroupId1");
organizationalUnit2 = new OrganizationalUnitImpl("ou2",
"owner2",
"defaultGroupId2");
organizationalUnit3 = new OrganizationalUnitImpl("ou3",
"owner3",
"defaultGroupId3");
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(organizationalUnit1);
organizationalUnits.add(organizationalUnit2);
organizationalUnits.add(organizationalUnit3);
doReturn(organizationalUnits).when(libraryService).getOrganizationalUnits();
presenter = spy(new OrganizationalUnitsScreen(view,
libraryServiceCaller,
organizationalUnitPopUpPresenter,
organizationalUnitController,
organizationalUnitTileWidgets));
doReturn(true).when(organizationalUnitController).canCreateOrgUnits();
doReturn(true).when(organizationalUnitController).canReadOrgUnits();
doReturn(true).when(organizationalUnitController).canReadOrgUnit(any());
doReturn("").when(view).getFilterName();
doReturn(organizationalUnitTileWidget).when(organizationalUnitTileWidgets).get();
}
@Test
public void initWithoutReadOrgUnitsPermissionTest() {
doReturn(false).when(organizationalUnitController).canReadOrgUnits();
presenter.init();
verify(view,
never()).clearOrganizationalUnits();
verify(view,
never()).addOrganizationalUnit(any());
}
@Test
public void initWithAllPermissionsTest() {
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(organizationalUnit1);
organizationalUnits.add(organizationalUnit2);
organizationalUnits.add(organizationalUnit3);
presenter.init();
verify(view).clearOrganizationalUnits();
verify(organizationalUnitTileWidget,
times(3)).init(any());
verify(organizationalUnitTileWidget).init(organizationalUnit1);
verify(organizationalUnitTileWidget).init(organizationalUnit2);
verify(organizationalUnitTileWidget).init(organizationalUnit3);
verify(view,
times(3)).addOrganizationalUnit(any());
}
@Test
public void createOrganizationalUnitTest() {
presenter.createOrganizationalUnit();
verify(organizationalUnitPopUpPresenter).showAddPopUp();
}
@Test
public void organizationalUnitCreatedTest() {
final OrganizationalUnit newOrganizationalUnit = new OrganizationalUnitImpl("newOu",
"newOwner",
"newDefaultGroupId");
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(organizationalUnit1);
organizationalUnits.add(organizationalUnit2);
organizationalUnits.add(organizationalUnit3);
organizationalUnits.add(newOrganizationalUnit);
presenter.init();
presenter.organizationalUnitCreated(new AfterCreateOrganizationalUnitEvent(newOrganizationalUnit));
assertEquals(organizationalUnits,
presenter.organizationalUnits);
}
@Test
public void organizationalUnitEditedTest() {
final OrganizationalUnit editedOrganizationalUnit = new OrganizationalUnitImpl("editedOu",
"editedOwner",
"editedDefaultGroupId");
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(organizationalUnit1);
organizationalUnits.add(organizationalUnit2);
organizationalUnits.add(editedOrganizationalUnit);
presenter.init();
presenter.organizationalUnitEdited(new AfterEditOrganizationalUnitEvent(organizationalUnit3,
editedOrganizationalUnit));
assertEquals(organizationalUnits,
presenter.organizationalUnits);
}
@Test
public void organizationalUnitDeletedTest() {
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(organizationalUnit1);
organizationalUnits.add(organizationalUnit2);
presenter.init();
presenter.organizationalUnitDeleted(new AfterDeleteOrganizationalUnitEvent(organizationalUnit3));
assertEquals(organizationalUnits,
presenter.organizationalUnits);
}
@Test
public void refreshTest() {
doReturn("ou3").when(view).getFilterName();
presenter.organizationalUnits = new ArrayList<>();
presenter.organizationalUnits.add(organizationalUnit1);
presenter.organizationalUnits.add(organizationalUnit2);
presenter.organizationalUnits.add(organizationalUnit3);
presenter.refresh();
verify(view,
times(1)).clearOrganizationalUnits();
verify(organizationalUnitTileWidget,
times(1)).init(any());
verify(organizationalUnitTileWidget).init(organizationalUnit3);
verify(view,
times(1)).addOrganizationalUnit(any());
}
@Test
public void filterUpdateTest() {
presenter.organizationalUnits = new ArrayList<>();
presenter.filterUpdate(new FilterUpdateEvent("name"));
verify(view).setFilterName("name");
verify(presenter).refresh();
}
}