package com.constellio.app.ui.pages.search;
import com.constellio.app.entities.schemasDisplay.SchemaTypesDisplayConfig;
import com.constellio.app.modules.rm.model.labelTemplate.LabelTemplateManager;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.model.entities.enums.SearchSortType;
import com.constellio.model.services.migrations.ConstellioEIMConfigs;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.search.SearchServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.FakeSessionContext;
import com.constellio.sdk.tests.MockedFactories;
import com.constellio.sdk.tests.MockedNavigation;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
public class AdvancedSearchPresenterTest extends ConstellioTest {
public static final String FACET_CODE = "zeField_s";
@Mock AdvancedSearchView view;
MockedNavigation navigator;
@Mock SchemasDisplayManager schemasDisplayManager;
@Mock LabelTemplateManager labelTemplateManager;
@Mock SchemaTypesDisplayConfig typesDisplayConfig;
@Mock RecordServices recordServices;
@Mock SearchServices searchServices;
MockedFactories factories = new MockedFactories();
AdvancedSearchPresenter presenter;
@Mock
private ConstellioEIMConfigs mockedConfigs;
@Before
public void setUp()
throws Exception {
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.getAppLayerFactory().getLabelTemplateManager()).thenReturn(labelTemplateManager);
when(factories.getModelLayerFactory().newRecordServices()).thenReturn(recordServices);
when(factories.getModelLayerFactory().newSearchServices()).thenReturn(searchServices);
when(view.getSchemaType()).thenReturn("zeSchemaType");
when(factories.getModelLayerFactory().getSystemConfigs()).thenReturn(mockedConfigs);
when(mockedConfigs.getSearchSortType()).thenReturn(SearchSortType.RELEVENCE);
presenter = spy(new AdvancedSearchPresenter(view));
doReturn(null).when(presenter).saveTemporarySearch(true);
}
@Test
public void givenEmptyParametersThenItSetsTheSearchExpressionFromTheView() {
when(view.getSearchExpression()).thenReturn("zeExpression");
presenter.forRequestParameters("");
assertThat(presenter.searchExpression).isEqualTo("zeExpression");
}
@Test
public void givenEmptyParametersThenItSetsTheSchemaTypeFromTheView() {
presenter.forRequestParameters("");
assertThat(presenter.schemaTypeCode).isEqualTo("zeSchemaType");
}
@Test
public void givenSchemaTypeIsNotEmptyAndSearchConditionIsValidThenMustDisplayResultsIsTrue()
throws Exception {
doNothing().when(presenter).buildSearchCondition();
assertThat(presenter.forRequestParameters("").mustDisplayResults()).isTrue();
}
@Test
public void givenSchemaTypeIsEmptyThenMustDisplayResultsIsFalse() {
when(view.getSchemaType()).thenReturn("");
assertThat(presenter.forRequestParameters("").mustDisplayResults()).isFalse();
}
@Test
public void givenSchemaTypeIsNullThenMustDisplayResultsIsFalse() {
when(view.getSchemaType()).thenReturn(null);
assertThat(presenter.forRequestParameters("").mustDisplayResults()).isFalse();
}
@Test
public void givenNullSchemaTypeWhenGetTemplateThenReturnDefaultEmptyTemplate()
throws Exception {
when(view.getSchemaType()).thenReturn(null);
presenter.forRequestParameters("");
presenter.getTemplates();
verify(labelTemplateManager).listTemplates(null);
}
@Test
public void givenFolderSchemaTypeWhenGetTemplateThenReturnDefaultEmptyTemplate()
throws Exception {
when(view.getSchemaType()).thenReturn(Folder.SCHEMA_TYPE);
presenter.forRequestParameters("");
presenter.getDefaultTemplates();
verify(labelTemplateManager).listTemplates(Folder.SCHEMA_TYPE);
}
@Test
public void givenContainerSchemaTypeWhenGetTemplateThenReturnDefaultEmptyTemplate()
throws Exception {
when(view.getSchemaType()).thenReturn(ContainerRecord.SCHEMA_TYPE);
presenter.forRequestParameters("");
presenter.getDefaultTemplates();
verify(labelTemplateManager).listTemplates(ContainerRecord.SCHEMA_TYPE);
}
}