package com.constellio.app.ui.pages.search; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.entities.schemasDisplay.SchemaTypesDisplayConfig; import com.constellio.app.services.schemasDisplay.SchemasDisplayManager; import com.constellio.model.entities.enums.SearchSortType; import com.constellio.model.entities.records.wrappers.SavedSearch; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.services.migrations.ConstellioEIMConfigs; import com.constellio.model.services.parser.LanguageDetectionManager; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedFactories; import com.constellio.sdk.tests.MockedNavigation; public class SimpleSearchPresenterTest extends ConstellioTest { public static final String EXPRESSION = "zexpression"; public static final String FACET_CODE = "zeField_s"; @Mock SimpleSearchView view; MockedNavigation navigator; @Mock LanguageDetectionManager detectionManager; @Mock LogicalSearchQuery query; @Mock Metadata metadata; @Mock SchemasDisplayManager schemasDisplayManager; @Mock SchemaTypesDisplayConfig typesDisplayConfig; MockedFactories factories = new MockedFactories(); SimpleSearchPresenter presenter; @Mock private ConstellioEIMConfigs mockedConfigs; @Before public void setUp() { when(view.getConstellioFactories()).thenReturn(factories.getConstellioFactories()); when(view.getSessionContext()).thenReturn(FakeSessionContext.gandalfInCollection(zeCollection)); when(view.navigate()).thenReturn(navigator); when(view.getCollection()).thenReturn(zeCollection); when(factories.getAppLayerFactory().getMetadataSchemasDisplayManager()).thenReturn(schemasDisplayManager); when(schemasDisplayManager.getTypes(zeCollection)).thenReturn(typesDisplayConfig); when(factories.getModelLayerFactory().getSystemConfigs()).thenReturn(mockedConfigs); when(mockedConfigs.getSearchSortType()).thenReturn(SearchSortType.RELEVENCE); presenter = spy(new SimpleSearchPresenter(view)); } @Test public void givenParametersWithSearchExpressionAndPageNumberThenBothAreSaved() { doReturn(mock(SavedSearch.class)).when(presenter).saveTemporarySearch(anyBoolean()); presenter.forRequestParameters("q/zexpression/42"); assertThat(presenter.getUserSearchExpression()).isEqualTo(EXPRESSION); assertThat(presenter.getPageNumber()).isEqualTo(42); assertThat(presenter.mustDisplayResults()).isTrue(); } @Test public void givenParametersWithSearchExpressionWithoutPageNumberThenSearchExpressionIsSavedAndPageNumberIsSetToOne() { doReturn(mock(SavedSearch.class)).when(presenter).saveTemporarySearch(anyBoolean()); presenter.forRequestParameters("q/" + EXPRESSION); assertThat(presenter.getUserSearchExpression()).isEqualTo(EXPRESSION); assertThat(presenter.getPageNumber()).isEqualTo(1); assertThat(presenter.mustDisplayResults()).isTrue(); } @Test public void givenEmptyParametersTheSearchExpressionIsEmpty() { presenter.forRequestParameters(""); assertThat(presenter.getUserSearchExpression()).isEqualTo(""); assertThat(presenter.mustDisplayResults()).isFalse(); } @Test public void givenNullParametersTheSearchExpressionIsEmpty() { presenter.forRequestParameters(null); assertThat(presenter.getUserSearchExpression()).isEqualTo(""); assertThat(presenter.mustDisplayResults()).isFalse(); } }