package com.constellio.app.ui.pages.search; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.Locale; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.ui.entities.SearchBoostVO; import com.constellio.app.ui.framework.builders.SearchBoostToVOBuilder; import com.constellio.app.ui.framework.data.SearchBoostDataProvider; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.schemas.MetadataListFilter; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.search.SearchBoostManager; import com.constellio.model.services.search.entities.SearchBoost; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedNavigation; /** * Created by Patrick on 2015-11-09. */ public class SearchBoostByMetadataPresenterAcceptTest extends ConstellioTest { public static final String METADATA = "metadata"; @Mock SearchBoostView view; MockedNavigation navigator; UserServices userServices; SearchBoost searchBoostTitle, searchBoostCode; SearchBoostVO searchBoostVOTitle, searchBoostVOCode; SearchBoostByMetadataPresenter presenter; SessionContext sessionContext; MetadataSchemasManager metadataSchemasManager; SearchBoostManager searchBoostManager; SearchBoostToVOBuilder voBuilder = new SearchBoostToVOBuilder(); SearchBoostDataProvider dataProvider; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withAllTestUsers(), withCollection("otherCollection") ); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); userServices = getModelLayerFactory().newUserServices(); metadataSchemasManager = getModelLayerFactory().getMetadataSchemasManager(); searchBoostManager = getModelLayerFactory().getSearchBoostManager(); for (String collection : getModelLayerFactory().getCollectionsListManager().getCollectionsExcludingSystem()) { for (SearchBoost searchBoost : searchBoostManager.getAllSearchBoostsByMetadataType(collection)) { searchBoostManager.delete(zeCollection, searchBoost); } } when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); when(view.navigate()).thenReturn(navigator); searchBoostTitle = new SearchBoost(METADATA, Schemas.TITLE.getDataStoreCode(), "Titre", 1d); searchBoostCode = new SearchBoost(METADATA, Schemas.CODE.getDataStoreCode(), "Code", 2d); searchBoostVOCode = voBuilder.build(searchBoostCode); presenter = new SearchBoostByMetadataPresenter(view); } @Test public void whenGetDataProviderThenOk() throws Exception { givenTwoSearchBoostByFields(); dataProvider = presenter.newDataProvider(); assertThat(dataProvider.size()).isEqualTo(2); assertThat(dataProvider.getSearchBoostVO(0)).isEqualToComparingFieldByField(voBuilder.build(searchBoostCode)); assertThat(dataProvider.getSearchBoostVO(1)).isEqualToComparingFieldByField(voBuilder.build(searchBoostTitle)); } @Test public void givenSearchBoostVOWhenAddButtonClickedThenOk() throws Exception { presenter.addButtonClicked(searchBoostVOCode, "1"); dataProvider = presenter.newDataProvider(); assertThat(dataProvider.size()).isEqualTo(1); presenter.getSearchBoostVO(0, dataProvider); assertThat(presenter.getSearchBoostVO(0, presenter.newDataProvider())).isEqualToComparingFieldByField(searchBoostVOCode); } @Test public void givenSearchBoostVOWhenEditButtonClickedThenOk() throws Exception { presenter.addButtonClicked(searchBoostVOCode, "1"); presenter.editButtonClicked(searchBoostVOCode, "2", searchBoostVOCode); dataProvider = presenter.newDataProvider(); assertThat(dataProvider.size()).isEqualTo(1); assertThat(presenter.getSearchBoostVO(0, dataProvider).getValue()).isEqualTo(2d); assertThat(presenter.getSearchBoostVO(0, dataProvider).getKey()) .isEqualTo(searchBoostVOCode.getKey()); assertThat(presenter.getSearchBoostVO(0, dataProvider).getLabel()).isEqualTo(searchBoostVOCode.getLabel()); } @Test public void givenSearchBoostVOWhenDeleteButtonClickedThenOk() throws Exception { presenter.addButtonClicked(searchBoostVOCode, "1"); presenter.deleteButtonClicked(searchBoostVOCode); dataProvider = presenter.newDataProvider(); assertThat(dataProvider.size()).isEqualTo(0); } @Test public void whenGetMetadatasThenGetAllMetadatasFromCollection() throws Exception { MetadataListFilter filterSearchable = new MetadataListFilter() { @Override public boolean isReturned(Metadata metadata) { return metadata.isSearchable(); } }; assertThat(presenter.getMetadatasSearchBoostVO()).hasSize( metadataSchemasManager.getSchemaTypes(zeCollection).getAllMetadatas().only(filterSearchable).size()); assertThat(presenter.getMetadatasSearchBoostVO()).extracting("key").doesNotHaveDuplicates(); } @Test public void givenSearchBoostVOAndANotDoubleValueWhenAddButtonClickedThenDoNotAdd() throws Exception { presenter.addButtonClicked(searchBoostVOCode, "notDouble"); dataProvider = presenter.newDataProvider(); assertThat(dataProvider.size()).isEqualTo(0); } // private void givenTwoSearchBoostByFields() { searchBoostManager.add(zeCollection, searchBoostTitle); searchBoostManager.add(zeCollection, searchBoostCode); } }