package com.constellio.app.ui.acceptation.components.fields;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.modules.rm.RMTestRecords;
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.fields.ListOptionGroup;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.tools.OptionGroupWebElement;
import com.constellio.data.utils.Factory;
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;
@UiTest
public class OptionGroupAcceptanceTest extends ConstellioTest {
String dummyPage = "dummyPage";
@Mock DummyViewPresenter presenter;
@Mock DummyViewPresenter otherFormPresenter;
RMTestRecords rm = new RMTestRecords(zeCollection);
ConstellioWebDriver driver;
List<String> options;
DummyView dummyView;
OptionGroupWebElement radioGroupField;
OptionGroupWebElement checkboxGroupField;
@Before
public void setUp()
throws Exception {
options = new ArrayList<>();
options.add("Chuck");
options.add("Dakota");
options.add("Bob");
withSpiedServices(AppLayerFactory.class);
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers()
);
rm.setup(getAppLayerFactory()).withFoldersAndContainersOfEveryStatus();
dummyView = new DummyView();
AppLayerFactory factory = getAppLayerFactory();
NavigatorConfigurationService navigatorConfigurationService = new NavigatorConfigurationService() {
@Override
public void configure(Navigator navigator) {
super.configure(navigator);
navigator.addView(dummyPage, dummyView);
}
};
when(factory.getNavigatorConfigurationService()).thenReturn(navigatorConfigurationService);
driver = newWebDriver(loggedAsUserInCollection("admin", zeCollection));
}
@Test
@InDevelopmentTest
//TODO Vincent Ne passe plus
public void givenRadioAndCheckboxesFields()
throws Exception {
givenOptionGroupFieldsComponents();
driver.navigateTo().url(dummyPage + "/" + Locale.FRENCH);
driver.manage().window().maximize();
radioGroupField = new OptionGroupWebElement(driver.find("zeRadiosField"));
checkboxGroupField = new OptionGroupWebElement(driver.find("zeCheckboxesField"));
whenGetValuesThenOK();
whenToggleCheckboxesValuesThenOK();
whenToggleRadioButtonValueThenOK();
}
public void whenGetValuesThenOK()
throws Exception {
assertThat(radioGroupField.isMultiSelect()).isFalse();
assertThat(radioGroupField.getAllValues()).hasSize(3);
assertThat(radioGroupField.getCheckedValues()).isEmpty();
assertThat(radioGroupField.getAllValues())
.containsExactly("Chuck", "Dakota", "Bob");
assertThat(checkboxGroupField.isMultiSelect()).isTrue();
assertThat(checkboxGroupField.getAllValues()).hasSize(3);
assertThat(checkboxGroupField.getCheckedValues()).isEmpty();
assertThat(checkboxGroupField.getAllValues())
.containsExactly("Chuck", "Dakota", "Bob");
}
public void whenToggleCheckboxesValuesThenOK()
throws Exception {
checkboxGroupField.toggle("Dakota");
checkboxGroupField.toggle("Bob");
assertThat(checkboxGroupField.isMultiSelect()).isTrue();
assertThat(checkboxGroupField.getAllValues()).hasSize(3);
assertThat(checkboxGroupField.getCheckedValues()).hasSize(2);
assertThat(checkboxGroupField.getAllValues())
.containsExactly("Chuck", "Dakota", "Bob");
assertThat(checkboxGroupField.getCheckedValues())
.containsExactly("Dakota", "Bob");
}
public void whenToggleRadioButtonValueThenOK()
throws Exception {
radioGroupField.toggle("Dakota");
radioGroupField.toggle("Bob");
assertThat(radioGroupField.isMultiSelect()).isFalse();
assertThat(radioGroupField.getAllValues()).hasSize(3);
assertThat(radioGroupField.getCheckedValues()).hasSize(1);
assertThat(radioGroupField.getAllValues())
.containsExactly("Chuck", "Dakota", "Bob");
assertThat(radioGroupField.getCheckedValues())
.containsExactly("Bob");
}
//
private static class DummyViewPresenter {
}
@SuppressWarnings("serial")
public static class DummyView extends BaseViewImpl implements View {
static Factory<ListOptionGroup> listRadioGroupFactory;
static Factory<ListOptionGroup> listCheckboxGroupFactory;
public DummyView() {
super();
}
@Override
protected String getTitle() {
return "OptionGroupAcceptanceTest";
}
@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();
ListOptionGroup listRadioGroup = listRadioGroupFactory.get();
ListOptionGroup listCheckboxGroup = listCheckboxGroupFactory.get();
verticalLayout.addComponent(listRadioGroup);
verticalLayout.addComponent(listCheckboxGroup);
return verticalLayout;
}
}
private void givenOptionGroupFieldsComponents() {
DummyView.listRadioGroupFactory = new Factory<ListOptionGroup>() {
@Override
public ListOptionGroup get() {
ListOptionGroup listOptionGroup = new ListOptionGroup("List radioOptionGroup", options);
listOptionGroup.addStyleName("zeRadiosField");
listOptionGroup.setMultiSelect(false);
// listOptionGroup.setImmediate(true);
return listOptionGroup;
}
};
DummyView.listCheckboxGroupFactory = new Factory<ListOptionGroup>() {
@Override
public ListOptionGroup get() {
ListOptionGroup listOptionGroup = new ListOptionGroup("List checkBoxOptionGroup", options);
listOptionGroup.addStyleName("zeCheckboxesField");
listOptionGroup.setMultiSelect(true);
// listOptionGroup.setImmediate(true);
return listOptionGroup;
}
};
}
}