/*
* 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.preferences.client.admin.page;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import javax.enterprise.event.Event;
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.mvp.PlaceManager;
import org.uberfire.ext.preferences.client.central.PreferencesCentralPerspective;
import org.uberfire.ext.preferences.client.event.PreferencesCentralInitializationEvent;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
import org.uberfire.preferences.shared.impl.PreferenceScopeResolutionStrategyInfo;
import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class AdminPageImplTest {
@Mock
private PlaceManager placeManager;
@Mock
private Event<PreferencesCentralInitializationEvent> preferencesCentralInitializationEvent;
private AdminPageImpl adminPage;
@Before
public void setup() {
adminPage = new AdminPageImpl(placeManager,
preferencesCentralInitializationEvent);
}
@Test
public void addValidScreen() {
adminPage.addScreen("screen",
"title");
assertEquals("title",
adminPage.getScreenTitle("screen"));
}
@Test(expected = RuntimeException.class)
public void addScreenWithNullIdentifierTest() {
adminPage.addScreen(null,
"title");
}
@Test
public void addToolTest() {
adminPage.addScreen("screen1",
"Screen 1");
adminPage.addScreen("screen2",
"Screen 2");
adminPage.addTool("screen1",
"title1",
"iconCss1",
"category1",
() -> {
});
adminPage.addTool("screen1",
"title2",
"iconCss2",
"category1",
() -> {
});
adminPage.addTool("screen1",
"title3",
"iconCss3",
"category2",
() -> {
});
adminPage.addTool("screen2",
"title4",
"iconCss4",
"category3",
() -> {
});
final Map<String, List<AdminTool>> toolsByCategory1 = adminPage.getToolsByCategory("screen1");
assertNotNull(toolsByCategory1);
assertEquals(2,
toolsByCategory1.size());
final List<AdminTool> category1Tools = toolsByCategory1.get("category1");
assertEquals(2,
category1Tools.size());
assertEquals("title1",
category1Tools.get(0).getTitle());
assertEquals("iconCss1",
category1Tools.get(0).getIconCss());
assertEquals("title2",
category1Tools.get(1).getTitle());
assertEquals("iconCss2",
category1Tools.get(1).getIconCss());
final List<AdminTool> category2Tools = toolsByCategory1.get("category2");
assertEquals(1,
category2Tools.size());
assertEquals("title3",
category2Tools.get(0).getTitle());
assertEquals("iconCss3",
category2Tools.get(0).getIconCss());
final Map<String, List<AdminTool>> toolsByCategory2 = adminPage.getToolsByCategory("screen2");
assertNotNull(toolsByCategory2);
assertEquals(1,
toolsByCategory2.size());
final List<AdminTool> category3Tools = toolsByCategory2.get("category3");
assertEquals(1,
category3Tools.size());
assertEquals("title4",
category3Tools.get(0).getTitle());
assertEquals("iconCss4",
category3Tools.get(0).getIconCss());
}
@Test(expected = RuntimeException.class)
public void addToolWithNullScreenTest() {
adminPage.addTool(null,
"title",
"iconCss",
null,
() -> {
});
}
@Test(expected = RuntimeException.class)
public void addToolWithNullCategoryTest() {
adminPage.addTool("screen",
"title",
"iconCss",
null,
() -> {
});
}
@Test
public void addPreferenceTest() {
adminPage.addScreen("screen1",
"Screen 1");
adminPage.addPreference("screen1",
"MyPreference",
"My Preference",
"fa-map",
"category1",
null);
final Map<String, List<AdminTool>> toolsByCategory1 = adminPage.getToolsByCategory("screen1");
assertNotNull(toolsByCategory1);
assertEquals(1,
toolsByCategory1.size());
final List<AdminTool> category1Tools = toolsByCategory1.get("category1");
assertEquals(1,
category1Tools.size());
assertEquals("My Preference",
category1Tools.get(0).getTitle());
assertEquals("fa-map",
category1Tools.get(0).getIconCss());
category1Tools.get(0).getOnClickCommand().execute();
verify(placeManager).goTo(eq(new DefaultPlaceRequest(PreferencesCentralPerspective.IDENTIFIER)));
verify(preferencesCentralInitializationEvent).fire(eq(new PreferencesCentralInitializationEvent("MyPreference",
null)));
}
@Test
public void addPreferenceWithCustomScopeResolutionStrategyParameterTest() {
Supplier<PreferenceScopeResolutionStrategyInfo> scopeResolutionStrategyInfoSupplier = new Supplier<PreferenceScopeResolutionStrategyInfo>() {
PreferenceScopeResolutionStrategyInfo scopeResolutionStrategyInfo = null;
@Override
public PreferenceScopeResolutionStrategyInfo get() {
if (scopeResolutionStrategyInfo == null) {
scopeResolutionStrategyInfo = mock(PreferenceScopeResolutionStrategyInfo.class);
}
return scopeResolutionStrategyInfo;
}
};
adminPage.addScreen("screen1",
"Screen 1");
adminPage.addPreference("screen1",
"MyPreference",
"My Preference",
"fa-map",
"category1",
scopeResolutionStrategyInfoSupplier);
final Map<String, List<AdminTool>> toolsByCategory1 = adminPage.getToolsByCategory("screen1");
assertNotNull(toolsByCategory1);
assertEquals(1,
toolsByCategory1.size());
final List<AdminTool> category1Tools = toolsByCategory1.get("category1");
assertEquals(1,
category1Tools.size());
assertEquals("My Preference",
category1Tools.get(0).getTitle());
assertEquals("fa-map",
category1Tools.get(0).getIconCss());
category1Tools.get(0).getOnClickCommand().execute();
verify(placeManager).goTo(eq(new DefaultPlaceRequest(PreferencesCentralPerspective.IDENTIFIER)));
verify(preferencesCentralInitializationEvent).fire(eq(new PreferencesCentralInitializationEvent("MyPreference",
scopeResolutionStrategyInfoSupplier.get())));
}
@Test
public void setDefaultScreen() {
adminPage.setDefaultScreen("screen1");
assertEquals("screen1",
adminPage.getDefaultScreen());
adminPage.setDefaultScreen("screen2");
assertEquals("screen2",
adminPage.getDefaultScreen());
}
}