/*
* 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.library.client.widgets;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.event.Event;
import org.guvnor.common.services.project.context.ProjectContextChangeEvent;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.repositories.Repository;
import org.jboss.errai.common.client.api.Caller;
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.OrganizationalUnitRepositoryInfo;
import org.kie.workbench.common.screens.library.api.preferences.LibraryInternalPreferences;
import org.kie.workbench.common.screens.library.api.preferences.LibraryPreferences;
import org.kie.workbench.common.screens.library.client.util.LibraryPlaces;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.mocks.CallerMock;
import org.uberfire.mvp.Command;
import org.uberfire.mvp.ParameterizedCommand;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LibraryToolbarPresenterTest {
@Mock
private LibraryToolbarPresenter.View view;
@Mock
private LibraryService libraryService;
private Caller<LibraryService> libraryServiceCaller;
@Mock
private LibraryPreferences libraryPreferences;
@Mock
private LibraryInternalPreferences libraryInternalPreferences;
@Mock
private PlaceManager placeManager;
@Mock
private LibraryPlaces libraryPlaces;
@Mock
private Event<ProjectContextChangeEvent> projectContextChangeEvent;
private LibraryToolbarPresenter presenter;
private OrganizationalUnit selectedOrganizationalUnit;
private OrganizationalUnit organizationalUnit2;
private Repository selectedRepository;
private Command callback;
private ArrayList<String> selectedRepositoryBranches;
@Before
public void setup() {
libraryServiceCaller = new CallerMock<>(libraryService);
presenter = new LibraryToolbarPresenter(view,
libraryServiceCaller,
libraryPreferences,
libraryInternalPreferences,
placeManager,
libraryPlaces,
projectContextChangeEvent);
selectedOrganizationalUnit = mock(OrganizationalUnit.class);
doReturn("organizationalUnit1").when(selectedOrganizationalUnit).getIdentifier();
organizationalUnit2 = mock(OrganizationalUnit.class);
doReturn("organizationalUnit2").when(organizationalUnit2).getIdentifier();
List<OrganizationalUnit> organizationalUnits = new ArrayList<>();
organizationalUnits.add(selectedOrganizationalUnit);
organizationalUnits.add(organizationalUnit2);
selectedRepository = mock(Repository.class);
selectedRepositoryBranches = new ArrayList<>();
selectedRepositoryBranches.add("master");
when(selectedRepository.getDefaultBranch()).thenReturn("master");
when(selectedRepository.getBranches()).thenReturn(selectedRepositoryBranches);
doReturn("repository1").when(selectedRepository).getAlias();
Repository repository2 = mock(Repository.class);
doReturn("repository2").when(repository2).getAlias();
doReturn("defaultBranch").when(repository2).getDefaultBranch();
List<Repository> repositories = new ArrayList<>();
repositories.add(selectedRepository);
repositories.add(repository2);
final OrganizationalUnitRepositoryInfo organizationalUnitRepositoryInfo
= new OrganizationalUnitRepositoryInfo(organizationalUnits,
selectedOrganizationalUnit,
repositories,
selectedRepository);
final OrganizationalUnitRepositoryInfo organizationalUnit2RepositoryInfo
= new OrganizationalUnitRepositoryInfo(organizationalUnits,
organizationalUnit2,
repositories,
selectedRepository);
doReturn(organizationalUnitRepositoryInfo)
.when(libraryService).getDefaultOrganizationalUnitRepositoryInfo();
doReturn(organizationalUnit2RepositoryInfo)
.when(libraryService).getOrganizationalUnitRepositoryInfo(organizationalUnit2);
callback = mock(Command.class);
doAnswer(invocationOnMock -> {
((ParameterizedCommand) invocationOnMock.getArguments()[0]).execute(libraryInternalPreferences);
return null;
}).when(libraryInternalPreferences).load(Matchers.<ParameterizedCommand<LibraryInternalPreferences>>any(),
any());
}
@Test
public void initTest() {
presenter.init(callback);
assertEquals(selectedRepository,
presenter.getSelectedRepository());
assertEquals("master",
presenter.getSelectedBranch());
verify(view).init(presenter);
verify(view).clearRepositories();
verify(view).addRepository("repository1");
verify(view).addRepository("repository2");
verify(view).setSelectedRepository("repository1");
verify(callback).execute();
}
@Test
public void showBranchSelectorOnInit() throws Exception {
presenter.init(callback);
verify(view).setBranchSelectorVisibility(false);
}
@Test
public void hideBranchSelectorOnInit() throws Exception {
selectedRepositoryBranches.add("dev");
presenter.init(callback);
verify(view).setBranchSelectorVisibility(true);
}
@Test
public void updateSelectedRepositoryFailedTest() {
presenter.init(callback);
Mockito.reset(view);
doReturn(false).when(placeManager).closeAllPlacesOrNothing();
doReturn("repository2").when(view).getSelectedRepository();
presenter.onUpdateSelectedRepository();
assertEquals("repository1",
presenter.getSelectedRepository().getAlias());
}
@Test
public void updateSelectedRepositorySucceededTest() {
presenter.init(callback);
Mockito.reset(view);
doReturn(true).when(placeManager).closeAllPlacesOrNothing();
doReturn("repository2").when(view).getSelectedRepository();
presenter.onUpdateSelectedRepository();
assertEquals("repository2",
presenter.getSelectedRepository().getAlias());
assertEquals("defaultBranch",
presenter.getSelectedBranch());
verify(libraryPlaces).goToLibrary(any());
verify(view,
never()).clearRepositories();
verify(view,
never()).addRepository(anyString());
verify(view,
never()).setSelectedRepository(anyString());
verify(view).setSelectedBranch("defaultBranch");
verify(libraryInternalPreferences).setLastOpenedRepository("repository2");
verify(libraryInternalPreferences).save();
}
@Test
public void updateSelectedBranch() throws Exception {
selectedRepositoryBranches.add("dev");
presenter.init(callback);
Mockito.reset(view);
doReturn(true).when(placeManager).closeAllPlacesOrNothing();
doReturn("repository1").when(view).getSelectedRepository();
doReturn("dev").when(view).getSelectedBranch();
presenter.onUpdateSelectedBranch();
verify(libraryPlaces).goToLibrary(any());
verify(view,
never()).clearRepositories();
verify(view,
never()).addRepository(anyString());
verify(view,
never()).setSelectedRepository(anyString());
verify(view,
never()).setSelectedBranch("dev");
}
@Test
public void setSelectedInfoTest() {
presenter.init(callback);
Mockito.reset(view);
doReturn(true).when(placeManager).closeAllPlacesOrNothing();
doReturn("repository2").when(view).getSelectedRepository();
final Command callback = mock(Command.class);
presenter.setSelectedInfo(organizationalUnit2,
selectedRepository,
callback);
assertEquals("repository2",
presenter.getSelectedRepository().getAlias());
verify(libraryPlaces).goToLibrary(callback);
verify(view).clearRepositories();
verify(view).addRepository("repository1");
verify(view).addRepository("repository2");
verify(view).setSelectedRepository("repository1");
}
}