/*
* 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.widgets.common.client.breadcrumbs;
import java.util.Arrays;
import java.util.List;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.jboss.errai.common.client.dom.Element;
import org.jboss.errai.common.client.dom.HTMLElement;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.mvp.UberElement;
import org.uberfire.ext.widgets.common.client.breadcrumbs.header.UberfireBreadcrumbsContainer;
import org.uberfire.ext.widgets.common.client.breadcrumbs.widget.BreadcrumbsPresenter;
import org.uberfire.mvp.Command;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
public class UberfireBreadcrumbsTest {
@Mock
private UberfireBreadcrumbsContainer uberfireBreadcrumbsContainer;
@Mock
private ManagedInstance<BreadcrumbsPresenter> breadcrumbsPresenters;
@Mock
private PlaceManager placeManager;
private UberfireBreadcrumbs uberfireBreadcrumbs;
private UberfireBreadcrumbs.View view;
@Before
public void setup() {
when(breadcrumbsPresenters.get()).thenReturn(mock(BreadcrumbsPresenter.class))
.thenReturn(mock(BreadcrumbsPresenter.class)).thenReturn(mock(BreadcrumbsPresenter.class));
view = mock(UberfireBreadcrumbs.View.class);
uberfireBreadcrumbs = spy(new UberfireBreadcrumbs(uberfireBreadcrumbsContainer,
breadcrumbsPresenters,
placeManager,
view) {
});
}
@Test
public void createBreadcrumbsTest() {
uberfireBreadcrumbs.createBreadcrumbs();
verify(uberfireBreadcrumbsContainer).init(any(HTMLElement.class));
}
@Test
public void addToolbar() {
assertTrue(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.addToolbar("myperspective",
mock(Element.class));
assertFalse(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
}
@Test
public void addBreadcrumbs() {
assertTrue(uberfireBreadcrumbs.breadcrumbsPerPerspective.isEmpty());
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label2",
new DefaultPlaceRequest("screen2"));
uberfireBreadcrumbs.addBreadCrumb("myperspective2",
"label4",
new DefaultPlaceRequest("screen4"));
assertFalse(uberfireBreadcrumbs.breadcrumbsPerPerspective.isEmpty());
assertEquals(2,
uberfireBreadcrumbs.breadcrumbsPerPerspective.size());
assertEquals(2,
uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").size());
}
@Test
public void clearBreadcrumbsTest() {
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.addToolbar("myperspective",
mock(Element.class));
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
assertFalse(uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").isEmpty());
assertFalse(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
uberfireBreadcrumbs.clearBreadcrumbs("myperspective");
assertTrue(uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").isEmpty());
assertFalse(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
}
@Test
public void clearBreadcrumbsAndToolBarsTest() {
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.addToolbar("myperspective",
mock(Element.class));
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
assertFalse(uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").isEmpty());
assertFalse(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
uberfireBreadcrumbs.clearBreadcrumbsAndToolBars("myperspective");
assertTrue(uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").isEmpty());
assertTrue(uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.isEmpty());
}
@Test
public void removeDeepLevelBreadcrumbsTest() {
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
uberfireBreadcrumbs
.addBreadCrumb("myperspective",
"label2",
new DefaultPlaceRequest("screen2"));
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label3",
new DefaultPlaceRequest("screen3"));
List<BreadcrumbsPresenter> breadcrumbs = uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective");
uberfireBreadcrumbs.removeDeepLevelBreadcrumbs("myperspective",
breadcrumbs.get(0));
assertEquals(1,
uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective").size());
}
@Test
public void generateBreadCrumbSelectCommandTest() {
DefaultPlaceRequest placeRequest = new DefaultPlaceRequest("screen");
final Command command = mock(Command.class);
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
placeRequest);
List<BreadcrumbsPresenter> breadcrumbs = uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective");
BreadcrumbsPresenter breadcrumb = breadcrumbs.get(0);
uberfireBreadcrumbs.generateBreadCrumbSelectCommand("myperspective",
breadcrumb,
placeRequest,
null,
command).execute();
verify(placeManager).goTo(placeRequest);
verify(placeManager,
never()).goTo(eq(placeRequest),
any(HasWidgets.class));
verify(command).execute();
}
@Test
public void generateBreadCrumbSelectCommandWithTargetPanelTest() {
DefaultPlaceRequest placeRequest = new DefaultPlaceRequest("screen");
final Command command = mock(Command.class);
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
placeRequest);
List<BreadcrumbsPresenter> breadcrumbs = uberfireBreadcrumbs.breadcrumbsPerPerspective.get("myperspective");
BreadcrumbsPresenter breadcrumb = breadcrumbs.get(0);
uberfireBreadcrumbs.generateBreadCrumbSelectCommand("myperspective",
breadcrumb,
placeRequest,
mock(HasWidgets.class),
command).execute();
verify(placeManager).goTo(eq(placeRequest),
any(HasWidgets.class));
verify(placeManager,
never()).goTo(placeRequest);
verify(command).execute();
}
@Test
public void getViewShouldAddInnerBreadcrumbsTest() {
List<BreadcrumbsPresenter> breadcrumbs = Arrays
.asList(mock(BreadcrumbsPresenter.class),
mock(BreadcrumbsPresenter.class));
uberfireBreadcrumbs.breadcrumbsPerPerspective.put("myperspective",
breadcrumbs);
uberfireBreadcrumbs.breadcrumbsToolBarPerPerspective.put("myperspective",
mock(Element.class));
uberfireBreadcrumbs.getView();
verify(view).clear();
verify(view,
never()).addBreadcrumb(any(UberElement.class));
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.getView();
verify(view,
times(2)).addBreadcrumb(any(UberElement.class));
verify(view,
times(1)).addBreadcrumbToolbar(any(Element.class));
}
@Test
public void addBreadcrumbAssociatedWithACommandTest() {
final Command command = mock(Command.class);
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
command);
verify(uberfireBreadcrumbs).addBreadCrumb("myperspective",
"label",
null,
null,
command);
}
@Test
public void addBreadcrumbAssociatedWithAPlaceRequestTest() {
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
verify(uberfireBreadcrumbs).addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"),
null,
null);
}
@Test
public void addBreadcrumbAssociatedWithAPlaceRequestAndATargetPanelTest() {
final HasWidgets targetPanel = mock(HasWidgets.class);
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"),
targetPanel);
verify(uberfireBreadcrumbs).addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"),
targetPanel,
null);
}
@Test
public void addBreadcrumbAssociatedWithAPlaceRequestWithACommandTest() {
final Command command = mock(Command.class);
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"),
command);
verify(uberfireBreadcrumbs).addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"),
null,
command);
}
@Test
public void updateBreadcrumbsContainerTest() {
assertTrue(uberfireBreadcrumbs.breadcrumbsPerPerspective.isEmpty());
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.addBreadCrumb("myperspective",
"label",
new DefaultPlaceRequest("screen"));
verify(uberfireBreadcrumbsContainer).enable();
}
@Test
public void updateBreadcrumbsWithNoBreadcrumbsContainerTest() {
assertTrue(uberfireBreadcrumbs.breadcrumbsPerPerspective.isEmpty());
uberfireBreadcrumbs.currentPerspective = "myperspective";
uberfireBreadcrumbs.updateBreadcrumbsContainer();
verify(uberfireBreadcrumbsContainer).disable();
}
}