package com.constellio.app.ui.acceptation.components;
import static org.mockito.Mockito.when;
import java.io.Serializable;
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.framework.components.BaseForm;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.model.frameworks.validation.ValidationException;
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.data.fieldgroup.PropertyId;
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.TextField;
import com.vaadin.ui.VerticalLayout;
@UiTest
@InDevelopmentTest
public class BaseFormAcceptanceTest 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;
DummyBean dummyBean;
@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));
}
@Test
public void givenNameThenDisplayedInField()
throws Exception {
dummyBean = new DummyBean("zeId");
driver.navigateTo().url(dummyPage);
waitUntilICloseTheBrowsers();
}
public static class DummyBean implements Serializable {
private String name;
public DummyBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
private static class DummyViewPresenter {
protected void saveButtonClick(DummyBean dummyBean)
throws ValidationException {
}
protected void cancelButtonClick(DummyBean dummyBean) {
}
}
public class DummyView extends BaseViewImpl implements View {
@PropertyId("name")
private TextField aField;
@Override
protected String getTitle() {
return "BaseFormAcceptanceTest";
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
System.out.println("session id > " + ConstellioUI.getCurrent().getSession().getSession().getId());
aField = new TextField("Name");
VerticalLayout verticalLayout = new VerticalLayout();
BaseForm<DummyBean> form = new BaseForm<DummyBean>(dummyBean, DummyView.this, aField) {
@Override
protected void saveButtonClick(DummyBean dummyBean)
throws ValidationException {
simulateLatency();
presenter.saveButtonClick(dummyBean);
}
@Override
protected void cancelButtonClick(DummyBean dummyBean) {
simulateLatency();
presenter.cancelButtonClick(dummyBean);
}
};
form.addStyleName("zeForm");
verticalLayout.addComponent(form);
return verticalLayout;
}
}
private void simulateLatency() {
try {
Thread.sleep(400);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}