/* * 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.screens; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.enterprise.event.Event; import org.guvnor.common.services.project.client.security.ProjectController; import org.guvnor.common.services.project.model.Project; 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.examples.model.ExampleProject; import org.kie.workbench.common.screens.library.api.LibraryInfo; import org.kie.workbench.common.screens.library.api.LibraryService; import org.kie.workbench.common.screens.library.api.ProjectInfo; import org.kie.workbench.common.screens.library.api.search.FilterUpdateEvent; import org.kie.workbench.common.screens.library.client.events.ProjectDetailEvent; import org.kie.workbench.common.screens.library.client.util.ExamplesUtils; import org.kie.workbench.common.screens.library.client.util.LibraryPlaces; import org.mockito.Mock; 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 LibraryScreenTest { @Mock private LibraryScreen.View view; @Mock private PlaceManager placeManager; @Mock private LibraryPlaces libraryPlaces; @Mock private Event<ProjectDetailEvent> projectDetailEvent; @Mock private LibraryService libraryService; private Caller<LibraryService> libraryServiceCaller; @Mock private ExamplesUtils examplesUtils; @Mock private ProjectController projectController; private LibraryScreen libraryScreen; private ExampleProject exampleProject1; private ExampleProject exampleProject2; private Project project1; private Project project2; private Project project3; @Before public void setup() { libraryServiceCaller = new CallerMock<>(libraryService); exampleProject1 = mock(ExampleProject.class); exampleProject2 = mock(ExampleProject.class); final Set<ExampleProject> exampleProjects = new HashSet<>(); exampleProjects.add(exampleProject1); exampleProjects.add(exampleProject2); doAnswer(invocationOnMock -> { final ParameterizedCommand<Set<ExampleProject>> callback = (ParameterizedCommand<Set<ExampleProject>>) invocationOnMock.getArguments()[0]; callback.execute(exampleProjects); return null; }).when(examplesUtils).getExampleProjects(any(ParameterizedCommand.class)); libraryScreen = spy(new LibraryScreen(view, placeManager, libraryPlaces, projectDetailEvent, libraryServiceCaller, examplesUtils, projectController)); project1 = mock(Project.class); doReturn("project1Name").when(project1).getProjectName(); project2 = mock(Project.class); doReturn("project2Name").when(project2).getProjectName(); project3 = mock(Project.class); doReturn("project3Name").when(project3).getProjectName(); final List<Project> projects = new ArrayList<>(); projects.add(project1); projects.add(project2); projects.add(project3); final LibraryInfo libraryInfo = new LibraryInfo("master", projects); doReturn(libraryInfo).when(libraryService).getLibraryInfo(any(Repository.class), anyString()); doReturn(true).when(projectController).canCreateProjects(); doReturn(true).when(projectController).canReadProjects(); doReturn(true).when(projectController).canReadProject(any()); doReturn(false).when(projectController).canReadProject(project2); libraryScreen.setup(); } @Test public void setupTest() { verify(view).clearFilterText(); verify(view).clearProjects(); verify(placeManager).closePlace(LibraryPlaces.EMPTY_LIBRARY_SCREEN); verify(view, times(2)).addProject(anyString(), any(Command.class), any(Command.class)); verify(view, times(1)).addProject(eq("project1Name"), any(Command.class), any(Command.class)); verify(view, never()).addProject(eq("project2Name"), any(Command.class), any(Command.class)); verify(view, times(1)).addProject(eq("project3Name"), any(Command.class), any(Command.class)); } @Test public void canImportProjectTest() { final ExampleProject exampleProject = mock(ExampleProject.class); libraryScreen.importProject(exampleProject); verify(examplesUtils).importProject(exampleProject); } @Test public void cannotImportProjectTest() { doReturn(false).when(projectController).canCreateProjects(); final ExampleProject exampleProject = mock(ExampleProject.class); libraryScreen.importProject(exampleProject); verify(examplesUtils, never()).importProject(exampleProject); } @Test public void updateImportProjectsTest() { libraryScreen.updateImportProjects(); verify(view).clearImportProjectsContainer(); verify(view, times(2)).addProjectToImport(any(ExampleProject.class)); verify(view).addProjectToImport(exampleProject1); verify(view).addProjectToImport(exampleProject2); } @Test public void selectCommandTest() { libraryScreen.selectCommand(project1).execute(); verify(libraryPlaces).goToProject(any(ProjectInfo.class)); } @Test public void detailsCommandTest() { libraryScreen.detailsCommand(project1).execute(); verify(projectDetailEvent).fire(any(ProjectDetailEvent.class)); } @Test public void filterProjectsTest() { assertEquals(2, libraryScreen.projects.size()); assertEquals(1, libraryScreen.filterProjects("project1").size()); } @Test public void filterUpdateTest() { libraryScreen.filterUpdate(new FilterUpdateEvent("name")); verify(view).setFilterName("name"); verify(libraryScreen).filterProjects("name"); } }