diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/SchrodingerComponentInitListener.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/SchrodingerComponentInitListener.java index 56f10ef0a73..bae4700c3e2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/SchrodingerComponentInitListener.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/SchrodingerComponentInitListener.java @@ -11,6 +11,9 @@ import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.prism.ItemWrapper; +import com.evolveum.midpoint.gui.impl.prism.*; + import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.reflect.FieldUtils; import org.apache.wicket.AttributeModifier; @@ -21,8 +24,6 @@ import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.Response; -import com.evolveum.midpoint.gui.impl.prism.PrismPropertyPanel; -import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapper; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.prism.PrismHeaderPanel; @@ -76,9 +77,9 @@ public void afterRender(Component component) { } private void handleLocalization(Component component) { - if (component instanceof PrismPropertyPanel) { - PrismPropertyPanel ppp = (PrismPropertyPanel) component; - PrismPropertyWrapper iw = (PrismPropertyWrapper) ppp.getModel().getObject(); + if (component instanceof PrismPropertyPanel || component instanceof PrismReferencePanel) { + ItemPanel ppp = (ItemPanel) component; + ItemWrapper iw = (ItemWrapper) ppp.getModel().getObject(); String key = iw.getDisplayName(); QName qname = iw.getItemName(); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java index 89609315e04..fb1ab47b74d 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java @@ -18,6 +18,7 @@ import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.common.FeedbackBox; import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTableWithPrismView; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; @@ -52,7 +53,7 @@ @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) @ActiveProfiles("default") @SpringBootTest(classes = MidPointSpringApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) -@TestPropertySource(properties = { "server.port=8180", "midpoint.schrodinger=true" })//, "webdriverLocation=234234234" }) +@TestPropertySource(properties = { "server.port=8180", "midpoint.schrodinger=true" }) @Listeners({ BrowserPerClass.class }) public abstract class AbstractSchrodingerTest extends AbstractIntegrationTest { @@ -155,7 +156,7 @@ public void afterClass() { .clickYes(); } - protected void importObject(File source, Boolean overrideExistingObject) { + protected void importObject(File source, boolean overrideExistingObject, boolean ignoreWarning) { ImportObjectPage importPage = basicPage.importObject(); if (overrideExistingObject) { @@ -163,17 +164,21 @@ protected void importObject(File source, Boolean overrideExistingObject) { .checkOverwriteExistingObject(); } - Assert.assertTrue( - importPage - .getObjectsFromFile() - .chooseFile(source) + FeedbackBox feedback = importPage + .getObjectsFromFile() + .chooseFile(source) .clickImportFileButton() - .feedback() - .isSuccess()); + .feedback(); + + Assert.assertTrue(feedback.isSuccess() || (ignoreWarning && feedback.isWarning())); + } + + protected void importObject(File source, boolean overrideExistingObject) { + importObject(source, overrideExistingObject, false); } protected void importObject(File source) { - importObject(source, false); + importObject(source, false, false); } protected String fetchMidpointHome() { diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AbstractLabTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AbstractLabTest.java index 88ac2a83ba6..6a3cd6bf98a 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AbstractLabTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AbstractLabTest.java @@ -44,20 +44,33 @@ public class AbstractLabTest extends AbstractSchrodingerTest { protected static final File CSV_1_SIMPLE_RESOURCE_FILE = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-1-document-access-simple.xml"); protected static final File CSV_1_RESOURCE_FILE = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-1-document-access.xml"); protected static final File CSV_1_SOURCE_FILE = new File(LAB_SOURCES_DIRECTORY + "csv-1.csv"); + protected static final File CSV_1_SOURCE_FILE_7_3 = new File(LAB_SOURCES_DIRECTORY + "csv-1-7-3.csv"); protected static final File NUMERIC_PIN_FIRST_NONZERO_POLICY_FILE = new File(LAB_OBJECTS_DIRECTORY + "valuePolicies/numeric-pin-first-nonzero-policy.xml"); protected static final File CSV_2_RESOURCE_FILE = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-2-canteen.xml"); protected static final File CSV_2_SOURCE_FILE = new File(LAB_SOURCES_DIRECTORY + "csv-2.csv"); protected static final File CSV_3_RESOURCE_FILE = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-3-ldap.xml"); protected static final File CSV_3_SOURCE_FILE = new File(LAB_SOURCES_DIRECTORY + "csv-3.csv"); + protected static final File HR_NO_EXTENSION_RESOURCE_FILE = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-hr-noextension.xml"); + protected static final File HR_SOURCE_FILE = new File(LAB_SOURCES_DIRECTORY + "source.csv"); + protected static final File HR_SOURCE_FILE_7_4_PART_1 = new File(LAB_SOURCES_DIRECTORY + "source-7-4-part-1.csv"); + protected static final File HR_SOURCE_FILE_7_4_PART_2 = new File(LAB_SOURCES_DIRECTORY + "source-7-4-part-2.csv"); + protected static final File HR_SOURCE_FILE_7_4_PART_3 = new File(LAB_SOURCES_DIRECTORY + "source-7-4-part-3.csv"); + protected static final File HR_SOURCE_FILE_7_4_PART_4 = new File(LAB_SOURCES_DIRECTORY + "source-7-4-part-4.csv"); + protected static final String DIRECTORY_CURRENT_TEST = "labTests"; protected static final String EXTENSION_SCHEMA_NAME = "extension-example.xsd"; protected static final String CSV_1_FILE_SOURCE_NAME = "csv-1.csv"; protected static final String CSV_1_RESOURCE_NAME = "CSV-1 (Document Access)"; + protected static final String CSV_1_RESOURCE_OID = "10000000-9999-9999-0000-a000ff000002"; protected static final String CSV_2_FILE_SOURCE_NAME = "csv-2.csv"; protected static final String CSV_2_RESOURCE_NAME = "CSV-2 (Canteen Ordering System)"; + protected static final String CSV_2_RESOURCE_OID = "10000000-9999-9999-0000-a000ff000003"; protected static final String CSV_3_FILE_SOURCE_NAME = "csv-3.csv"; protected static final String CSV_3_RESOURCE_NAME = "CSV-3 (LDAP)"; + protected static final String CSV_3_RESOURCE_OID = "10000000-9999-9999-0000-a000ff000004"; + protected static final String HR_FILE_SOURCE_NAME = "source.csv"; + protected static final String HR_RESOURCE_NAME = "ExAmPLE, Inc. HR Source"; protected static final String PASSWORD_ATTRIBUTE_RESOURCE_KEY = "User password attribute name"; protected static final String UNIQUE_ATTRIBUTE_RESOURCE_KEY = "Unique attribute name"; @@ -65,12 +78,14 @@ public class AbstractLabTest extends AbstractSchrodingerTest { protected static final String CSV_1_UNIQUE_ATTRIBUTE_NAME = "login"; protected static final String CSV_1_PASSWORD_ATTRIBUTE_NAME = "password"; protected static final String CSV_1_ACCOUNT_OBJECT_CLASS_LINK = "AccountObjectClass (Default Account)"; + protected static final String ARCHETYPE_EMPLOYEE_PLURAL_LABEL = "Employees"; protected static final List CSV_1_RESOURCE_ATTRIBUTES = Arrays.asList("login", "lname", "groups", "enumber", "phone", "dep", "fname", "dis"); protected static File csv1TargetFile; protected static File csv2TargetFile; protected static File csv3TargetFile; + protected static File hrTargetFile; @AfterClass @Override diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ResourcesAttributesAndMappingsTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java similarity index 90% rename from testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ResourcesAttributesAndMappingsTest.java rename to testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java index 9dabbcaa688..17260f585b0 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ResourcesAttributesAndMappingsTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java @@ -41,27 +41,7 @@ * @author skublik */ -public class ResourcesAttributesAndMappingsTest extends AbstractLabTest { - -// @BeforeClass(alwaysRun = true, dependsOnMethods = { "springTestContextBeforeTestClass" }) -// @Override -// protected void springTestContextPrepareTestInstance() throws Exception { -// -// String home = System.getProperty("midpoint.home"); -// File schemaDir = new File(home, "schema"); -// -// if (!schemaDir.mkdir()) { -// if (schemaDir.exists()) { -// FileUtils.cleanDirectory(schemaDir); -// } else { -// throw new IOException("Creation of directory \"" + schemaDir.getAbsolutePath() + "\" unsuccessful"); -// } -// } -// File schemaFile = new File(schemaDir, EXTENSION_SCHEMA_NAME); -// FileUtils.copyFile(EXTENSION_SCHEMA_FILE, schemaFile); -// -// super.springTestContextPrepareTestInstance(); -// } +public class M3ResourcesAttributesAndMappingsTest extends AbstractLabTest { @BeforeClass(alwaysRun = true, dependsOnMethods = { "springTestContextPrepareTestInstance" }) @Override diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ProvisioningToResources.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java similarity index 97% rename from testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ProvisioningToResources.java rename to testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java index 0dffc9aa115..ad46cff6900 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ProvisioningToResources.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java @@ -14,7 +14,6 @@ import com.evolveum.midpoint.schrodinger.component.common.PrismForm; import com.evolveum.midpoint.schrodinger.component.common.PrismFormWithActionButtons; import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTableWithPrismView; -import com.evolveum.midpoint.schrodinger.page.configuration.AboutPage; import com.evolveum.midpoint.schrodinger.page.resource.AccountPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; @@ -27,7 +26,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; -import org.testng.annotations.AfterClass; import org.testng.annotations.Test; import javax.xml.namespace.QName; @@ -37,9 +35,9 @@ * @author skublik */ -public class ProvisioningToResources extends AbstractLabTest { +public class M4ProvisioningToResources extends AbstractLabTest { - private static final Logger LOG = LoggerFactory.getLogger(ProvisioningToResources.class); + private static final Logger LOG = LoggerFactory.getLogger(M4ProvisioningToResources.class); private static final File CSV_1_RESOURCE_FILE_4_2 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-1-document-access-4-2.xml"); private static final File CSV_3_RESOURCE_FILE_4_2 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-3-ldap-4-2.xml"); @@ -104,7 +102,7 @@ public void test0401BasicProvisioningToMultipleResources() { .selectAll() .and() .table() - .clickActionDropDown() + .clickHeaderActionDropDown() .clickEnable() .clickYes(); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AccountsAssignmentsAndRoles.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java similarity index 96% rename from testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AccountsAssignmentsAndRoles.java rename to testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java index 05060940fc8..6e52b639921 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/AccountsAssignmentsAndRoles.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java @@ -7,7 +7,6 @@ package com.evolveum.midpoint.testing.schrodinger.labs; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import com.codeborne.selenide.Selenide; @@ -18,7 +17,6 @@ import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; import com.evolveum.midpoint.schrodinger.component.InducementsTab; import com.evolveum.midpoint.schrodinger.component.common.PrismForm; -import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTableWithPrismView; import com.evolveum.midpoint.schrodinger.component.table.DirectIndirectAssignmentTable; import com.evolveum.midpoint.schrodinger.page.AbstractRolePage; import com.evolveum.midpoint.schrodinger.page.archetype.ArchetypePage; @@ -36,8 +34,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import javax.xml.namespace.QName; @@ -46,9 +42,9 @@ * @author skublik */ -public class AccountsAssignmentsAndRoles extends AbstractLabTest { +public class M5AccountsAssignmentsAndRoles extends AbstractLabTest { - private static final Logger LOG = LoggerFactory.getLogger(AccountsAssignmentsAndRoles.class); + private static final Logger LOG = LoggerFactory.getLogger(M5AccountsAssignmentsAndRoles.class); private static final File INCOGNITO_ROLE_FILE = new File(LAB_OBJECTS_DIRECTORY + "roles/role-incognito.xml"); private static final File INTERNAL_EMPLOYEE_ROLE_FILE = new File(LAB_OBJECTS_DIRECTORY + "roles/role-internal-employee.xml"); @@ -61,7 +57,6 @@ public class AccountsAssignmentsAndRoles extends AbstractLabTest { private static final File ARCHETYPE_EMPLOYEE_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-employee.xml"); private static final String ARCHETYPE_EMPLOYEE_NAME = "Employee"; private static final String ARCHETYPE_EMPLOYEE_LABEL = "Employee"; - private static final String ARCHETYPE_EMPLOYEE_PLURAL_LABEL = "Employees"; private static final File ARCHETYPE_EXTERNAL_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-external.xml"); private static final File SYSTEM_CONFIGURATION_FILE_5_7 = new File(LAB_OBJECTS_DIRECTORY + "systemConfiguration/system-configuration-5-7.xml"); @@ -254,7 +249,7 @@ public void test0507ArchetypesIntroduction() { FormLoginPage login = midPoint.formLogin(); login.login(getUsername(), getPassword()); - basicPage.listUsers().newUser(ARCHETYPE_EMPLOYEE_LABEL) + basicPage.listUsers().newUser("New "+ARCHETYPE_EMPLOYEE_LABEL.toLowerCase()) .selectTabBasic() .form() .addAttributeValue(UserType.F_NAME, "janeway") diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ConfiguringMultipleAccountTypes.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java similarity index 81% rename from testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ConfiguringMultipleAccountTypes.java rename to testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java index c6e924370d0..2f7218ec91b 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/ConfiguringMultipleAccountTypes.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java @@ -6,11 +6,8 @@ */ package com.evolveum.midpoint.testing.schrodinger.labs; -import com.codeborne.selenide.Selenide; - import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.component.common.table.AbstractTableWithPrismView; -import com.evolveum.midpoint.schrodinger.page.configuration.AboutPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Utils; import com.evolveum.midpoint.testing.schrodinger.scenarios.ScenariosCommons; @@ -18,21 +15,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import javax.validation.constraints.AssertTrue; import java.io.File; -import java.io.IOException; /** * @author skublik */ -public class ConfiguringMultipleAccountTypes extends AbstractLabTest { +public class M6ConfiguringMultipleAccountTypes extends AbstractLabTest { - private static final Logger LOG = LoggerFactory.getLogger(ConfiguringMultipleAccountTypes.class); + private static final Logger LOG = LoggerFactory.getLogger(M6ConfiguringMultipleAccountTypes.class); private static final File CSV_1_RESOURCE_FILE_6_1 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-1-document-access-6-1.xml"); private static final File CSV_3_RESOURCE_FILE_6_1 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-3-ldap-6-1.xml"); @@ -41,21 +34,6 @@ public class ConfiguringMultipleAccountTypes extends AbstractLabTest { private static final String CSV1_TESTER_ROLE_NAME = "CSV-1 Tester"; private static final String CSV3_ADMIN_ROLE_NAME = "CSV-3 Admin"; - @AfterClass - @Override - public void afterClass() { - super.afterClass(); - - midPoint.formLogin().loginWithReloadLoginPage(username, password); - - LOG.info("After: Login name " + username + " pass " + password); - - AboutPage aboutPage = basicPage.aboutPage(); - aboutPage - .clickSwitchToFactoryDefaults() - .clickYes(); - } - @Test public void test0601UsingAccountIntentsForProvisioning() { diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java new file mode 100644 index 00000000000..ed5e96a01ec --- /dev/null +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.testing.schrodinger.labs; + +import com.codeborne.selenide.Selenide; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.resource.ResourceAccountsTab; +import com.evolveum.midpoint.schrodinger.page.resource.ViewResourcePage; +import com.evolveum.midpoint.schrodinger.page.task.TaskPage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; +import com.evolveum.midpoint.testing.schrodinger.scenarios.ScenariosCommons; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; + +/** + * @author skublik + */ + +public class M7SynchronizationFlavours extends AbstractLabTest{ + + private static final Logger LOG = LoggerFactory.getLogger(M7SynchronizationFlavours.class); + + @Test + public void test0701RunningImportFromResource() throws IOException { + hrTargetFile = new File(csvTargetDir, HR_FILE_SOURCE_NAME); + FileUtils.copyFile(HR_SOURCE_FILE, hrTargetFile); + + importObject(HR_NO_EXTENSION_RESOURCE_FILE,true); + changeResourceAttribute(HR_RESOURCE_NAME, ScenariosCommons.CSV_RESOURCE_ATTR_FILE_PATH, hrTargetFile.getAbsolutePath(), true); + + ResourceAccountsTab accountTab = basicPage.listResources() + .table() + .clickByName(HR_RESOURCE_NAME) + .clickAccountsTab() + .clickSearchInResource(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + accountTab.table() + .selectCheckboxByName("001212") + .clickHeaderActionDropDown() + .clickImport() + .and() + .and() + .feedback() + .isSuccess(); + + UserPage owner = accountTab.table() + .clickOnOwnerByName("X001212"); + + Assert.assertTrue(owner.selectTabBasic() + .form() + .compareInputAttributeValue("name", "X001212")); + + basicPage.listResources() + .table() + .clickByName(HR_RESOURCE_NAME) + .clickAccountsTab() + .importTask() + .clickCreateNew() + .selectTabBasic() + .form() + .addAttributeValue("name","Initial import from HR") + .and() + .and() + .clickSaveAndRun() + .feedback() + .isInfo(); + + Assert.assertEquals(basicPage.listTasks() + .table() + .clickByName("Initial import from HR") + .selectTabOperationStatistics() + .getSuccessfullyProcessed(), 14); + Assert.assertEquals(basicPage.listUsers(ARCHETYPE_EMPLOYEE_PLURAL_LABEL).getCountOfObjects(), 15); + } + + @Test(dependsOnMethods = {"test0701RunningImportFromResource"}) + public void test0702RunningAccountReconciliation() { + Selenide.sleep(MidPoint.TIMEOUT_MEDIUM_6_S); + createReconTask("CSV-1 Reconciliation", CSV_1_RESOURCE_NAME); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + deselectDryRun("CSV-1 Reconciliation"); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + Assert.assertTrue(containsProjection("X001212", CSV_1_RESOURCE_OID, "jsmith")); + + createReconTask("CSV-2 Reconciliation", CSV_2_RESOURCE_NAME); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + deselectDryRun("CSV-2 Reconciliation"); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + Assert.assertTrue(containsProjection("X001212", CSV_2_RESOURCE_OID, "jsmith")); + + createReconTask("CSV-3 Reconciliation", CSV_3_RESOURCE_NAME); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + deselectDryRun("CSV-3 Reconciliation"); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + Assert.assertTrue(containsProjection("X001212", CSV_3_RESOURCE_OID, "cn=John Smith,ou=ExAmPLE,dc=example,dc=com")); + } + + @Test(dependsOnMethods = {"test0702RunningAccountReconciliation"}) + public void test0703RunningAttributeReconciliation() throws IOException { + FileUtils.copyFile(CSV_1_SOURCE_FILE_7_3, csv1TargetFile); + + basicPage.listTasks() + .table() + .clickByName("CSV-1 Reconciliation") + .clickRunNow(); + + Assert.assertTrue( + showShadow(CSV_1_RESOURCE_NAME, "Login", "jkirk") + .form() + .compareInputAttributeValues("groups", "Internal Employees", + "Essential Documents")); + + } + + @Test(dependsOnMethods = {"test0703RunningAttributeReconciliation"}) + public void test0704RunningLiveSync() throws IOException { + Selenide.sleep(MidPoint.TIMEOUT_MEDIUM_6_S); + TaskPage task = basicPage.newTask(); + task.setHandlerUriForNewTask("Live synchronization task"); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + task.selectTabBasic() + .form() + .addAttributeValue("objectclass", "AccountObjectClass") + .addAttributeValue(TaskType.F_NAME, "HR Synchronization") + .selectOption("recurrence","Recurring") + .selectOption("binding","Tight") + .editRefValue("objectRef") + .selectType("Resource") + .table() + .clickByName(HR_RESOURCE_NAME) + .and() + .and() + .selectScheduleTab() + .form() + .addAttributeValue("interval", "5") + .and() + .and() + .clickSaveAndRun() + .feedback() + .isInfo(); + + FileUtils.copyFile(HR_SOURCE_FILE_7_4_PART_1, hrTargetFile); + Selenide.sleep(20000); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareInputAttributeValue("givenName", "Arnold")); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareInputAttributeValue("familyName", "Rimmer")); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareSelectAttributeValue("administrativeStatus", "Enabled")); + + FileUtils.copyFile(HR_SOURCE_FILE_7_4_PART_2, hrTargetFile); + Selenide.sleep(20000); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareInputAttributeValue("givenName", "Arnold J.")); + + FileUtils.copyFile(HR_SOURCE_FILE_7_4_PART_3, hrTargetFile); + Selenide.sleep(20000); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareSelectAttributeValue("administrativeStatus", "Disabled")); + + FileUtils.copyFile(HR_SOURCE_FILE_7_4_PART_4, hrTargetFile); + Selenide.sleep(20000); + Assert.assertTrue(showUser("X000999") + .selectTabBasic() + .form() + .compareSelectAttributeValue("administrativeStatus", "Enabled")); + + } + + private boolean containsProjection(String user, String resourceOid, String accountName) { + return showUser(user).selectTabProjections() + .table() + .search() + .byItem("Resource") + .inputRefOid(resourceOid) + .updateSearch() + .and() + .containsText(accountName); + } + + private void createReconTask(String reconTaskName, String resource){ + TaskPage task = basicPage.newTask(); + task.setHandlerUriForNewTask("Reconciliation task"); + Selenide.sleep(MidPoint.TIMEOUT_SHORT_4_S); + task.selectTabBasic() + .form() + .addAttributeValue("objectclass", "AccountObjectClass") + .selectOption("dryRun", "True") + .addAttributeValue(TaskType.F_NAME, reconTaskName) + .editRefValue("objectRef") + .selectType("Resource") + .table() + .clickByName(resource) + .and() + .and() + .clickSaveAndRun() + .feedback() + .isInfo(); + } + + private void deselectDryRun(String taskName) { + basicPage.listTasks() + .table() + .clickByName(taskName) + .selectTabBasic() + .form() + .selectOption("dryRun", "Undefined") + .and() + .and() + .clickSaveAndRun() + .feedback() + .isInfo(); + } +} diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java new file mode 100644 index 00000000000..70709d51823 --- /dev/null +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.testing.schrodinger.labs; + +import com.codeborne.selenide.Selenide; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; +import com.evolveum.midpoint.schrodinger.component.common.PrismForm; +import com.evolveum.midpoint.schrodinger.component.resource.ResourceAccountsTab; +import com.evolveum.midpoint.schrodinger.page.resource.AccountPage; +import com.evolveum.midpoint.schrodinger.page.resource.ViewResourcePage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; + +import com.evolveum.midpoint.testing.schrodinger.scenarios.ScenariosCommons; + +import org.apache.commons.io.FileUtils; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; + +/** + * @author skublik + */ + +public class M8ExtendingMidPointXMLSchema extends AbstractLabTest { + + private static final File HR_RESOURCE_FILE_8_1 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-hr.xml"); + private static final File CSV_3_RESOURCE_FILE_8_1 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-3-ldap-8-1.xml"); + + @BeforeClass(alwaysRun = true, dependsOnMethods = { "springTestContextPrepareTestInstance" }) + @Override + public void beforeClass() throws IOException { + super.beforeClass(); + } + + @BeforeClass(alwaysRun = true, dependsOnMethods = { "springTestContextBeforeTestClass" }) + @Override + protected void springTestContextPrepareTestInstance() throws Exception { + String home = System.getProperty("midpoint.home"); + File schemaDir = new File(home, "schema"); + + if (!schemaDir.mkdir()) { + if (schemaDir.exists()) { + FileUtils.cleanDirectory(schemaDir); + } else { + throw new IOException("Creation of directory \"" + schemaDir.getAbsolutePath() + "\" unsuccessful"); + } + } + File schemaFile = new File(schemaDir, EXTENSION_SCHEMA_NAME); + FileUtils.copyFile(EXTENSION_SCHEMA_FILE, schemaFile); + + super.springTestContextPrepareTestInstance(); + } + + @Test + public void test0801ExtendingMidPointXMLSchema() { + PrismForm> form = basicPage.newUser() + .selectTabBasic() + .form(); + + form.findProperty("ouNumber"); + form.findProperty("ouPath"); + form.findProperty("isManager"); + form.findProperty("empStatus"); + + importObject(HR_RESOURCE_FILE_8_1,true); + changeResourceAttribute(HR_RESOURCE_NAME, ScenariosCommons.CSV_RESOURCE_ATTR_FILE_PATH, hrTargetFile.getAbsolutePath(), true); + + importObject(CSV_3_RESOURCE_FILE_8_1,true); + changeResourceAttribute(CSV_3_RESOURCE_NAME, ScenariosCommons.CSV_RESOURCE_ATTR_FILE_PATH, csv3TargetFile.getAbsolutePath(), true); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + ResourceAccountsTab accountTab = basicPage.listResources() + .table() + .clickByName(HR_RESOURCE_NAME) + .clickAccountsTab() + .clickSearchInResource(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + accountTab.table() + .selectCheckboxByName("001212") + .clickHeaderActionDropDown() + .clickImport() + .and() + .and() + .feedback() + .isSuccess(); + + form = accountTab.table() + .clickOnOwnerByName("X001212") + .selectTabBasic() + .form(); + + Assert.assertTrue(form.compareInputAttributeValue("ouPath", "0300")); + Assert.assertTrue(form.compareSelectAttributeValue("isManager", "True")); + Assert.assertTrue(form.compareInputAttributeValue("empStatus", "A")); + + form.and() + .and() + .selectTabAssignments() + .clickAddAssignemnt() + .table() + .search() + .byName() + .inputValue("Internal Employee") + .updateSearch() + .and() + .selectCheckboxByName("Internal Employee") + .and() + .clickAdd() + .and() + .clickSave() + .feedback() + .isSuccess(); + + AccountPage shadow = showShadow(CSV_1_RESOURCE_NAME, "Login", "jsmith"); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + PrismForm accountForm = shadow.form(); + Selenide.sleep(1000); + Assert.assertTrue(accountForm.compareInputAttributeValue("dep", "Human Resources")); + + showShadow(CSV_2_RESOURCE_NAME, "Login", "jsmith"); + Assert.assertTrue(accountForm.compareInputAttributeValue("department", "Human Resources")); + + Assert.assertTrue(existShadow(CSV_3_RESOURCE_NAME, "Distinguished Name", "cn=John Smith,ou=0300,ou=ExAmPLE,dc=example,dc=com")); + } +} diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java new file mode 100644 index 00000000000..4ccaceb2107 --- /dev/null +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.testing.schrodinger.labs; + +import com.evolveum.midpoint.schrodinger.page.configuration.AboutPage; +import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage; +import com.evolveum.midpoint.schrodinger.page.org.OrgPage; +import com.evolveum.midpoint.schrodinger.page.org.OrgTreePage; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; + +/** + * @author skublik + */ + +public class M9OrganizationalStructure extends AbstractLabTest{ + + private static final Logger LOG = LoggerFactory.getLogger(M9OrganizationalStructure.class); + + private static final File ARCHETYPE_ORG_COMPANY_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-org-company.xml"); + private static final File ARCHETYPE_ORG_FUNCTIONAL_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-org-functional.xml"); + private static final File ARCHETYPE_ORG_GROUP_LIST_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-org-group-list.xml"); + private static final File ARCHETYPE_ORG_GROUP_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-org-group.xml"); + private static final File ORG_EXAMPLE_FILE = new File(LAB_OBJECTS_DIRECTORY + "org/org-example.xml"); + private static final File ORG_SECRET_OPS_FILE = new File(LAB_OBJECTS_DIRECTORY + "org/org-secret-ops.xml"); + + @AfterClass + @Override + public void afterClass() { + super.afterClass(); + + midPoint.formLogin().loginWithReloadLoginPage(username, password); + + LOG.info("After: Login name " + username + " pass " + password); + + AboutPage aboutPage = basicPage.aboutPage(); + aboutPage + .clickSwitchToFactoryDefaults() + .clickYes(); + } + + @BeforeClass + @Override + public void beforeClass() throws IOException { + super.beforeClass(); + csv1TargetFile = new File("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-1.csv"); + csv2TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-2.csv"); + csv3TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-3.csv"); + hrTargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/source.csv"); + } + + @Test + public void test0901ImportStaticOrgStructure() { + importObject(ARCHETYPE_ORG_FUNCTIONAL_FILE, true, true); + importObject(ARCHETYPE_ORG_COMPANY_FILE, true); + importObject(ARCHETYPE_ORG_GROUP_FILE, true); + importObject(ARCHETYPE_ORG_GROUP_LIST_FILE, true); + + basicPage.loggedUser().logoutIfUserIsLogin(); + FormLoginPage login = midPoint.formLogin(); + login.login(getUsername(), getPassword()); + + importObject(ORG_EXAMPLE_FILE, true); + + OrgTreePage orgTree = basicPage.orgStructure(); + Assert.assertTrue(orgTree.selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .containsChildOrg("ExAmPLE, Inc. - Functional Structure", "Executive Division", "Sales Department", + "Human Resources", "Technology Division", "IT Administration Department", "Software Department", "Java Development")); + Assert.assertTrue(orgTree.selectTabWithRootOrg("Groups") + .getOrgHierarchyPanel() + .containsChildOrg("Groups", "Active Employees", "Administrators", "Contractors", "Former Employees", + "Inactive Employees", "Security")); + + importObject(ORG_SECRET_OPS_FILE, true); + Assert.assertTrue(basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .containsChildOrg("Secret Operations", "Transportation and Logistics Department")); + } + + @Test(dependsOnMethods = {"test0901ImportStaticOrgStructure"}) + public void test0902CreateStaticOrgStructure() { + basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .selectOrgInTree("Transportation and Logistics Department") + .and() + .getMemberPanel() + .newMember("Create Organization type member with default relation"); + new OrgPage() + .selectTabBasic() + .form() + .addAttributeValue(OrgType.F_NAME, "0919") + .addAttributeValue(OrgType.F_DISPLAY_NAME, "Warp Speed Research") + .and() + .and() + .clickSave() + .feedback() + .isSuccess(); + + Assert.assertTrue(basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .expandOrg("Transportation and Logistics Department") + .editOrg("Warp Speed Research") + .edit() + .selectTabBasic() + .form() + .compareInputAttributeValue("name", "0919")); + + showUser("kirk").selectTabAssignments() + .clickAddAssignemnt("New Organization type assignment with default relation") + .table() + .paging() + .next() + .and() + .and() + .table() + .selectCheckboxByName("0919") + .and() + .clickAdd() + .and() + .clickSave() + .feedback() + .isSuccess(); + + Assert.assertTrue(basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .expandOrg("Transportation and Logistics Department") + .selectOrgInTree("Warp Speed Research") + .and() + .getMemberPanel() + .selectType("User") + .table() + .containsText("kirk")); + + showUser("kirk").selectTabAssignments() + .table() + .selectCheckboxByName("Warp Speed Research") + .removeByName("Warp Speed Research") + .and() + .and() + .clickSave() + .feedback() + .isSuccess(); + } + +} diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/SynchronizationFlavours.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/SynchronizationFlavours.java deleted file mode 100644 index 62b4a48003e..00000000000 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/SynchronizationFlavours.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2010-2019 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.testing.schrodinger.labs; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; - -/** - * @author skublik - */ - -public class SynchronizationFlavours extends AbstractLabTest{ - -// @AfterClass -// @Override -// public void afterClass() { -// super.afterClass(); -// -// midPoint.formLogin().loginWithReloadLoginPage(username, password); -// -// LOG.info("After: Login name " + username + " pass " + password); -// -// AboutPage aboutPage = basicPage.aboutPage(); -// aboutPage -// .clickSwitchToFactoryDefaults() -// .clickYes(); -// } - - @BeforeClass - @Override - public void beforeClass() throws IOException { - super.beforeClass(); - csv1TargetFile = new File("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-1.csv"); - csv2TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-2.csv"); - csv3TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-3.csv"); - } - - @Test - public void test0701RunningImportFromResource() { - - } -} diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/TaskPageTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/TaskPageTest.java index fd739507610..9d254111aaf 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/TaskPageTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/page/TaskPageTest.java @@ -8,6 +8,7 @@ import com.codeborne.selenide.Selenide; +import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; import com.evolveum.midpoint.schrodinger.component.common.PrismForm; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; @@ -31,10 +32,9 @@ public class TaskPageTest extends AbstractSchrodingerTest { public void test001createNewTask() { String name = "NewTest"; - String handler = "Recompute task"; + Selenide.sleep(MidPoint.TIMEOUT_MEDIUM_6_S); TaskPage task = basicPage.newTask(); - task.selectTabBasic().form().addAttributeValue("handlerUri", handler); - Selenide.sleep(4000); + task.setHandlerUriForNewTask("Recompute task"); task.selectTabBasic() .form() .addAttributeValue("name", name) @@ -47,16 +47,16 @@ public void test001createNewTask() { ListTasksPage tasksPage = basicPage.listTasks(); PrismForm> taskForm = tasksPage .table() - .search() - .byName() - .inputValue(name) - .updateSearch() - .and() - .clickByName(name) - .selectTabBasic() - .form(); + .search() + .byName() + .inputValue(name) + .updateSearch() + .and() + .clickByName(name) + .selectTabBasic() + .form(); Assert.assertTrue(taskForm.compareInputAttributeValue("name", name)); - Assert.assertTrue(taskForm.compareInputAttributeValue("handlerUri", handler)); + Assert.assertTrue(taskForm.compareInputAttributeValue("handlerUri", "http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/recompute/handler-3")); } } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java index 8669374cfa8..4f3aba2be36 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/SynchronizationTests.java @@ -74,7 +74,6 @@ public void setUpResourceAndSynchronizationTask() throws IOException { .form() .addAttributeValue("name","LiveSyncTest") .selectOption("recurrence","Recurring") - .selectOption("executionStatus", "Runnable") .and() .and()) .selectScheduleTab() @@ -266,7 +265,7 @@ public void resourceAccountDeleted(){ .clickSearchInResource() .table() .selectCheckboxByName("raphael") - .clickCog() + .clickHeaderActionDropDown() .clickDelete() .clickYes() .and() diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserAccountTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserAccountTests.java index 461f95553c0..c1fc2b20d05 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserAccountTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/UserAccountTests.java @@ -124,13 +124,13 @@ public void bulkDisableUsers(){ .selectAll() .and() .table() - .clickActionDropDown() - .clickDisable() - .clickYes() - .and() - .and() - .feedback() - .isSuccess() + .clickHeaderActionDropDown() + .clickDisable() + .clickYes() + .and() + .and() + .feedback() + .isSuccess() ; } @@ -198,12 +198,12 @@ public void bulkDeleteUsers(){ .selectAll() .and() .table() - .clickActionDropDown() - .clickDelete() - .clickYes() + .clickHeaderActionDropDown() + .clickDelete() + .clickYes() + .and() .and() - .and() - .feedback() - .isSuccess() + .feedback() + .isSuccess() ;} } diff --git a/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-company.xml b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-company.xml new file mode 100644 index 00000000000..e927054a410 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-company.xml @@ -0,0 +1,37 @@ + + + + Company + + + + Companies + + fa fa-sitemap + + + + + + + OrgType + + + + + OrgType + + + org:default + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-functional.xml b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-functional.xml new file mode 100644 index 00000000000..84ad97a399a --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-functional.xml @@ -0,0 +1,46 @@ + + + + Organization + + + + Organizations + + fa fa-building + darkgreen + + + + + + OrgType + + + + + UserType + + org:default + org:manager + + + + + OrgType + + + org:default + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group-list.xml b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group-list.xml new file mode 100644 index 00000000000..f6309494c69 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group-list.xml @@ -0,0 +1,37 @@ + + + + Group List + + + + Group Lists + + fa fa-sitemap + + + + + + + OrgType + + + + + OrgType + + + org:default + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group.xml b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group.xml new file mode 100644 index 00000000000..5a69285df9b --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/archetypes/archetype-org-group.xml @@ -0,0 +1,36 @@ + + + + Group + + + + Groups + + fa fa-users + chocolate + + + + + + OrgType + + + + + UserType + org:default + + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/org/org-example.xml b/testing/schrodingertest/src/test/resources/labs/objects/org/org-example.xml new file mode 100644 index 00000000000..d2ab634ef12 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/org/org-example.xml @@ -0,0 +1,473 @@ + + + + + EXAMPLE_GROUPS + + enabled + enabled + + Groups + Burning House Avenue 1010/A, Hot Rock City + + + + + + + + + + + ACTIVE + + + + + + + + + + + + + + + + + + enabled + enabled + + + + + Active Employees + + + INACTIVE + + + + + + + + + + + + + + + + + + enabled + enabled + + + + + Inactive Employees + + + FORMER + + + + + + + + + + + + + + + + + + enabled + enabled + + + + + Former Employees + + + ADMIN + + + + + + + + + + + + + + + + + + enabled + enabled + + + + + Administrators + + + SECURITY + + + + + + + + + + + + + + + + + + enabled + enabled + + + + + Security + + + CONTRACTORS + + + + + + + + + + + + + + + + + + enabled + + + + + Contractors + + + EXAMPLE_ORG + + enabled + enabled + + ExAmPLE, Inc. - Functional Structure + EXAMPLE_ORG + Burning House Avenue 1010/A, Hot Rock City + + + + + + + + + + + + 0100 + + + + + + + + + + + + + + + + + + + + Executive Division + 0100 + + + 0110 + + + + + + + + + + + + + + + + + + + + Sales Department + 0110 + + + 0200 + + + + + + + + + + + + + + + + + + + + Technology Division + 0200 + + + 0300 + + + + + + + + + + + + + + + + + + + + Human Resources + 0300 + + + 0210 + + + + + + + + + + + + + + + + + + + + Software Department + 0210 + + + 0211 + + + + + + + + + + + + + + + + + + + + Java Development + 0211 + + + 0212 + + + + + + + + + + + + + + + + + + + + IT Administration Department + 0212 + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/org/org-secret-ops.xml b/testing/schrodingertest/src/test/resources/labs/objects/org/org-secret-ops.xml new file mode 100644 index 00000000000..086af8bced4 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/org/org-secret-ops.xml @@ -0,0 +1,98 @@ + + + + + 0900 + Secret Operations + + + + + + + + + + + + + + + + + Secret Operations + 0900 + + + 0910 + Special transportation means + + + + + + + + + + + + + + + + + Transportation and Logistics Department + 0910 + + + 0915 + + + + + + + + + + + + + + + + + Teleportation Team + 0915 + + + 0917 + + + + + + + + + + + + + + + + + Anti-gravity Device Team + 0917 + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-csvfile-3-ldap-8-1.xml b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-csvfile-3-ldap-8-1.xml new file mode 100644 index 00000000000..358910909c2 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-csvfile-3-ldap-8-1.xml @@ -0,0 +1,537 @@ + + + + + CSV-3 (LDAP) + + + + c:connectorType + com.evolveum.polygon.connector.csv.CsvConnector + + + + + + /opt/training/midpoint-labs/flatfiles/csv-3.csv + utf-8 + ALL + " + , + ; + dn + userPassword + + + + + account + default + Default Account + true + ri:AccountObjectClass + + ri:dn + Distinguished Name + + 0 + + + strong + + extension/ouPath + + + givenName + + + familyName + + + + + + + + ri:employeeNumber + Employee Number + Definition of Employee Number attribute handling. + + + employeeNumber + + + + + ri:givenName + First name + Definition of Firstname attribute handling. + + + givenName + + + + + ri:sn + Last name + Definition of Lastname attribute handling. + + + familyName + + + + + ri:mail + Mail + Definition of Mail attribute handling. + + + givenName + + + familyName + + + + + + + + emailAddress + + + + + ri:MemberOf + Member Of + Definition of MemberOf attribute handling. + + 0 + unbounded + + + + ri:description + Description + + + description + + + + + ri:manager + Manager + false + + strong + + + + + + + ri:telephoneNumber + Telephone Number + Phone number normalized spaces + + + telephoneNumber + + + + + + + + + + + + + http://prism.evolveum.com/xml/ns/public/matching-rule-3#stringIgnoreCase + attributes/ri:dn + cn=administrator,ou=ExAmPLE,dc=example,dc=com + + + + + + + http://prism.evolveum.com/xml/ns/public/matching-rule-3#stringIgnoreCase + attributes/ri:dn + cn=mail-daemon,ou=ExAmPLE,dc=example,dc=com + + + + + + + weak + + $focusExists + + + + + + + + + + + + + + + + + + + + account + admin + + Admin Account + false + + ri:AccountObjectClass + + ri:dn + Distinguished Name + + + 0 + + + + givenName + + + familyName + + + + + + + + + ri:employeeNumber + Employee Number + Definition of Employee Number attribute handling. + + + employeeNumber + + + + + ri:givenName + First name + Definition of Firstname attribute handling. + + + givenName + + + + + + ri:sn + Last name + Definition of Lastname attribute handling. + + + familyName + + + + + ri:MemberOf + Member Of + Definition of MemberOf attribute handling. + + 0 + unbounded + + + + + 10 + + + + + + + + + + http://prism.evolveum.com/xml/ns/public/matching-rule-3#stringIgnoreCase + attributes/ri:dn + cn=admin2,ou=_Administrators_,ou=ExAmPLE,dc=example,dc=com + + + + + + + http://prism.evolveum.com/xml/ns/public/matching-rule-3#stringIgnoreCase + attributes/ri:dn + cn=admin3,ou=_Administrators_,ou=ExAmPLE,dc=example,dc=com + + + + + + + + + + + + + + + + + + + + + + + + + ri:disabled + false + true + + + + sequentialSearch + + + + + + Default account + Normal accounts are NOT in ou=_Administrators container + account + default + true + + + + + + Correlation expression is a search query. + Following search queury will look for users that have "employeeNumber" + equal to the "employeeNumber" attribute of the account. + The condition will ensure that "employeeNumber" is not + empty, otherwise it would match any midPoint user + with empty "employeeNumber" attribute, such as "administrator". + The correlation rule always looks for users, so it will not match + any other object type. + + + c:employeeNumber + + $projection/attributes/ri:employeeNumber + + + + + + + + linked + true + + + deleted + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink + + + + unlinked + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#link + + + + unmatched + + + + Admin account + Admin accounts are in ou=_Administrators container + account + admin + true + + + + + + Correlation expression is a search query. + Following search queury will look for users that have "employeeNumber" + equal to the "employeeNumber" attribute of the account. + The condition will ensure that "employeeNumber" is not + empty, otherwise it would match any midPoint user + with empty "employeeNumber" attribute, such as "administrator". + The correlation rule always looks for users, so it will not match + any other object type. + + + c:employeeNumber + + $projection/attributes/ri:employeeNumber + + + + + + + + + linked + true + + + deleted + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink + + + + unlinked + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#link + + + + unmatched + + + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr-noextension.xml b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr-noextension.xml new file mode 100644 index 00000000000..5c02fa5e9ac --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr-noextension.xml @@ -0,0 +1,351 @@ + + + + + + ExAmPLE, Inc. HR Source + + + + + c:connectorType + com.evolveum.polygon.connector.csv.CsvConnector + + + + + + + + /opt/training/midpoint-labs/flatfiles/source.csv + utf-8 + ALL + " + , + + name + true + true + + + + + + + + account + default + + Default Account + true + + ri:AccountObjectClass + + ri:name + + + true + false + false + + + + + + + + name + + + + + employeeNumber + + + + strong + + + c:ArchetypeType + + + name + + Employee + + + + + + + assignment + + + + + ri:department + Department name + + + true + false + false + + + + + organizationalUnit + + + + + ri:ouNumber + Department Number + + + true + false + false + + + + + costCenter + + + + + ri:firstName + First name + + + true + false + false + + + + + givenName + + + + + ri:lastName + Last name + + + true + false + false + + + + + familyName + + + + + ri:position + Job Title + + + true + false + false + + + + + title + + + + + ri:employedFrom + Employed From + + 1 + + true + false + false + + + + + + + + + + + + employedFrom + $projection/attributes/ri:employedFrom + + + + + + + + + + employedTo + $projection/attributes/ri:employedTo + + + + + + + + + + + weak + + + + + + + + + + + + false + + + false + + + false + + + + ri:empStatus + A + F + I + false + + + + sequentialSearch + + + + + + Default account + account + default + + true + + + Correlation expression is a search query. + Following search queury will look for users that have "name" + equal to the "name" attribute of the account. Simply speaking, + it will look for match in usernames in the IDM and the resource. + The correlation rule always looks for users, so it will not match + any other object type. + + + employeeNumber + + $projection/attributes/ri:name + + + + + + + linked + true + + + deleted + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink + + + + unlinked + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#link + + + + unmatched + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus + + + + + + diff --git a/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr.xml b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr.xml new file mode 100644 index 00000000000..c4b3bcaa33c --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/objects/resources/localhost-hr.xml @@ -0,0 +1,411 @@ + + + + + + ExAmPLE, Inc. HR Source + + + + + c:connectorType + com.evolveum.polygon.connector.csv.CsvConnector + + + + + + + + /opt/training/midpoint-labs/flatfiles/source.csv + utf-8 + ALL + " + , + + name + true + true + + + + + + + + account + default + + Default Account + true + + ri:AccountObjectClass + + ri:name + + + true + false + false + + + + + + + + name + + + + + employeeNumber + + + + strong + + + c:ArchetypeType + + + name + + Employee + + + + + + + assignment + + + + + ri:isManager + Is Manager + + + true + false + false + + + + + + + + + extension/isManager + + + + + ri:empStatus + Employee Status + + + true + false + false + + + + + extension/empStatus + + + + + ri:department + Department name + + + true + false + false + + + + + organizationalUnit + + + + + ri:ouNumber + Department Number + + + true + false + false + + + + + costCenter + + + + + ri:ouPath + Organizational Hierarchy + + + true + false + false + + + + + extension/ouPath + + + + + ri:firstName + First name + + + true + false + false + + + + + givenName + + + + + ri:lastName + Last name + + + true + false + false + + + + + familyName + + + + + ri:position + Job Title + + + true + false + false + + + + + title + + + + + ri:employedFrom + Employed From + + 1 + + true + false + false + + + + + ri:employedTo + Employed To + + 1 + + true + false + false + + + + + + + + + + + + employedFrom + $projection/attributes/ri:employedFrom + + + + + + + + + + employedTo + $projection/attributes/ri:employedTo + + + + + + + + + + + weak + + + + + + + + + + + + false + + + false + + + false + + + + ri:empStatus + A + F + I + false + + + + sequentialSearch + + + + + + Default account + account + default + + true + + + Correlation expression is a search query. + Following search queury will look for users that have "name" + equal to the "name" attribute of the account. Simply speaking, + it will look for match in usernames in the IDM and the resource. + The correlation rule always looks for users, so it will not match + any other object type. + + + employeeNumber + + $projection/attributes/ri:name + + + + + + + linked + true + + + deleted + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink + + + + unlinked + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#link + + + + unmatched + true + + http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus + + + + + + diff --git a/testing/schrodingertest/src/test/resources/labs/sources/csv-1-7-3.csv b/testing/schrodingertest/src/test/resources/labs/sources/csv-1-7-3.csv new file mode 100644 index 00000000000..14c78b00f94 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/csv-1-7-3.csv @@ -0,0 +1,22 @@ +"login","fname","lname","enumber","dep","dis","password","groups","phone" +"hacker","","","","","true","hackedSecretPassword","","" +"admin","Admin","Admin","","","false","secret","","" +"_tjru68","Test","Test","","","true","secret","","" +"_x000090","Mel","Austenberg Test","000090","Executive Division","false","secret","","" +"jsmith","John","SMITH","001212","Human Resources","false","9hYJX","","" +"maustenberg","Mel","AUSTENBERG","000090","Executive Division","false","WM30M","","" +"efeckerwood","Ellen","FECKERWOOD","001049","Executive Division","true","Nr7Ra","","" +"adecker","Andreas","DECKER","000045","Sales Department","false","2UZcf","","" +"rmechal","Rudie","MECHAL","000021","Executive Division","false","FQMMj","","" +"irockerteller","Ivan","ROCKERTELLER","000089","Java Development","false","UrvRe","","" +"emorthanic","Eve","MORTHANIC","000005","Executive Division","false","dLbOe","","" +"jbradley","James","BRADLEY","000035","Technology Division","false","BZxqQ","","" +"kharrison","Kyle","HARRISON","000078","Software Department","false","dgL8k","","" +"adewries","Ann","DE WRIES","000389","Sales Department","false","2j2o0","","" +"ablack","Alice","BLACK","000158","IT Administration Department","false","fm4Fs","","" +"jwicks","John","WICKS","000390","IT Administration Department","false","KZvNz","","" +"adewrieux","Adele","DEWRIEUX","000328","Java Development","false","Tz00U",,"" +"jpicard","Jean-Luc","PICARD","","","false","abc123","","" +"jkirk","Jim Tiberius","KIRK","","","false","abc123","Alpha force;Bravo force;Delta force","123555-1010" +"kjaneway","Kathryn","JANEWAY","","","false","abc123","Teleportation;Time Travel","" +"_kirk","Jim Tiberius","Kirk","","","false","abc123","","123555-1010" diff --git a/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-1.csv b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-1.csv new file mode 100644 index 00000000000..0c1cc067f3f --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-1.csv @@ -0,0 +1,16 @@ +"name","firstName","lastName","position","ouNumber","department","ouPath","employedFrom","employedTo","isManager","empStatus" +"001212","John","Smith","Human Resources Specialist","0300","Human Resources","0300","2000-05-01T08:00:00",,1,"A" +"000090","Mel","Austenberg","General Manager","0100","Executive Division","0100","2008-06-01T08:00:00",,1,"A" +"001049","Ellen","Feckerwood","Assistant","0100","Executive Division","0100","2001-02-01T09:01:00",,0,"I" +"000045","Andreas","Decker","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000021","Rudie","Mechal","Assistant","0100","Executive Division","0100","2010-07-15T08:20:00",,0,"A" +"000089","Ivan","Rockerteller","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000005","Eve","Morthanic","Executive Manager","0100","Executive Division","0100","2010-07-15T08:20:00",,1,"A" +"000035","James","Bradley","Technology Division Manager","0200","Technology Division","0200","2010-07-15T08:20:00",,1,"A" +"000078","Kyle","Harrison","Analyst","0210","Software Department","0200:0210","2010-07-15T08:20:00",,0,"A" +"000002","Richard","Dwayne","General Manager",,"Executive Division","0100","2000-05-01T08:00:00","2012-09-30T17:35:00",0,"F" +"000389","Ann","De Wries","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000158","Alice","Black","IT Administrator","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,0,"A" +"000390","John","Wicks","IT Manager","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,1,"A" +"000328","Adele","Dewrieux","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000999","Arnold","Rimmer","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" diff --git a/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-2.csv b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-2.csv new file mode 100644 index 00000000000..2530a4734ea --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-2.csv @@ -0,0 +1,16 @@ +"name","firstName","lastName","position","ouNumber","department","ouPath","employedFrom","employedTo","isManager","empStatus" +"001212","John","Smith","Human Resources Specialist","0300","Human Resources","0300","2000-05-01T08:00:00",,1,"A" +"000090","Mel","Austenberg","General Manager","0100","Executive Division","0100","2008-06-01T08:00:00",,1,"A" +"001049","Ellen","Feckerwood","Assistant","0100","Executive Division","0100","2001-02-01T09:01:00",,0,"I" +"000045","Andreas","Decker","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000021","Rudie","Mechal","Assistant","0100","Executive Division","0100","2010-07-15T08:20:00",,0,"A" +"000089","Ivan","Rockerteller","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000005","Eve","Morthanic","Executive Manager","0100","Executive Division","0100","2010-07-15T08:20:00",,1,"A" +"000035","James","Bradley","Technology Division Manager","0200","Technology Division","0200","2010-07-15T08:20:00",,1,"A" +"000078","Kyle","Harrison","Analyst","0210","Software Department","0200:0210","2010-07-15T08:20:00",,0,"A" +"000002","Richard","Dwayne","General Manager",,"Executive Division","0100","2000-05-01T08:00:00","2012-09-30T17:35:00",0,"F" +"000389","Ann","De Wries","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000158","Alice","Black","IT Administrator","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,0,"A" +"000390","John","Wicks","IT Manager","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,1,"A" +"000328","Adele","Dewrieux","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000999","Arnold J.","Rimmer","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" diff --git a/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-3.csv b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-3.csv new file mode 100644 index 00000000000..5c3752a4564 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-3.csv @@ -0,0 +1,16 @@ +"name","firstName","lastName","position","ouNumber","department","ouPath","employedFrom","employedTo","isManager","empStatus" +"001212","John","Smith","Human Resources Specialist","0300","Human Resources","0300","2000-05-01T08:00:00",,1,"A" +"000090","Mel","Austenberg","General Manager","0100","Executive Division","0100","2008-06-01T08:00:00",,1,"A" +"001049","Ellen","Feckerwood","Assistant","0100","Executive Division","0100","2001-02-01T09:01:00",,0,"I" +"000045","Andreas","Decker","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000021","Rudie","Mechal","Assistant","0100","Executive Division","0100","2010-07-15T08:20:00",,0,"A" +"000089","Ivan","Rockerteller","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000005","Eve","Morthanic","Executive Manager","0100","Executive Division","0100","2010-07-15T08:20:00",,1,"A" +"000035","James","Bradley","Technology Division Manager","0200","Technology Division","0200","2010-07-15T08:20:00",,1,"A" +"000078","Kyle","Harrison","Analyst","0210","Software Department","0200:0210","2010-07-15T08:20:00",,0,"A" +"000002","Richard","Dwayne","General Manager",,"Executive Division","0100","2000-05-01T08:00:00","2012-09-30T17:35:00",0,"F" +"000389","Ann","De Wries","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000158","Alice","Black","IT Administrator","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,0,"A" +"000390","John","Wicks","IT Manager","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,1,"A" +"000328","Adele","Dewrieux","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000999","Arnold J.","Rimmer","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"F" diff --git a/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-4.csv b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-4.csv new file mode 100644 index 00000000000..2530a4734ea --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/source-7-4-part-4.csv @@ -0,0 +1,16 @@ +"name","firstName","lastName","position","ouNumber","department","ouPath","employedFrom","employedTo","isManager","empStatus" +"001212","John","Smith","Human Resources Specialist","0300","Human Resources","0300","2000-05-01T08:00:00",,1,"A" +"000090","Mel","Austenberg","General Manager","0100","Executive Division","0100","2008-06-01T08:00:00",,1,"A" +"001049","Ellen","Feckerwood","Assistant","0100","Executive Division","0100","2001-02-01T09:01:00",,0,"I" +"000045","Andreas","Decker","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000021","Rudie","Mechal","Assistant","0100","Executive Division","0100","2010-07-15T08:20:00",,0,"A" +"000089","Ivan","Rockerteller","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000005","Eve","Morthanic","Executive Manager","0100","Executive Division","0100","2010-07-15T08:20:00",,1,"A" +"000035","James","Bradley","Technology Division Manager","0200","Technology Division","0200","2010-07-15T08:20:00",,1,"A" +"000078","Kyle","Harrison","Analyst","0210","Software Department","0200:0210","2010-07-15T08:20:00",,0,"A" +"000002","Richard","Dwayne","General Manager",,"Executive Division","0100","2000-05-01T08:00:00","2012-09-30T17:35:00",0,"F" +"000389","Ann","De Wries","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000158","Alice","Black","IT Administrator","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,0,"A" +"000390","John","Wicks","IT Manager","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,1,"A" +"000328","Adele","Dewrieux","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000999","Arnold J.","Rimmer","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" diff --git a/testing/schrodingertest/src/test/resources/labs/sources/source.csv b/testing/schrodingertest/src/test/resources/labs/sources/source.csv new file mode 100644 index 00000000000..ce24b1d02d7 --- /dev/null +++ b/testing/schrodingertest/src/test/resources/labs/sources/source.csv @@ -0,0 +1,15 @@ +"name","firstName","lastName","position","ouNumber","department","ouPath","employedFrom","employedTo","isManager","empStatus" +"001212","John","Smith","Human Resources Specialist","0300","Human Resources","0300","2000-05-01T08:00:00",,1,"A" +"000090","Mel","Austenberg","General Manager","0100","Executive Division","0100","2008-06-01T08:00:00",,1,"A" +"001049","Ellen","Feckerwood","Assistant","0100","Executive Division","0100","2001-02-01T09:01:00",,0,"I" +"000045","Andreas","Decker","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000021","Rudie","Mechal","Assistant","0100","Executive Division","0100","2010-07-15T08:20:00",,0,"A" +"000089","Ivan","Rockerteller","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" +"000005","Eve","Morthanic","Executive Manager","0100","Executive Division","0100","2010-07-15T08:20:00",,1,"A" +"000035","James","Bradley","Technology Division Manager","0200","Technology Division","0200","2010-07-15T08:20:00",,1,"A" +"000078","Kyle","Harrison","Analyst","0210","Software Department","0200:0210","2010-07-15T08:20:00",,0,"A" +"000002","Richard","Dwayne","General Manager",,"Executive Division","0100","2000-05-01T08:00:00","2012-09-30T17:35:00",0,"F" +"000389","Ann","De Wries","Sales Manager","0110","Sales Department","0100:0110","2010-07-15T08:20:00",,0,"A" +"000158","Alice","Black","IT Administrator","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,0,"A" +"000390","John","Wicks","IT Manager","0212","IT Administration Department","0200:0212","2010-07-15T08:20:00",,1,"A" +"000328","Adele","Dewrieux","Application Developer","0211","Java Development","0200:0210:0211","2010-07-15T08:20:00",,0,"A" diff --git a/testing/schrodingertest/testng-integration.xml b/testing/schrodingertest/testng-integration.xml index ea7744f495c..059412d8252 100644 --- a/testing/schrodingertest/testng-integration.xml +++ b/testing/schrodingertest/testng-integration.xml @@ -110,10 +110,13 @@ - - - - + + + + + + + \ No newline at end of file diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/MidPoint.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/MidPoint.java index e70ca97b413..52985eeae7d 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/MidPoint.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/MidPoint.java @@ -21,6 +21,8 @@ public class MidPoint { public static final long TIMEOUT_DEFAULT_2_S = 2000; + public static final long TIMEOUT_SHORT_4_S = 4000; + public static final long TIMEOUT_MEDIUM_6_S = 6000; public static final long TIMEOUT_LONG_1_M = 60000; diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java index 89655be5f04..039008e1c51 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/AssignmentsTab.java @@ -69,12 +69,26 @@ public > FocusSetAssignmentsModal clickAddAssigne $(Schrodinger.byElementAttributeValue("i", "class", "fe fe-assignment ")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - SelenideElement modalElement = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Select object(s)")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + SelenideElement modalElement = getNewAssignmentModal(); return new FocusSetAssignmentsModal((A) this, modalElement); } + public > FocusSetAssignmentsModal clickAddAssignemnt(String title) { + $(Schrodinger.byElementAttributeValue("div", "title", title)) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement modalElement = getNewAssignmentModal(); + + return new FocusSetAssignmentsModal((A) this, modalElement); + } + + private SelenideElement getNewAssignmentModal() { + return $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Select object(s)")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + } + + public boolean assignmentExists(String assignmentName){ SelenideElement assignmentSummaryDisplayName = table() .clickByName(assignmentName) diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java index f11ad3a6e44..d95dc349169 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListPage.java @@ -12,6 +12,8 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + import org.apache.commons.lang3.StringUtils; import org.openqa.selenium.By; @@ -41,4 +43,9 @@ protected String getTableAdditionalClass(){ return null; } + public int getCountOfObjects() { + String countString = $(Schrodinger.byDataId("div", "count")).getText(); + return Integer.valueOf(countString.substring(countString.lastIndexOf(" ")+1)); + } + } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java index 0cf2d70f9bb..d983f3510c1 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/assignmentholder/AssignmentHolderObjectListTable.java @@ -11,8 +11,10 @@ import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.component.common.Search; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.user.ProjectionsDropDown; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; @@ -22,7 +24,7 @@ /** * Created by honchar */ -public abstract class AssignmentHolderObjectListTable

extends TableWithPageRedirect

{ +public abstract class AssignmentHolderObjectListTable extends TableWithPageRedirect

{ public AssignmentHolderObjectListTable(P parent, SelenideElement parentElement){ super(parent, parentElement); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Paging.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Paging.java index 4054e1d7cae..27b0fe5b525 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Paging.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Paging.java @@ -28,25 +28,25 @@ public Paging(T parent, SelenideElement parentElement) { } public Paging first() { - getParentElement().$(Schrodinger.byElementValue("a", "<<")).click(); + getParentElement().$x(".//a[text()='<<']").click(); Selenide.sleep(1000); return this; } public Paging previous() { - getParentElement().$(Schrodinger.byElementValue("a", "<")).click(); + getParentElement().$x(".//a[text()='<']").click(); Selenide.sleep(1000); return this; } public Paging next() { - getParentElement().$(Schrodinger.byElementValue("a", ">")).click(); + getParentElement().$x(".//a[text()='>']").click(); Selenide.sleep(1000); return this; } public Paging last() { - getParentElement().$(Schrodinger.byElementValue("a", ">>")).click(); + getParentElement().$x(".//a[text()='>>']").click(); Selenide.sleep(1000); return this; } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java index 9064243c42b..0cf6d26439c 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/PrismForm.java @@ -13,6 +13,7 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.component.modal.ObjectBrowserModal; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; @@ -413,4 +414,17 @@ public PrismForm collapseAllChildrenContainers(String parentContainerHeraderK } return this; } + + public ObjectBrowserModal> editRefValue(String attributeName) { + SelenideElement property = findProperty(attributeName); + property.$x(".//button[@" + Schrodinger.DATA_S_ID + "='edit']") + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement modalWindow = $(By.className("wicket-modal")) + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + + ObjectBrowserModal objectBrowserModal = new ObjectBrowserModal<>(this, modalWindow); + + return objectBrowserModal; + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/Table.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/Table.java index 1cd75077319..ec3acdec217 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/Table.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/Table.java @@ -82,8 +82,8 @@ public Search> search() { return new Search<>(this, searchElement); } - public Paging paging() { - SelenideElement pagingElement = getParentElement().$(By.className("boxed-table-footer-paging")); + public

> Paging

paging() { + SelenideElement pagingElement = getParentElement().$x(".//div[@class='boxed-table-footer-paging']"); return new Paging(this, pagingElement); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/TableWithPageRedirect.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/TableWithPageRedirect.java index 43a296b107a..367e1817749 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/TableWithPageRedirect.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/table/TableWithPageRedirect.java @@ -6,8 +6,19 @@ */ package com.evolveum.midpoint.schrodinger.component.common.table; +import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; +import com.evolveum.midpoint.schrodinger.component.user.ProjectionsDropDown; import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import org.openqa.selenium.By; + +import static com.codeborne.selenide.Selenide.$; /** * Created by matus on 5/2/2018. @@ -21,4 +32,18 @@ public TableWithPageRedirect(T parent, SelenideElement parentElement) { public abstract E clickByName(String name); public abstract TableWithPageRedirect selectCheckboxByName(String name); + + public abstract

> TableHeaderDropDownMenu

clickHeaderActionDropDown(); + + protected SelenideElement clickAndGetHeaderDropDownMenu() { + + $(By.tagName("thead")) + .$(Schrodinger.byDataId("inlineMenuPanel")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S) + .click(); + + SelenideElement dropDownMenu = $(Schrodinger.byElementAttributeValue("ul", "class", "dropdown-menu pull-right")); + + return dropDownMenu; + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java index 5712a4fc96c..7863706117c 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java @@ -54,9 +54,13 @@ public FocusSetAssignmentsModal selectIntent(String option) { } public FocusTableWithChoosableElements> table() { - SelenideElement resourcesBox = $(By.cssSelector(".box.boxed-table")); + SelenideElement resourcesBox = getParentElement().$x(".//div[@class='box boxed-table']"); - return new FocusTableWithChoosableElements<>(this, resourcesBox); + return new FocusTableWithChoosableElements<>(this, resourcesBox){ + + + + }; } public T clickAdd() { diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/ObjectBrowserModalTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/ObjectBrowserModalTable.java index d5f1a52b8c0..0d19888bb26 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/ObjectBrowserModalTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/ObjectBrowserModalTable.java @@ -9,6 +9,7 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.common.Search; import com.evolveum.midpoint.schrodinger.component.common.table.Table; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -31,4 +32,9 @@ public T clickByName(String name){ return getParent().getParent(); } + + @Override + public Search> search() { + return (Search>) super.search(); + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java new file mode 100644 index 00000000000..de0b79c6470 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; +import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; +import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import org.openqa.selenium.By; + +import static com.codeborne.selenide.Selenide.$; + +/** + * @author skublik + */ + +public class MemberPanel extends Component { + + public MemberPanel(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public UserPage newMember() { + SelenideElement mainButton = $(By.xpath("//button[@type='button'][@title='Create member ']")); + String expanded = mainButton.getAttribute("aria-haspopup"); + if (Boolean.getBoolean(expanded)) { + newMember("Create member "); + } else { + mainButton.click(); + } + return null; //TODO implement return popup + } + + public AssignmentHolderDetailsPage newMember(String title) { + SelenideElement mainButton = $(By.xpath("//button[@type='button'][@title='Create member ']")); + if (!Boolean.getBoolean(mainButton.getAttribute("aria-expanded"))) { + mainButton.click(); + mainButton.waitWhile(Condition.attribute("aria-expanded", "false"), MidPoint.TIMEOUT_MEDIUM_6_S); + } + $(Schrodinger.byElementAttributeValue("div", "title", title)) + .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + return new AssignmentHolderDetailsPage(){}; + } + + public MemberPanel selectType(String type) { + getParentElement().$x(".//select[@name='type:propertyLabel:row:selectWrapper:select']") + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).selectOption(type); + return this; + } + + public AssignmentHolderObjectListTable, AssignmentHolderDetailsPage> table() { + SelenideElement table = getParentElement().$x(".//div[@" + Schrodinger.DATA_S_ID + "='table']"); + return new AssignmentHolderObjectListTable, AssignmentHolderDetailsPage>(this, table) { + @Override + public AssignmentHolderDetailsPage getObjectDetailsPage() { + return new AssignmentHolderDetailsPage() {}; + } + + @Override + public

>> TableHeaderDropDownMenu

clickHeaderActionDropDown() { + return null; + } + }; + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java new file mode 100644 index 00000000000..c7798a701e0 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.ElementsCollection; +import com.codeborne.selenide.Selenide; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.page.org.OrgPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import org.openqa.selenium.By; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author skublik + */ + +public class OrgHierarchyPanel extends Component { + public OrgHierarchyPanel(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public OrgHierarchyPanel selectOrgInTree(String orgName) { + boolean exist = getParentElement().$(Schrodinger.byElementValue("span", "class", "tree-label", orgName)).exists(); + if (!exist) { + expandAllIfNeeded(); + } + getParentElement().$(Schrodinger.byElementValue("span", "class", "tree-label", orgName)) + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + return this; + } + + private void expandAllIfNeeded() { + boolean existExpandButton = getParentElement().$(By.cssSelector(".tree-junction-collapsed")).exists(); + if (existExpandButton) { + expandAllOrgs(); + } + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + } + + public OrgHierarchyPanel expandAllOrgs() { + clickOnTreeMenu(); + getParentElement().$(Schrodinger.byDataResourceKey("schrodinger", "TreeTablePanel.expandAll")).parent() + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + return this; + } + + private void clickOnTreeMenu() { + getParentElement().$(Schrodinger.byDataId("div", "treeMenu")).click(); + } + + public boolean containsChildOrg(String parentOrg, String... expectedChild){ + expandAllIfNeeded(); + SelenideElement parentNode = getParentOrgNode(parentOrg); + SelenideElement subtree = parentNode.$x(".//div[@"+Schrodinger.DATA_S_ID+"='subtree']"); + ElementsCollection childsLabels = subtree.$$x(".//span[@"+Schrodinger.DATA_S_ID+"='label']"); + List childs = new ArrayList(); + for (SelenideElement childLabel : childsLabels) { + childs.add(childLabel.getText()); + } + return childs.containsAll(Arrays.asList(expectedChild)); + } + + private SelenideElement getParentOrgNode (String parentOrg) { + selectOrgInTree(parentOrg); + return getParentElement().$(By.cssSelector(".tree-node.success")).parent(); + } + + public OrgHierarchyPanel expandOrg(String orgName) { + SelenideElement parentNode = getParentOrgNode(orgName); + SelenideElement node = parentNode.$x(".//div[@"+Schrodinger.DATA_S_ID+"='node']"); + SelenideElement expandButton = node.$x(".//a[@" + Schrodinger.DATA_S_ID + "='junction']"); + if (expandButton.has(Condition.cssClass("tree-junction-collapsed"))) { + expandButton.waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + expandButton.waitWhile(Condition.cssClass("tree-junction-collapsed"), MidPoint.TIMEOUT_DEFAULT_2_S); + } + return this; + } + + public OrgTreeNodeDropDown editOrg(String orgName) { + SelenideElement parentNode = getParentOrgNode(orgName); + SelenideElement node = parentNode.$x(".//div[@"+Schrodinger.DATA_S_ID+"='node']"); + SelenideElement menuButton = node.$x(".//span[@" + Schrodinger.DATA_S_ID + "='menu']"); + menuButton.waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + SelenideElement menu = menuButton.$x(".//ul[@" + Schrodinger.DATA_S_ID + "='dropDownMenu']").waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new OrgTreeNodeDropDown(this, menu); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgRootTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgRootTab.java new file mode 100644 index 00000000000..aba7abff506 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgRootTab.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.page.org.OrgTreePage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import org.openqa.selenium.By; + +/** + * @author skublik + */ + +public class OrgRootTab extends Component { + + public OrgRootTab(OrgTreePage parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public OrgHierarchyPanel getOrgHierarchyPanel() { + SelenideElement treePanel = getParentElement().$(Schrodinger.byDataId("div", "treePanel")); + return new OrgHierarchyPanel<>(this, treePanel); + } + + public MemberPanel getMemberPanel() { + SelenideElement memberPanel = getParentElement().$(Schrodinger.byDataId("div", "memberPanel")); + return new MemberPanel<>(this, memberPanel); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java new file mode 100644 index 00000000000..1c4879b873d --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.common.DropDown; +import com.evolveum.midpoint.schrodinger.page.org.OrgPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +/** + * @author skublik + */ + +public class OrgTreeNodeDropDown extends DropDown { + + public OrgTreeNodeDropDown(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public OrgPage edit(){ + getParentElement().$x(".//schrodinger[@"+ Schrodinger.DATA_S_RESOURCE_KEY +"='TreeTablePanel.edit']").parent() + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + return new OrgPage(); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java index 4df674fc2a3..aefa2b20f89 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java @@ -11,6 +11,8 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; +import com.evolveum.midpoint.schrodinger.component.user.ProjectionsDropDown; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; import org.openqa.selenium.Keys; @@ -27,20 +29,20 @@ public ResourceAccountsTab(T parent, SelenideElement parentElement) { } public ResourceTaskQuickAccessDropDown> importTask() { - $(Schrodinger.byElementAttributeValue("label", "data-s-id", "label", "Import")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + SelenideElement importDiv = $(Schrodinger.byDataId("div", "import")); + importDiv.waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - SelenideElement dropDownElement = $(Schrodinger.byElementAttributeValue("ul", "role", "menu")) + SelenideElement dropDownElement = importDiv.lastChild().lastChild() .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); return new ResourceTaskQuickAccessDropDown<>(this, dropDownElement); } public ResourceTaskQuickAccessDropDown> reconciliationTask() { - $(Schrodinger.byElementAttributeValue("label", "data-s-id", "label", "Reconciliation")) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + SelenideElement reconcileDiv = $(Schrodinger.byDataId("div", "reconciliation")); + reconcileDiv.waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - SelenideElement dropDownElement = $(Schrodinger.byElementAttributeValue("ul", "role", "menu")) + SelenideElement dropDownElement = reconcileDiv.lastChild().lastChild() .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); return new ResourceTaskQuickAccessDropDown<>(this, dropDownElement); @@ -95,4 +97,16 @@ public void setIntent(String intent) { .setValue(intent).sendKeys(Keys.ENTER); } + public ProjectionsDropDown> clickHeaderActionDropDown() { + + $(By.tagName("thead")) + .$(Schrodinger.byDataId("inlineMenuPanel")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S) + .click(); + + SelenideElement dropDownMenu = $(Schrodinger.byElementAttributeValue("ul", "class", "dropdown-menu pull-right")); + + return new ProjectionsDropDown>(this, dropDownMenu); + } + } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java index a13a99bd2da..b3f11c9a516 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java @@ -9,15 +9,13 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; -import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; import com.evolveum.midpoint.schrodinger.component.common.Search; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; -import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.resource.AccountPage; +import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; -import org.openqa.selenium.By; - import static com.codeborne.selenide.Selenide.$; /** @@ -39,20 +37,30 @@ public AccountPage clickByName(String name) { @Override public ResourceShadowTable selectCheckboxByName(String name) { - $(Schrodinger.byAncestorFollowingSiblingDescendantOrSelfElementEnclosedValue("input", "type", "checkbox", "data-s-id", "3", name)) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + SelenideElement check = $(Schrodinger.byAncestorFollowingSiblingDescendantOrSelfElementEnclosedValue("input", "type", "checkbox", "data-s-id", "3", name)); + check.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + check.waitUntil(Condition.selected, MidPoint.TIMEOUT_MEDIUM_6_S); + return this; } - public ResourceShadowTableCog> clickCog() { + public UserPage clickOnOwnerByName(String name) { + getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + return new UserPage(); + } + + @Override + public ResourceShadowTableHeaderDropDown> clickHeaderActionDropDown() { $(Schrodinger.byElementAttributeValue("button", "data-toggle", "dropdown")) .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); SelenideElement cog = $(Schrodinger.byElementAttributeValue("ul","role","menu")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - return new ResourceShadowTableCog<>(this, cog); + return new ResourceShadowTableHeaderDropDown<>(this, cog); } @Override diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableCog.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableHeaderDropDown.java similarity index 86% rename from tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableCog.java rename to tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableHeaderDropDown.java index af7eead03cf..1bfcc31a9dc 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableCog.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTableHeaderDropDown.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; import com.evolveum.midpoint.schrodinger.component.common.DropDown; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import static com.codeborne.selenide.Selenide.$; @@ -18,21 +19,21 @@ /** * Created by matus on 5/25/2018. */ -public class ResourceShadowTableCog extends DropDown { - public ResourceShadowTableCog(T parent, SelenideElement parentElement) { +public class ResourceShadowTableHeaderDropDown extends TableHeaderDropDownMenu { + public ResourceShadowTableHeaderDropDown(T parent, SelenideElement parentElement) { super(parent, parentElement); } public T clickEnable() { - $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.enableAccounts")) + $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.enableAccount")) .parent().waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return this.getParent(); } public T clickDisable() { - $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.disableAccounts")) + $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.disableAccount")) .parent().waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return this.getParent(); @@ -49,14 +50,14 @@ public ConfirmationModal clickDelete() { } public T clickImport() { - $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.importAccounts")) + $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.importAccount")) .parent().waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return this.getParent(); } public T clickRemoveOwner() { - $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.removeOwners")) + $(Schrodinger.byDataResourceKey("pageContentAccounts.menu.removeOwner")) .parent().waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return this.getParent(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourcesPageTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourcesPageTable.java index b1e79d6229a..319917705fa 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourcesPageTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourcesPageTable.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.Search; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.resource.ViewResourcePage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; @@ -28,6 +29,11 @@ public TableWithPageRedirect selectCheckboxByName(String name) { return this; } + @Override + public TableHeaderDropDownMenu clickHeaderActionDropDown() { + return null; + } + @Override public ViewResourcePage clickByName(String name) { getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/DirectIndirectAssignmentTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/DirectIndirectAssignmentTable.java index f7ac85df959..83845149f92 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/DirectIndirectAssignmentTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/DirectIndirectAssignmentTable.java @@ -9,6 +9,7 @@ import com.codeborne.selenide.ElementsCollection; import com.codeborne.selenide.SelenideElement; +import com.evolveum.midpoint.schrodinger.component.Component; import com.evolveum.midpoint.schrodinger.component.common.DropDown; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -20,7 +21,7 @@ * @author skublik */ -public class DirectIndirectAssignmentTable extends DropDown { +public class DirectIndirectAssignmentTable extends Component { public DirectIndirectAssignmentTable(T parent, SelenideElement parentElement) { super(parent, parentElement); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/TableHeaderDropDownMenu.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/TableHeaderDropDownMenu.java new file mode 100644 index 00000000000..19f0fdf3887 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/table/TableHeaderDropDownMenu.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.table; + +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.component.common.DropDown; + +/** + * @author skublik + */ + +public class TableHeaderDropDownMenu extends DropDown { + + public TableHeaderDropDownMenu(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/OperationStatisticsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/OperationStatisticsTab.java new file mode 100644 index 00000000000..6e5b69892f2 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/OperationStatisticsTab.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.task; + +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.component.Component; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +/** + * @author skublik + */ + +public class OperationStatisticsTab extends Component { + + public OperationStatisticsTab(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public int getSuccessfullyProcessed() { + return Integer.valueOf(getParentElement().$(Schrodinger.byDataId("span", "objectsProcessedSuccess")).getText()); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java index 9d82e8aeb26..99da520a71e 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/task/TasksPageTable.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.task.ListTasksPage; import com.evolveum.midpoint.schrodinger.page.task.TaskPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -26,9 +27,9 @@ public TasksPageTable(ListTasksPage parent, SelenideElement parentElement) { @Override public TaskPage clickByName(String name) { - getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - + SelenideElement label = getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)); + label.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + label.waitWhile(Condition.exist, MidPoint.TIMEOUT_MEDIUM_6_S); return new TaskPage(); } @@ -40,6 +41,11 @@ public TableWithPageRedirect selectCheckboxByName(String name) { return null; } + @Override + public TableHeaderDropDownMenu clickHeaderActionDropDown() { + return null; + } + @Override public TaskPage getObjectDetailsPage(){ return new TaskPage(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java index 9ec371c0f59..3d348c088fa 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/ProjectionsDropDown.java @@ -12,6 +12,7 @@ import com.evolveum.midpoint.schrodinger.component.ProjectionsTab; import com.evolveum.midpoint.schrodinger.component.common.DropDown; import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -20,7 +21,7 @@ /** * Created by matus on 5/2/2018. */ -public class ProjectionsDropDown extends DropDown { +public class ProjectionsDropDown extends TableHeaderDropDownMenu { public ProjectionsDropDown(T parent, SelenideElement parentElement) { super(parent, parentElement); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java index a13aebaa3eb..ec0fe6e04f3 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersPageTable.java @@ -16,6 +16,7 @@ import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; import com.evolveum.midpoint.schrodinger.component.common.Search; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -32,7 +33,8 @@ public UsersPageTable(ListUsersPage parent, SelenideElement parentElement) { super(parent, parentElement); } - public UsersTableDropDown clickActionDropDown() { + @Override + public UsersTableDropDown clickHeaderActionDropDown() { $(Schrodinger.bySelfOrAncestorElementAttributeValue("button", "data-toggle", "dropdown", "class", "sortableLabel")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); @@ -40,7 +42,7 @@ public UsersTableDropDown clickActionDropDown() { SelenideElement dropDown = $(Schrodinger.byDataId("ul", "dropDownMenu")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - return new UsersTableDropDown<>(this, dropDown); + return new UsersTableDropDown(this, dropDown); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersTableDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersTableDropDown.java index 238569798f6..8c7b23fda79 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersTableDropDown.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/user/UsersTableDropDown.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; import com.evolveum.midpoint.schrodinger.component.common.DropDown; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import static com.codeborne.selenide.Selenide.$; @@ -18,7 +19,7 @@ /** * Created by matus on 5/10/2018. */ -public class UsersTableDropDown extends DropDown { +public class UsersTableDropDown extends TableHeaderDropDownMenu { public UsersTableDropDown(T parent, SelenideElement parentElement) { super(parent, parentElement); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/FocusPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/FocusPage.java index 250a64dc670..2f58b2d36bd 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/FocusPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/FocusPage.java @@ -95,19 +95,4 @@ public boolean isActivationState(String state) { return "".equals(summaryPanel.getText()); } } - - @Override - public AssignmentHolderBasicTab selectTabBasic(){ - SelenideElement element = getTabPanel().clickTab("pageAdminFocus.basic") - .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); - - return new AssignmentHolderBasicTab((F) this, element); - } - - @Override - public AssignmentsTab selectTabAssignments(){ - SelenideElement element = getTabPanel().clickTab("pageAdminFocus.assignments"); - - return new AssignmentsTab((F) this, element); - } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/archetype/ListArchetypesPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/archetype/ListArchetypesPage.java index 6bf26deb09b..d0979a309ae 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/archetype/ListArchetypesPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/archetype/ListArchetypesPage.java @@ -8,6 +8,8 @@ import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListPage; import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; +import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.component.user.UsersPageTable; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import com.evolveum.midpoint.schrodinger.page.BasicPage; @@ -20,6 +22,11 @@ public class ListArchetypesPage extends AssignmentHolderObjectListPage table() { return new AssignmentHolderObjectListTable(this, getTableBoxElement()) { + @Override + public

> TableHeaderDropDownMenu

clickHeaderActionDropDown() { + return null; + } + @Override public ArchetypePage getObjectDetailsPage() { return new ArchetypePage(); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/CasesListTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/CasesListTable.java index ff8d1b5f404..c31022e737f 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/CasesListTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/CasesListTable.java @@ -10,6 +10,8 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; +import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import static com.codeborne.selenide.Selenide.$; @@ -23,6 +25,11 @@ public CasesListTable(CasesPage parent, SelenideElement parentElement){ super(parent, parentElement); } + @Override + public TableHeaderDropDownMenu clickHeaderActionDropDown() { + return null; + } + @Override public CasePage getObjectDetailsPage(){ $(Schrodinger.byDataId("mainPanel")) diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java index 30042e1ae08..34013a75ed7 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/cases/ChildrenCaseTable.java @@ -10,6 +10,7 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; import com.evolveum.midpoint.schrodinger.page.BasicPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; import org.openqa.selenium.By; @@ -36,6 +37,11 @@ public ChildrenCaseTable selectCheckboxByName(String name) { return this; } + @Override + public TableHeaderDropDownMenu clickHeaderActionDropDown() { + return null; + } + public CasePage clickByPartialName(String name) { getParentElement() .$(Schrodinger.byDataId("tableContainer")) diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/org/OrgTreePage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/org/OrgTreePage.java index dbd5be54502..ce992e796b3 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/org/OrgTreePage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/org/OrgTreePage.java @@ -6,12 +6,33 @@ */ package com.evolveum.midpoint.schrodinger.page.org; +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.common.TabPanel; +import com.evolveum.midpoint.schrodinger.component.org.OrgRootTab; +import com.evolveum.midpoint.schrodinger.component.user.UserTasksTab; import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import static com.codeborne.selenide.Selenide.$; /** * Created by Viliam Repan (lazyman). */ public class OrgTreePage extends BasicPage { + public OrgRootTab selectTabWithRootOrg(String rootOrgName) { + SelenideElement element = getTabPanel().clickTabWithName(rootOrgName); + + return new OrgRootTab(this, element); + } + + private TabPanel getTabPanel() { + SelenideElement tabPanelElement = $(Schrodinger.byDataId("div", "tabs")) + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + return new TabPanel<>(this, tabPanelElement); + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java index 464bb1e09bc..3b023683912 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/ListTasksPage.java @@ -20,9 +20,7 @@ public class ListTasksPage extends AssignmentHolderObjectListPage { public TasksPageTable table() { - SelenideElement box = $(Schrodinger.byDataId("div", "taskTable")); - - return new TasksPageTable(this, box); + return new TasksPageTable(this, getTableBoxElement()); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java index 3f2aff91558..3eb68cbc82f 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/task/TaskPage.java @@ -9,10 +9,13 @@ import static com.codeborne.selenide.Selenide.$; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.ElementsCollection; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.component.AssignmentHolderBasicTab; import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.task.OperationStatisticsTab; import com.evolveum.midpoint.schrodinger.component.task.TaskBasicTab; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; @@ -63,7 +66,7 @@ public TaskPage resumeStopRefreshing() { } public TaskPage clickRunNow() { - $(Schrodinger.byDataResourceKey("a", "pageTaskEdit.button.runNow")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + $(Schrodinger.byDataResourceKey("span", "pageTaskEdit.button.runNow")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return this; } @@ -96,4 +99,19 @@ public AssignmentHolderBasicTab selectScheduleTab(){ return new AssignmentHolderBasicTab(this, element); } + + public OperationStatisticsTab selectTabOperationStatistics() { + SelenideElement element = getTabPanel().clickTab("pageTask.operationStats.title") + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new OperationStatisticsTab(this, element); + } + + public TaskPage setHandlerUriForNewTask(String handler) { + SelenideElement handlerElement = $(Schrodinger.byDataResourceKey("a", "TaskHandlerSelectorPanel.selector.header")); + selectTabBasic().form().addAttributeValue("handlerUri", handler.substring(0, (handler.length() - 1))); + $(Schrodinger.byElementAttributeValue("li", "textvalue", handler)).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + handlerElement.waitWhile(Condition.exist, MidPoint.TIMEOUT_MEDIUM_6_S); + return this; + } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/ListUsersPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/ListUsersPage.java index 00ef7fbc151..80149e24516 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/ListUsersPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/user/ListUsersPage.java @@ -39,7 +39,7 @@ public UserPage newUser() { SelenideElement mainButton = $(By.xpath("//button[@type='button'][@" + Schrodinger.DATA_S_ID + "='mainButton']")); String expanded = mainButton.getAttribute("aria-haspopup"); if (Boolean.getBoolean(expanded)) { - return newUser("user"); + return newUser("New user"); } mainButton.click(); return new UserPage(); @@ -50,7 +50,7 @@ public UserPage newUser(String title) { if (!Boolean.getBoolean(mainButton.getAttribute("aria-expanded"))) { mainButton.click(); } - $(Schrodinger.byElementAttributeValue("div", "title", "New " + title.toLowerCase())) + $(Schrodinger.byElementAttributeValue("div", "title", title)) .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); return new UserPage(); }