package com.constellio.app.ui.pages.management.collections;
import static org.assertj.core.api.Assertions.assertThat;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.ui.application.NavigatorConfigurationService;
import com.constellio.app.ui.tools.vaadin.WebElementUtils;
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;
@UiTest
@InDevelopmentTest
public class CollectionManagementViewImplAcceptanceTest extends ConstellioTest {
ConstellioWebDriver driver;
RMSchemasRecordsServices schemas;
RMTestRecords rm = new RMTestRecords(zeCollection);
ManageCollectionsFacade manageCollectionsFacade;
@Before
public void setUp()
throws Exception {
schemas = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers()
);
rm.setup(getAppLayerFactory()).withFoldersAndContainersOfEveryStatus();
driver = newWebDriver(loggedAsUserInCollection("admin", zeCollection));
}
@Test
public void whenAddCollectionThenValidateNotExistingCodeAndCreateCollection()
throws AWTException {
navigateToCollectionsManagement();
Map<String, String> existingCollections = getInitCollections();
validateExistingCollections(existingCollections);
AddEditCollectionFacade addEditCollectionFacade = addCollectionAndSave("zeCollection", "Collection avec code existant");
//FIXME pourquoi ca fonctionne pas?
//String errorMessage = addEditCollectionFacade.getErrorMessage();
//assertThat(errorMessage).isEqualTo($("AddEditCollectionView.codeNonAvailable"));
WebElementUtils.pressEscapeAndRelease();
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
addCollectionAndCancel("collection2", "Collection 2");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
addCollectionAndSave("collection2", "Collection 2");
existingCollections.put("collection2", "Collection 2");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
//waitUntilICloseTheBrowsers();
}
private void navigateToCollectionsManagement() {
driver.navigateTo().url(NavigatorConfigurationService.COLLECTION_MANAGEMENT);
manageCollectionsFacade = new ManageCollectionsFacade(driver);
}
@Test
public void whenModifyCollectionThenCodeFieldIsDisabledAndNameIsModified() {
Map<String, String> existingCollections = getInitCollections();
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
modifyCollectionAndCancel(0, "Ze Collection");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
modifyCollectionAndSave(0, "Ze Collection");
existingCollections.put("zeCollection", "Ze Collection");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
//waitUntilICloseTheBrowsers();
}
@Test
public void whenRemoveCollectionThenIfNotCurrentCollectionThenCollectionIsRemoved() {
Map<String, String> existingCollections = getInitCollections();
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
try {
manageCollectionsFacade.deleteButtonEnabled(0);
throw new RuntimeException("Delete button should not be visible for the current collection");
} catch (Exception e) {
}
addCollectionAndSave("collection2", "Collection 2");
existingCollections.put("collection2", "Collection 2");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
assertThat(manageCollectionsFacade.deleteButtonEnabled(1)).isEqualTo(true);
//FIXME pourquoi ca fonctionne pas?
/*manageCollectionsFacade.clickRemoveCollectionAndCancel(1);//BaseFormWebElement saveCancelFacade =
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);*/
manageCollectionsFacade.clickRemoveCollectionAndValidate(1);
existingCollections.remove("collection2");
navigateToCollectionsManagement();
validateExistingCollections(existingCollections);
//waitUntilICloseTheBrowsers();
}
private AddEditCollectionFacade addCollectionAndSave(String code, String name) {
AddEditCollectionFacade addEditCollectionFacade = addCollection(code, name);
addEditCollectionFacade.save();
return addEditCollectionFacade;
}
private AddEditCollectionFacade addCollectionAndCancel(String code, String name) {
AddEditCollectionFacade addEditCollectionFacade = addCollection(code, name);
addEditCollectionFacade.cancel();
return addEditCollectionFacade;
}
private AddEditCollectionFacade addCollection(String code, String name) {
manageCollectionsFacade.clickAddCollection();
AddEditCollectionFacade addEditCollectionFacade = new AddEditCollectionFacade(driver);
assertThat(addEditCollectionFacade.isCodeFieldEnabled()).isTrue();
addEditCollectionFacade.setCode(code);
addEditCollectionFacade.setName(name);
return addEditCollectionFacade;
}
private AddEditCollectionFacade modifyCollectionAndSave(int i, String name) {
AddEditCollectionFacade addEditCollectionFacade = modifyCollection(i, name);
addEditCollectionFacade.save();
return addEditCollectionFacade;
}
private AddEditCollectionFacade modifyCollectionAndCancel(int i, String name) {
AddEditCollectionFacade addEditCollectionFacade = modifyCollection(i, name);
addEditCollectionFacade.cancel();
return addEditCollectionFacade;
}
private AddEditCollectionFacade modifyCollection(int i, String name) {
manageCollectionsFacade.clickModifyCollection(i);
AddEditCollectionFacade addEditCollectionFacade = new AddEditCollectionFacade(driver);
assertThat(addEditCollectionFacade.isCodeFieldEnabled()).isFalse();
addEditCollectionFacade.setName(name);
return addEditCollectionFacade;
}
private void validateExistingCollections(Map<String, String> existingCollections) {
assertThat(manageCollectionsFacade.getCollectionSize()).isEqualTo(existingCollections.size());
for (int i = 0; i < manageCollectionsFacade.getCollectionSize(); i++) {
String code = manageCollectionsFacade.getCollectionCode(i);
assertThat(existingCollections.containsKey(code));
assertThat(manageCollectionsFacade.getCollectionName(i)).isEqualTo(existingCollections.get(code));
}
}
public Map<String, String> getInitCollections() {
Map<String, String> existingCollections = new HashMap<>();
existingCollections.put("zeCollection", "");
return existingCollections;
}
}