package com.constellio.app.ui.acceptation.components;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.application.NavigatorConfigurationService;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.MetadataValueVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.RecordVO.VIEW_MODE;
import com.constellio.app.ui.framework.components.RecordDisplay;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.tools.RecordDisplayWebElement;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.InDevelopmentTest;
import com.constellio.sdk.tests.annotations.UiTest;
import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebDriver;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@InDevelopmentTest
@UiTest
public class RecordDisplayAcceptanceTest extends ConstellioTest {
boolean REQUIRED = true;
boolean MULTIVALUE = true;
boolean READONLY = true;
boolean FACULTATIVE = false;
boolean SINGLEVALUE = false;
boolean READWRITE = false;
String dummyPage = "dummyPage";
@Mock DummyViewPresenter presenter;
@Mock DummyViewPresenter otherFormPresenter;
ConstellioWebDriver driver;
RecordVO dummyViewRecord;
MetadataSchemaVO schema;
@Before
public void setUp()
throws Exception {
withSpiedServices(AppLayerFactory.class);
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers()
);
AppLayerFactory factory = getAppLayerFactory();
NavigatorConfigurationService navigatorConfigurationService = new NavigatorConfigurationService() {
@Override
public void configure(Navigator navigator) {
super.configure(navigator);
navigator.addView(dummyPage, new DummyView());
}
};
when(factory.getNavigatorConfigurationService()).thenReturn(navigatorConfigurationService);
driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection));
schema = new MetadataSchemaVO("zeSchema", zeCollection, asLocaleMap("The schema", "Ze schema"));
}
@Test
public void givenLocaleThenDisplayedCaptionInSameLanguage() {
MetadataVO metadata1 = new MetadataVO("metadata1", MetadataValueType.STRING, zeCollection, schema, FACULTATIVE,
SINGLEVALUE,
READWRITE, asLocaleMap("The m1", "Ze M1"), null, null, null, null, null, null, null, null, false);
MetadataValueVO metadata1Value = new MetadataValueVO(metadata1, "testmetadata1");
dummyViewRecord = new RecordVO("zeId", Arrays.asList(metadata1Value), VIEW_MODE.DISPLAY);
RecordDisplayWebElement recordDisplay;
driver.navigateTo().url(dummyPage + "/" + Locale.FRENCH);
recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.getCaption("metadata1")).isEqualTo("Ze M1");
assertThat(recordDisplay.getValue("metadata1")).isEqualTo("testmetadata1");
driver.navigateTo().url(dummyPage + "/" + Locale.ENGLISH);
recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.getCaption("metadata1")).isEqualTo("The m1");
assertThat(recordDisplay.getValue("metadata1")).isEqualTo("testmetadata1");
}
@Test
public void givenDateMetadataThenDisplayedWithCorrectCaptionAndPattern() {
MetadataVO metadata1 = new MetadataVO("metadata1", MetadataValueType.DATE_TIME, zeCollection, schema, FACULTATIVE,
SINGLEVALUE,
READWRITE, asLocaleMap("The m1", "Ze M1"), null, null, null, null, null, null, null, null, false);
MetadataValueVO metadata1Value = new MetadataValueVO(metadata1, new LocalDateTime(2015, 2, 15, 0, 0));
dummyViewRecord = new RecordVO("zeId", Arrays.asList(metadata1Value), VIEW_MODE.DISPLAY);
driver.navigateTo().url(dummyPage + "/" + Locale.FRENCH);
RecordDisplayWebElement recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.getCaption("metadata1")).isEqualTo("Ze M1");
assertThat(recordDisplay.getValue("metadata1")).isEqualTo("2015-02-15 00:00:00");
}
@Test
public void givenNullMetadataThenConsideredInvisible() {
MetadataVO metadata1 = new MetadataVO("metadata1", MetadataValueType.STRING, zeCollection, schema, FACULTATIVE,
SINGLEVALUE,
READWRITE, asLocaleMap("The m1", "Ze M1"), null, null, null, null, null, null, null, null, false);
MetadataValueVO metadata1Value = new MetadataValueVO(metadata1, null);
dummyViewRecord = new RecordVO("zeId", Arrays.asList(metadata1Value), VIEW_MODE.DISPLAY);
driver.navigateTo().url(dummyPage + "/" + Locale.ENGLISH);
RecordDisplayWebElement recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.isVisible("metadata1")).isFalse();
}
@Test
public void givenANumberIdMetadataThenDisplayedWithoutZeroBeforeTheNumber() {
MetadataVO metadata1 = new MetadataVO("metadata_default_id", MetadataValueType.STRING, zeCollection, schema, FACULTATIVE,
SINGLEVALUE,
READWRITE, asLocaleMap("The m1", "Ze M1"), null, null, null, null, null, null, null, null, false);
MetadataValueVO metadata1Value = new MetadataValueVO(metadata1, "000000000304050670");
dummyViewRecord = new RecordVO("zeId", Arrays.asList(metadata1Value), VIEW_MODE.DISPLAY);
driver.navigateTo().url(dummyPage + "/" + Locale.FRENCH);
RecordDisplayWebElement recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.getCaption("metadata_default_id")).isEqualTo("Ze M1");
assertThat(recordDisplay.getValue("metadata_default_id")).isEqualTo("304050670");
}
@Test
public void givenANotNumberIdMetadataThenTheId() {
MetadataVO metadata1 = new MetadataVO("metadata_default_id", MetadataValueType.STRING, zeCollection, schema, FACULTATIVE,
SINGLEVALUE,
READWRITE, asLocaleMap("The m1", "Ze M1"), null, null, null, null, null, null, null, null, false);
MetadataValueVO metadata1Value = new MetadataValueVO(metadata1, "00000C0670");
dummyViewRecord = new RecordVO("zeId", Arrays.asList(metadata1Value), VIEW_MODE.DISPLAY);
driver.navigateTo().url(dummyPage + "/" + Locale.FRENCH);
RecordDisplayWebElement recordDisplay = new RecordDisplayWebElement(driver.find("zeDisplay"));
assertThat(recordDisplay.getCaption("metadata_default_id")).isEqualTo("Ze M1");
assertThat(recordDisplay.getValue("metadata_default_id")).isEqualTo("00000C0670");
}
private static Map<Locale, String> asLocaleMap(String englishValue, String frenchValue) {
Map<Locale, String> map = new HashMap<>();
map.put(Locale.ENGLISH, englishValue);
map.put(Locale.FRENCH, frenchValue);
return map;
}
private static class DummyViewPresenter {
}
@SuppressWarnings("serial")
public class DummyView extends BaseViewImpl implements View {
public DummyView() {
super();
}
@Override
protected String getTitle() {
return "RecordDisplayAcceptanceTest";
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
String localeCode = event.getParameters();
if (StringUtils.isNotEmpty(localeCode)) {
UI.getCurrent().setLocale(new Locale(localeCode));
}
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
System.out.println("session id > " + ConstellioUI.getCurrent().getSession().getSession().getId());
VerticalLayout verticalLayout = new VerticalLayout();
RecordDisplay recordDisplay = new RecordDisplay(dummyViewRecord);
recordDisplay.addStyleName("zeDisplay");
verticalLayout.addComponent(recordDisplay);
return verticalLayout;
}
}
}