/* * 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.kie.workbench.common.screens.examples.client.wizard.pages.repository; import java.net.MalformedURLException; import java.net.URL; import javax.enterprise.event.Event; import org.gwtbootstrap3.client.ui.constants.ValidationState; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.screens.examples.client.wizard.model.ExamplesWizardModel; import org.kie.workbench.common.screens.examples.model.ExampleRepository; import org.kie.workbench.common.screens.examples.service.ExamplesService; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent; import org.uberfire.mocks.CallerMock; import org.uberfire.mocks.EventSourceMock; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class RepositoryPageTest { private static final String EXAMPLE_REPOSITORY = "https://github.com/guvnorngtestuser1/guvnorng-playground.git"; @Mock private RepositoryPageView view; @Mock private TranslationService translator; private ExamplesService examplesService = mock(ExamplesService.class); private Caller<ExamplesService> examplesServiceCaller = new CallerMock<ExamplesService>(examplesService); @Spy private Event<WizardPageStatusChangeEvent> pageStatusChangedEvent = new EventSourceMock<WizardPageStatusChangeEvent>() { @Override public void fire(final WizardPageStatusChangeEvent event) { //Do nothing. Default implementation throws an exception. } }; @Captor private ArgumentCaptor<ExampleRepository> repositoryArgumentCaptor; private RepositoryPage page; private ExamplesWizardModel model; @Before public void setup() { page = new RepositoryPage(view, translator, examplesServiceCaller, pageStatusChangedEvent) { @Override boolean isUrlValid(final String url) { try { //The Presenter uses GWT's URL utilities not available in regular Mockito tests new URL(url); } catch (MalformedURLException mfe) { return false; } return true; } }; model = new ExamplesWizardModel(); page.setModel(model); } @Test public void testInit() { page.init(); verify(view, times(1)).init(eq(page)); verify(view, times(1)).setPlaceHolder(any(String.class)); } @Test public void testInitialise() { page.initialise(); verify(view, times(1)).initialise(); } @Test public void testAsWidget() { page.asWidget(); verify(view, times(1)).asWidget(); } @Test public void testSetPlaygroundRepository_Null() { page.setPlaygroundRepository(null); verify(view, times(1)).showRepositoryUrlInputForm(); verify(view, times(1)).setCustomRepositoryOption(); verify(view, times(1)).disableStockRepositoryOption(); } @Test public void testSetPlaygroundRepository() { ExampleRepository repository = new ExampleRepository(EXAMPLE_REPOSITORY); page.setPlaygroundRepository(repository); verify(view, times(1)).hideRepositoryUrlInputForm(); verify(view, times(1)).setStockRepositoryOption(); } @Test public void testPlaygroundRepositorySelected() { page.playgroundRepositorySelected(); verify(view, times(1)).hideRepositoryUrlInputForm(); verify(view, times(1)).setCustomRepositoryValue(null); verify(pageStatusChangedEvent, times(1)).fire(any(WizardPageStatusChangeEvent.class)); } @Test public void testCustomRepositorySelected() { page.onCustomRepositorySelected(); verify(view, times(1)).showRepositoryUrlInputForm(); } @Test public void testCustomRepositoryValueChanged() { page.onCustomRepositoryValueChanged(); verify(pageStatusChangedEvent, times(1)).fire(any(WizardPageStatusChangeEvent.class)); } @Test @SuppressWarnings("unchecked") public void testIsComplete_NullRepository() { final Callback<Boolean> callback = mock(Callback.class); page.isComplete(callback); verify(callback, times(1)).callback(eq(false)); verify(view, times(1)).setUrlGroupType(eq(ValidationState.ERROR)); verify(view, times(1)).showUrlHelpMessage(any(String.class)); } @Test @SuppressWarnings("unchecked") public void testIsComplete_EmptyRepositoryUrl() { final ExampleRepository repository = new ExampleRepository(""); model.setSelectedRepository(repository); final Callback<Boolean> callback = mock(Callback.class); page.isComplete(callback); verify(callback, times(1)).callback(eq(false)); verify(view, times(1)).setUrlGroupType(eq(ValidationState.ERROR)); verify(view, times(1)).showUrlHelpMessage(any(String.class)); assertFalse(repository.isUrlValid()); } @Test @SuppressWarnings("unchecked") public void testIsComplete_InvalidRepositoryUrl() { final ExampleRepository repository = new ExampleRepository("cheese"); model.setSelectedRepository(repository); final Callback<Boolean> callback = mock(Callback.class); page.isComplete(callback); verify(callback, times(1)).callback(eq(false)); verify(view, times(1)).setUrlGroupType(eq(ValidationState.ERROR)); verify(view, times(1)).showUrlHelpMessage(any(String.class)); assertFalse(repository.isUrlValid()); } @Test @SuppressWarnings("unchecked") public void testIsComplete_ValidRepositoryUrl() { final ExampleRepository repository = new ExampleRepository(EXAMPLE_REPOSITORY); model.setSelectedRepository(repository); final Callback<Boolean> callback = mock(Callback.class); page.isComplete(callback); verify(callback, times(1)).callback(eq(true)); verify(view, times(1)).setUrlGroupType(eq(ValidationState.NONE)); verify(view, times(1)).hideUrlHelpMessage(); assertTrue(repository.isUrlValid()); } }