package com.constellio.app.ui.pages.management.valueDomains;
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 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.MetadataSchemaTypeVO;
import com.constellio.app.ui.framework.builders.MetadataSchemaTypeToVOBuilder;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.FakeSessionContext;
import com.constellio.sdk.tests.MockedFactories;
public class ListValueDomainPresenterTest extends ConstellioTest {
@Mock ListValueDomainViewImpl view;
@Mock CoreViews navigator;
@Mock ValueListServices valueListServices;
@Mock MetadataSchemaType valueDomainType1;
@Mock MetadataSchemaTypeToVOBuilder metadataSchemaTypeToVOBuilder;
@Mock MetadataSchemaTypeVO metadataSchemaTypeVO;
ListValueDomainPresenter presenter;
String newValueDomainTitle;
MockedFactories mockedFactories = new MockedFactories();
@Before
public void setUp()
throws Exception {
when(view.getConstellioFactories()).thenReturn(mockedFactories.getConstellioFactories());
when(view.getSessionContext()).thenReturn(FakeSessionContext.dakotaInCollection(zeCollection));
when(view.navigateTo()).thenReturn(navigator);
newValueDomainTitle = "new value domain";
when(valueDomainType1.getLabel(Language.French)).thenReturn(newValueDomainTitle);
presenter = spy(new ListValueDomainPresenter(view));
}
@Test
public void whenValueDomainCreationRequestedThenCreateIt()
throws Exception {
doReturn(valueListServices).when(presenter).valueListServices();
presenter.valueDomainCreationRequested(newValueDomainTitle);
verify(valueListServices).createValueDomain(newValueDomainTitle);
verify(view).refreshTable();
}
@Test
public void givenExistentTitleWhenValueDomainCreationRequestedThenDoNotCreateIt()
throws Exception {
List<MetadataSchemaType> existentMetadataSchemaTypes = new ArrayList<>();
existentMetadataSchemaTypes.add(valueDomainType1);
doReturn(valueListServices).when(presenter).valueListServices();
doReturn(existentMetadataSchemaTypes).when(valueListServices).getValueDomainTypes();
when(presenter.newMetadataSchemaTypeToVOBuilder()).thenReturn(metadataSchemaTypeToVOBuilder);
when(metadataSchemaTypeToVOBuilder.build(valueDomainType1)).thenReturn(metadataSchemaTypeVO);
presenter.valueDomainCreationRequested(newValueDomainTitle);
verify(valueListServices, never()).createTaxonomy(newValueDomainTitle);
verify(view, never()).refreshTable();
}
@Test
public void givenEmptyTitleWhenTaxonomyCreationRequestedThenDoNotCreateIt()
throws Exception {
presenter.valueDomainCreationRequested(" ");
verify(valueListServices, never()).createTaxonomy(newValueDomainTitle);
verify(view, never()).refreshTable();
}
@Test
public void givenExistentTitleWithSpacesWhenValueDomainCreationRequestedThenDoNotCreateIt()
throws Exception {
List<MetadataSchemaType> existentMetadataSchemaTypes = new ArrayList<>();
existentMetadataSchemaTypes.add(valueDomainType1);
doReturn(valueListServices).when(presenter).valueListServices();
doReturn(existentMetadataSchemaTypes).when(valueListServices).getValueDomainTypes();
when(presenter.newMetadataSchemaTypeToVOBuilder()).thenReturn(metadataSchemaTypeToVOBuilder);
when(metadataSchemaTypeToVOBuilder.build(valueDomainType1)).thenReturn(metadataSchemaTypeVO);
presenter.valueDomainCreationRequested(" " + newValueDomainTitle + " ");
verify(valueListServices, never()).createTaxonomy(newValueDomainTitle);
verify(view, never()).refreshTable();
}
}