package com.constellio.app.ui.pages.rm.folder; import static java.lang.Thread.sleep; import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import com.constellio.app.modules.rm.navigation.RMNavigationConfiguration; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import com.constellio.app.modules.rm.DemoTestRecords; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.ui.framework.components.BaseForm; import com.constellio.app.ui.tools.RecordFormWebElement; import com.constellio.model.services.configs.SystemConfigurationsManager; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.UiTest; import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebDriver; @UiTest public class CreateFolderAcceptanceTest extends ConstellioTest { private boolean withAllResponsibleAdminUnitFlag = true; private boolean withAdministrativeUnits = false; String lastSavedFolderId; String classificationFinder; String administrativeUnitFinder; // String filingSpaceFinderA; // String filingSpaceFinderB; // String filingSpaceFinderC; //String filingSpaceFinder; String retentionRule; String collection; RecordFormWebElement zeForm; RecordServices recordServices; ConstellioWebDriver driver; RMSchemasRecordsServices rm; RMTestRecords records = new RMTestRecords(zeCollection); DemoTestRecords records2 = new DemoTestRecords("LaCollectionDeRida"); RetentionRule ruleCustom; RetentionRule backupRule; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest( records).withFoldersAndContainersOfEveryStatus().withEvents(), withCollection("LaCollectionDeRida").withConstellioRMModule().withAllTestUsers().withRMTest(records2) .withFoldersAndContainersOfEveryStatus() ); inCollection("LaCollectionDeRida").setCollectionTitleTo("Collection d'entreprise"); inCollection(zeCollection).setCollectionTitleTo("Collection de test"); getConfigurationManager().setValue(RMConfigs.COPY_RULE_PRINCIPAL_REQUIRED, false); // filingSpaceFinderA = "A"; // filingSpaceFinderB = "B"; // filingSpaceFinderC = "C"; //filingSpaceFinder = filingSpaceFinderB; retentionRule = "1"; rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); getConfigurationManager().setValue(RMConfigs.COPY_RULE_PRINCIPAL_REQUIRED, false); recordServices = getModelLayerFactory().newRecordServices(); backupRule = records.getRule1(); } @Test public void testsInZeCollection() throws Exception { collection = zeCollection; classificationFinder = "X100"; administrativeUnitFinder = "10A"; givenUserAddFolderWhenAllFieldsAreCompleteAndClickSaveThenFolderIsCreated(); givenUserCanAccessOneFilingSpaceWhenCreateFolderThenCantChooseAnotherFilingSpace(); whenCreateFolderThenTitleCategoryFilingSpaceAndAdministrativeUnitAreRequired(); } @Test public void testsInCollectionDeRida() throws Exception { collection = "LaCollectionDeRida"; classificationFinder = "23 "; administrativeUnitFinder = "A"; givenUserAddFolderWhenAllFieldsAreCompleteAndClickSaveThenFolderIsCreated(); givenUserCanAccessOneFilingSpaceWhenCreateFolderThenCantChooseAnotherFilingSpace(); whenCreateFolderThenTitleCategoryFilingSpaceAndAdministrativeUnitAreRequired(); } @Test public void whenModifyingCategoryThenRetentionRuleAndCopyTypeVisibilityIsAdjusted() throws Exception { collection = zeCollection; navigateToAddFolderFormLoggedAs(gandalf, collection); assertThat(zeForm.isVisible("folder_default_categoryEntered")).isTrue(); assertThat(zeForm.isVisible("folder_default_retentionRuleEntered")).isFalse(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); zeForm.getDropDown("folder_default_categoryEntered").typeAndSelectFirst("X13"); sleep(1000); assertThat(zeForm.isVisible("folder_default_retentionRuleEntered")).isTrue(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); zeForm.getDropDown("folder_default_retentionRuleEntered").selectItemContainingText("2"); sleep(1000); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isTrue(); zeForm.getDropDown("folder_default_retentionRuleEntered").selectItemContainingText("1"); sleep(1000); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); zeForm.getDropDown("folder_default_categoryEntered").clear().typeAndSelectFirst("X100"); sleep(1000); assertThat(zeForm.isVisible("folder_default_retentionRuleEntered")).isFalse(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); } @Test public void givenFlagCopyRuleTypeAlwaysModifiableWhenCreatePrincipalFolderWithAdministrativeUnitAndChangeForPrincipalRuleThenCopyFieldInvisibleAndSecondaryCopyInFolder() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "10A"; retentionRule = "1"; getConfigurationManager().setValue(RMConfigs.COPY_RULE_TYPE_ALWAYS_MODIFIABLE, true); navigateToAddFolderFormLoggedAs(admin, collection); completeFormAndSave(); assertThat(driver.findElement(By.id("display-value-folder_default_copyStatus")).getText()).isEqualTo("Principal"); clickModifyButton(); modifyRule1RemovingPrincipalCopyRule(withAdministrativeUnits); modifyLastFolderRule(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); } private void clickModifyButton() { driver.navigateTo().url("editFolder/id=" + lastSavedFolderId); // try { // Thread.sleep(300); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } // driver.find("v-slot-edit-button").printHierarchy(); // driver.find("v-slot-edit-button").(); // try { // Thread.sleep(300); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } } @Test public void givenFolderPrincipalWhenChangeRuleThenCopyFieldInvisibleAndSecondaryCopy() throws Exception { collection = zeCollection; navigateToAddFolderFormLoggedAs(admin, collection); retentionRule = "1"; classificationFinder = "X13"; administrativeUnitFinder = "12B"; completeFormAndSave(); assertThat(driver.findElement(By.id("display-value-folder_default_copyStatus")).getText()).isEqualTo("Principal"); clickModifyButton(); modifyRule1RemovingPrincipalCopyRule(withAdministrativeUnits); administrativeUnitFinder = "10"; modifyLastFolderRule(); clickModifyButton(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); } //TODO Maxime - Ne passe pas sur PhantomJS @Test public void givenFolderWithRuleWithResponsibleUnitWhenChangeRuleThenCopyFieldInvisibleAndSecondaryCopyInFolder() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "10A"; navigateToAddFolderFormLoggedAs(admin, collection); retentionRule = "3"; completeFormAndSave(); assertThat(driver.findElement(By.id("display-value-folder_default_copyStatus")).getText()).isEqualTo("Principal"); clickModifyButton(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isTrue(); modifyRule1RemovingPrincipalCopyRule(withAllResponsibleAdminUnitFlag); clickModifyButton(); retentionRule = "1"; administrativeUnitFinder = "12"; modifyLastFolderRule(); clickModifyButton(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); } @Test public void givenRuleWithoutPrincipalAndResponsibleListThenCopyFieldInvisibleAndFolderIsCreatedWithSecondaryCopy() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "12B"; modifyRule1RemovingPrincipalCopyRule(withAdministrativeUnits); navigateToAddFolderFormLoggedAs(admin, collection); completeFormWithoutExemplary(); } @Test public void givenCopyRuleTypeAlwaysModifiableWhenRuleWithoutPrincipalAndFlagResponsibleThenCopyFieldInvisibleAndFolderIsCreatedWithSecondaryCopy() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "12B"; getConfigurationManager().setValue(RMConfigs.COPY_RULE_TYPE_ALWAYS_MODIFIABLE, true); modifyRule1RemovingPrincipalCopyRule(withAllResponsibleAdminUnitFlag); navigateToAddFolderFormLoggedAs(admin, collection); completeFormWithoutExemplary(); } @Test public void givenRuleWithoutPrincipalAndFlagResponsibleThenFieldInvisibleAndFolderIsCreatedWithSecondaryCopy() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "12B"; modifyRule1RemovingPrincipalCopyRule(withAllResponsibleAdminUnitFlag); navigateToAddFolderFormLoggedAs(admin, collection); completeFormWithoutExemplary(); } @Test public void whenAddingFolderThenPreviewReturnDateIsInvisible() throws Exception { collection = zeCollection; classificationFinder = "X13"; administrativeUnitFinder = "12B"; modifyRule1RemovingPrincipalCopyRule(withAllResponsibleAdminUnitFlag); navigateToAddFolderFormLoggedAs(admin, collection); assertThat(zeForm.isVisible("folder_default_previewReturnDate")).isFalse(); } @Test public void whenAddingFolderThenLinearSizeIsInvisible() throws Exception { driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection)); driver.navigateTo().url(RMNavigationConfiguration.ADD_FOLDER); zeForm = new RecordFormWebElement(driver.findElement(By.className(BaseForm.BASE_FORM))); assertThat(zeForm.isVisible("folder_default_linearSize")).isFalse(); } @Test public void whenModifyingFolderWithoutContainerThenLinearSizeInvisible() throws Exception { driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection)); driver.navigateTo().url("editFolder/id=" + records.folder_A04); zeForm = new RecordFormWebElement(driver.findElement(By.className(BaseForm.BASE_FORM))); assertThat(zeForm.isVisible("folder_default_linearSize")).isFalse(); } @Test public void whenModifyingFolderWithContainerThenLinearSizeVisible() throws Exception { assertThat(records.getFolder_A45().getLinearSize()).isNull(); driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection)); driver.navigateTo().url("editFolder/id=" + records.folder_A45); zeForm = new RecordFormWebElement(driver.findElement(By.className(BaseForm.BASE_FORM))); assertThat(zeForm.isVisible("folder_default_linearSize")).isTrue(); zeForm.getTextField("folder_default_linearSize").setValue("42"); zeForm.clickSaveButtonAndWaitForPageReload(); assertThat(records.getFolder_A45().getLinearSize()).isEqualTo(42); } private void modifyRule1RemovingPrincipalCopyRule(boolean isResponsibleUnit) throws Exception { getConfigurationManager().setValue(RMConfigs.COPY_RULE_PRINCIPAL_REQUIRED, false); CopyRetentionRule copyRetentionRuleSecondary = records.getRule1().getSecondaryCopy(); ruleCustom = records.getRule1(); ruleCustom.setCopyRetentionRules(copyRetentionRuleSecondary); if (isResponsibleUnit) { ruleCustom.setAdministrativeUnits(emptyList()); } else { ruleCustom.setAdministrativeUnits(backupRule.getAdministrativeUnits()); } ruleCustom.setResponsibleAdministrativeUnits(isResponsibleUnit); recordServices.update(ruleCustom); assertThat(ruleCustom.isResponsibleAdministrativeUnits()).isEqualTo(isResponsibleUnit); assertThat(ruleCustom.getCopyRetentionRules().size()).isEqualTo(1); } private void completeFormWithoutExemplary() { completeRequiredFieldWithRetentionRule(); assertThat(zeForm.isVisible("folder_default_copyStatusEntered")).isFalse(); zeForm.clickSaveButtonAndWaitForPageReload(); assertThat(driver.findElement(By.id("display-value-folder_default_copyStatus")).getText()).isEqualTo("Secondaire"); } private void modifyLastFolderRule() throws Exception { modifyRule1RemovingPrincipalCopyRule(withAllResponsibleAdminUnitFlag); modifyRetentionRule(); assertThat(driver.findElement(By.id("display-value-folder_default_copyStatus")).getText()).isEqualTo("Secondaire"); } private void modifyRetentionRule() { zeForm.getDropDown("folder_default_retentionRuleEntered").selectItemContainingText(retentionRule); zeForm.clickSaveButtonAndWaitForPageReload(); } public void givenUserAddFolderWhenAllFieldsAreCompleteAndClickSaveThenFolderIsCreated() throws Exception { navigateToAddFolderFormLoggedAs(admin, collection); completeFormAndSave(); assertThat(folderTitle()).isEqualTo("Pokemon"); } public void givenUserCanAccessOneFilingSpaceWhenCreateFolderThenCantChooseAnotherFilingSpace() throws Exception { navigateToAddFolderFormLoggedAs(charlesFrancoisXavier, collection); completeFormAndSave(); assertThat(folderAdministrativeUnit()).contains("A"); } public void whenCreateFolderThenTitleCategoryFilingSpaceAndAdministrativeUnitAreRequired() throws Exception { navigateToAddFolderFormLoggedAs(charlesFrancoisXavier, collection); completeNoRequiredField(); zeForm.clickSaveButtonAndWaitForPageReload(); assertThat(driver.getCurrentPage()).contains("addFolder"); } private void navigateToAddFolderFormLoggedAs(String user, String collection) { driver = newWebDriver(loggedAsUserInCollection(user, collection)); driver.navigateTo().url(RMNavigationConfiguration.ADD_FOLDER); zeForm = new RecordFormWebElement(driver.findElement(By.className(BaseForm.BASE_FORM))); } private void completeFormAndSave() { completeRequiredField(); completeNoRequiredField(); zeForm.clickSaveButtonAndWaitForPageReload(); String[] urlParts = driver.getCurrentUrl().split("/"); lastSavedFolderId = urlParts[urlParts.length - 1]; } public void completeRequiredField() { zeForm.getTextField("folder_default_title").setValue("Pokemon"); zeForm.getLookupField("folder_default_categoryEntered").typeAndSelectFirst(classificationFinder); try { sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } if (zeForm.isVisible("folder_default_retentionRuleEntered")) { zeForm.getDropDown("folder_default_retentionRuleEntered").selectItemContainingText(retentionRule); } zeForm.getDateField("folder_default_openingDate").setValue(new LocalDate(2015, 2, 21)); zeForm.getDropDown("folder_default_administrativeUnitEntered").typeAndSelectFirst(administrativeUnitFinder); if (zeForm.isVisible("folder_default_copyStatusEntered")) { zeForm.getRadioButton("folder_default_copyStatusEntered").toggleContaining("P"); } } public void completeRequiredFieldWithRetentionRule() { zeForm.getTextField("folder_default_title").setValue("Pokemon"); zeForm.getLookupField("folder_default_categoryEntered").typeAndSelectFirst(classificationFinder); try { sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } zeForm.getDropDown("folder_default_retentionRuleEntered").selectItemContainingText(ruleCustom.getCode()); zeForm.getDateField("folder_default_openingDate").setValue(new LocalDate(2015, 2, 21)); zeForm.getDropDown("folder_default_administrativeUnitEntered").typeAndSelectFirst(administrativeUnitFinder); } private void completeNoRequiredField() { zeForm.getDateField("folder_default_enteredClosingDate").setValue(new LocalDate(2016, 2, 21)); zeForm.toggleAllCheckbox(); zeForm.getListAddRemoveTextField("folder_default_keywords").add("pokemon"); zeForm.getTextField("folder_default_description").setValue("Attrapez les tous"); } private String folderTitle() { return driver.findElement(By.id("display-value-folder_default_title")).getText(); } private String folderAdministrativeUnit() { return driver.findElement(By.id("display-value-folder_default_administrativeUnit")).getText(); } private SystemConfigurationsManager getConfigurationManager() { return getModelLayerFactory().getSystemConfigurationsManager(); } }