package com.constellio.app.ui.pages.management.taxonomy; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import com.constellio.sdk.tests.MockedNavigation; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.rm.services.ValueListServices; import com.constellio.app.ui.application.CoreViews; import com.constellio.app.ui.entities.TaxonomyVO; import com.constellio.model.entities.Taxonomy; import com.constellio.model.services.taxonomies.TaxonomiesManager; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedFactories; public class AddEditTaxonomyPresenterTest extends ConstellioTest { @Mock AddEditTaxonomyView view; MockedNavigation navigator; @Mock ValueListServices valueListServices; @Mock Taxonomy taxonomy1, taxonomy2, taxonomy3, taxonomy4, taxonomy5; @Mock TaxonomiesManager taxonomiesManager; TaxonomyVO taxonomyVO; List<String> userIds; List<String> groupIds; AddEditTaxonomyPresenter presenter; String newTaxonomyTitle; MockedFactories mockedFactories = new MockedFactories(); @Before public void setUp() throws Exception { navigator = new MockedNavigation(); when(view.getConstellioFactories()).thenReturn(mockedFactories.getConstellioFactories()); when(view.getSessionContext()).thenReturn(FakeSessionContext.dakotaInCollection(zeCollection)); when(view.navigate()).thenReturn(navigator); when(mockedFactories.getModelLayerFactory().getTaxonomiesManager()).thenReturn(taxonomiesManager); newTaxonomyTitle = "taxonomy 1"; userIds = new ArrayList<>(); userIds.add("chuck"); userIds.add("bob"); groupIds = new ArrayList<>(); groupIds.add("heroes"); groupIds.add("legends"); taxonomyVO = new TaxonomyVO("taxo1", newTaxonomyTitle, new ArrayList<String>(), zeCollection, userIds, groupIds, true); when(taxonomy1.getTitle()).thenReturn(newTaxonomyTitle); presenter = spy(new AddEditTaxonomyPresenter(view)); } @Test public void whenSaveButtonClickedThenCreateIt() throws Exception { doReturn(valueListServices).when(presenter).valueListServices(); presenter.saveButtonClicked(taxonomyVO); verify(valueListServices).createTaxonomy(taxonomyVO.getTitle(), taxonomyVO.getUserIds(), taxonomyVO.getGroupIds(), true); verify(view.navigate().to()).listTaxonomies(); } @Test public void givenActionEditWhenSaveButtonClickedThenEditIt() throws Exception { doReturn(taxonomy1).when(presenter).fetchTaxonomy(taxonomyVO.getCode()); doReturn(taxonomy2).when(taxonomy1).withTitle(taxonomyVO.getTitle()); doReturn(taxonomy3).when(taxonomy2).withUserIds(taxonomyVO.getUserIds()); doReturn(taxonomy4).when(taxonomy3).withGroupIds(taxonomyVO.getGroupIds()); doReturn(taxonomy5).when(taxonomy4).withVisibleInHomeFlag(taxonomyVO.isVisibleInHomePage()); doReturn(valueListServices).when(presenter).valueListServices(); when(presenter.isActionEdit()).thenReturn(true); presenter.saveButtonClicked(taxonomyVO); verify(presenter).fetchTaxonomy(taxonomyVO.getCode()); verify(taxonomiesManager).editTaxonomy(taxonomy5); verify(view.navigate().to()).listTaxonomies(); } @Test public void givenExistentTitleWhenSaveButtonClickedThenDoNotCreateIt() throws Exception { List<Taxonomy> existentTaxonomies = new ArrayList<>(); existentTaxonomies.add(taxonomy1); doReturn(valueListServices).when(presenter).valueListServices(); doReturn(existentTaxonomies).when(valueListServices).getTaxonomies(); presenter.saveButtonClicked(taxonomyVO); verify(valueListServices, never()).createTaxonomy(taxonomyVO.getTitle(), taxonomyVO.getUserIds(), taxonomyVO.getGroupIds(), true); } @Test public void whenCancelButtonClickThenReturnToList() throws Exception { presenter.cancelButtonClicked(); verify(view.navigate().to()).listTaxonomies(); } }