diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java index 4eb63704292..58163fd6dc4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentTablePanel.java @@ -159,10 +159,18 @@ public boolean isVisible(){ protected void populateAssignmentDetailsPanel(ListItem item){ AssignmentEditorPanel editor = new AssignmentEditorPanel(ID_ROW, item.getModel()){ + private static final long serialVersionUID = 1L; + @Override protected boolean ignoreMandatoryAttributes(){ return AssignmentTablePanel.this.ignoreMandatoryAttributes(); } + + @Override + protected boolean isRelationEditable(){ + return AssignmentTablePanel.this.isRelationEditable(); + } + }; item.add(editor); @@ -299,6 +307,10 @@ public void onClick(AjaxRequestTarget target) { return items; } + protected boolean isRelationEditable(){ + return true; + } + protected void showAllAssignments(AjaxRequestTarget target) { } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java index 20fa26a37d4..2d507be1543 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java @@ -117,6 +117,8 @@ public void initLayout() { AssignmentTablePanel panel = new AssignmentTablePanel(ID_ASSIGNMENT_TABLE_PANEL, assignmentsModel){ + private static final long serialVersionUID = 1L; + @Override protected List createAssignmentMenu() { List items = new ArrayList<>(); @@ -138,11 +140,17 @@ public void onClick(AjaxRequestTarget target) { items.add(item); return items; } - + @Override - public IModel getLabel() { - return createStringResource("PageAssignmentsList.assignmentsToRequest"); - } + public IModel getLabel() { + return createStringResource("PageAssignmentsList.assignmentsToRequest"); + } + + @Override + protected boolean isRelationEditable() { + return false; + } + }; mainForm.add(panel); @@ -153,23 +161,23 @@ public List getObject() { return getSessionStorage().getRoleCatalog().getTargetUserList(); } }, - true, createStringResource("AssignmentCatalogPanel.selectTargetUser")){ + true, createStringResource("AssignmentCatalogPanel.selectTargetUser")) { private static final long serialVersionUID = 1L; @Override - protected String getUserButtonLabel(){ + protected String getUserButtonLabel() { return getTargetUserSelectionButtonLabel(getModelObject()); } @Override - protected void onDeleteSelectedUsersPerformed(AjaxRequestTarget target){ + protected void onDeleteSelectedUsersPerformed(AjaxRequestTarget target) { super.onDeleteSelectedUsersPerformed(target); getSessionStorage().getRoleCatalog().setTargetUserList(new ArrayList<>()); targetUserChangePerformed(target); } @Override - protected void multipleUsersSelectionPerformed(AjaxRequestTarget target, List usersList){ + protected void multipleUsersSelectionPerformed(AjaxRequestTarget target, List usersList) { getSessionStorage().getRoleCatalog().setTargetUserList(usersList); targetUserChangePerformed(target); } @@ -278,9 +286,7 @@ private void onSingleUserRequestPerformed(AjaxRequestTarget target) { result.recomputeStatus(); } - findBackgroundTaskOperation(result); - if (backgroundTaskOperationResult != null - && StringUtils.isNotEmpty(backgroundTaskOperationResult.getAsynchronousOperationReference())){ + if (hasBackgroundTaskOperation(result)){ result.setMessage(createStringResource("PageAssignmentsList.requestInProgress").getString()); showResult(result); clearStorage(); @@ -340,9 +346,7 @@ private void onMultiUserRequestPerformed(AjaxRequestTarget target) { "Failed to execute operaton " + result.getOperation(), e); target.add(getFeedbackPanel()); } - findBackgroundTaskOperation(result); - if (backgroundTaskOperationResult != null - && StringUtils.isNotEmpty(backgroundTaskOperationResult.getAsynchronousOperationReference())) { + if (hasBackgroundTaskOperation(result)) { result.setMessage(createStringResource("PageAssignmentsList.requestInProgress").getString()); showResult(result); clearStorage(); @@ -411,24 +415,9 @@ private ContainerDelta handleAssignmentDeltas(ObjectDelta focusDelta, } - private void findBackgroundTaskOperation(OperationResult result){ - if (backgroundTaskOperationResult != null) { - return; - } else { - List subresults = result.getSubresults(); - if (subresults == null || subresults.size() == 0) { - return; - } - for (OperationResult subresult : subresults) { - if (subresult.getOperation().equals(OPERATION_WF_TASK_CREATED)) { - backgroundTaskOperationResult = subresult; - return; - } else { - findBackgroundTaskOperation(subresult); - } - } - } - return; + private boolean hasBackgroundTaskOperation(OperationResult result){ + String caseOid = OperationResult.referenceToCaseOid(result.findAsynchronousOperationReference()); + return StringUtils.isNotEmpty(caseOid); } private void handleModifyAssignmentDelta(AssignmentEditorDto assDto, diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java index 04da2f4d935..937c237d1af 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/CaseTests.java @@ -115,7 +115,7 @@ public void isCaseCreated(){ .inputValue(ConstantsUtil.CASE_CREATION_TEST_CASE_NAME) .updateSearch() .and() - .clickByName(ConstantsUtil.CASE_CREATION_TEST_CASE_NAME); + .containsLinkTextPartially(ConstantsUtil.CASE_CREATION_TEST_CASE_NAME); } diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java index 0337fca83dc..ac15975f33d 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/scenarios/ObjectListArchetypeTests.java @@ -57,19 +57,23 @@ public void configureArchetypeObjectListView(){ prismForm .expandContainerPropertiesPanel(OBJECT_COLLECTION_VIEWS_HEADER) .addNewContainerValue(OBJECT_COLLECTION_VIEW_HEADER, NEW_GUI_OBJECT_LIST_VIEW_HEADER) - .expandContainerPropertiesPanel(NEW_OBJECT_LIST_VIEW_CONTAINER_KEY) + .expandContainerPropertiesPanel(NEW_OBJECT_LIST_VIEW_CONTAINER_NEW_VALUE_KEY) .expandContainerPropertiesPanel(COLLECTION_HEADER); //set UserType - SelenideElement newGuiObjectListViewPropertiesPanel = prismForm.getPrismPropertiesPanel(NEW_OBJECT_LIST_VIEW_CONTAINER_KEY); + SelenideElement newGuiObjectListViewPropertiesPanel = prismForm.getPrismPropertiesPanel(NEW_OBJECT_LIST_VIEW_CONTAINER_NEW_VALUE_KEY); + //todo fix! it takes Type input from the first collection container! newGuiObjectListViewPropertiesPanel .$(Schrodinger.byDataResourceKey("Type")) .$(By.tagName("select")) .selectOptionContainingText("User"); //set archetypeRef - SelenideElement collectionRefPropertyPanel = prismForm.findProperty(COLLECTION_REF_ATTRIBUTE_NAME); - collectionRefPropertyPanel + newGuiObjectListViewPropertiesPanel + .$(Schrodinger.byElementValue("span", COLLECTION_REF_ATTRIBUTE_NAME)) + .parent() + .parent() + .parent() .$(Schrodinger.byDataId("edit")) .click(); diff --git a/testing/schrodingertest/testng-integration-schrodinger.xml b/testing/schrodingertest/testng-integration-schrodinger.xml index 3428a8a88b5..8363aa78827 100644 --- a/testing/schrodingertest/testng-integration-schrodinger.xml +++ b/testing/schrodingertest/testng-integration-schrodinger.xml @@ -42,4 +42,9 @@ + + + + + diff --git a/testing/story/src/test/resources/inbound-outbound-association/resource-dummy-dir.xml b/testing/story/src/test/resources/inbound-outbound-association/resource-dummy-dir.xml index d6ae206a0fd..3fb7ee53b6b 100644 --- a/testing/story/src/test/resources/inbound-outbound-association/resource-dummy-dir.xml +++ b/testing/story/src/test/resources/inbound-outbound-association/resource-dummy-dir.xml @@ -92,7 +92,6 @@ true true - false strong @@ -123,21 +122,23 @@ import com.evolveum.midpoint.schema.constants.* import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; - if (assignment.target != null) { - log.info("### (association) target roleType " + assignment.target.roleType) - inRange = 'group'.equals(assignment.target.subtype) - log.info("########## (association) inRange: " + inRange) - return inRange - } - if (assignment.targetRef != null) { - role = midpoint.getObject(RoleType.class, assignment.targetRef.oid) - log.info("### (association) role name " + role.name.orig) - log.info("### (association) role.roleType " + role.subtype) - inRange = ('group').equals(role.subtype) - log.info("########## (association) inRange: " + inRange) - return inRange + if (assignment.targetRef.object != null) { + log.info("### (association) target roleType " + assignment.targetRef.objectable.roleType) + inRange = 'group'.equals(assignment.targetRef.objectable..subtype) + log.info("########## (association) inRange: " + inRange) + return inRange + } else { + role = midpoint.getObject(RoleType.class, assignment.targetRef.oid) + log.info("### (association) role name " + role.name.orig) + log.info("### (association) role.roleType " + role.subtype) + inRange = ('group').equals(role.subtype) + log.info("########## (association) inRange: " + inRange) + return inRange + } } + + return false diff --git a/testing/story/src/test/resources/plenty-of-assignments/resource-dummy.xml b/testing/story/src/test/resources/plenty-of-assignments/resource-dummy.xml index f39fcbceb63..e9378410b51 100644 --- a/testing/story/src/test/resources/plenty-of-assignments/resource-dummy.xml +++ b/testing/story/src/test/resources/plenty-of-assignments/resource-dummy.xml @@ -107,8 +107,8 @@ Ship + false 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 149c39eec92..c0b0d6ba8e1 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 @@ -10,6 +10,7 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.page.BasicPage; +import org.apache.commons.lang3.StringUtils; import org.openqa.selenium.By; import static com.codeborne.selenide.Selenide.$; @@ -22,9 +23,19 @@ public abstract class AssignmentHolderObjectListPage showEmptyAttributes(String containerName) { public Boolean compareInputAttributeValue(String name, String expectedValue) { SelenideElement property = findProperty(name); - SelenideElement value = property.$(By.xpath(".//input[contains(@class,\"form-control\")]")); + SelenideElement value = property.parent().$(By.xpath(".//input[contains(@class,\"form-control\")]")); String valueElement = value.getValue(); if (!valueElement.isEmpty()) { @@ -274,7 +274,8 @@ public PrismForm addNewContainerValue(String containerHeaderKey, String newCo SelenideElement panelHeader = $(By.linkText(containerHeaderKey)) .parent() .parent(); - panelHeader.$(Schrodinger.byDataId("addButton")) + panelHeader.scrollTo(); + panelHeader.find(By.className("fa-plus-circle")) .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S) .click(); @@ -291,11 +292,12 @@ public PrismForm addNewContainerValue(String containerHeaderKey, String newCo public SelenideElement getPrismPropertiesPanel(String containerHeaderKey){ expandContainerPropertiesPanel(containerHeaderKey); - SelenideElement containerHeaderPanel = $(Schrodinger.byDataResourceKey("div", containerHeaderKey)); + SelenideElement containerHeaderPanel = $(Schrodinger.byDataResourceKey("a", containerHeaderKey)); return containerHeaderPanel .parent() - .$(By.className("prism-properties")) - .shouldBe(Condition.visible) + .parent() + .parent() + .find(By.className("prism-properties")) .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S); } 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 e5412e721e6..92a8f4bde0c 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 @@ -17,6 +17,7 @@ import org.openqa.selenium.By; +import static com.codeborne.selenide.Selectors.byPartialLinkText; import static com.codeborne.selenide.Selectors.byText; import static com.codeborne.selenide.Selenide.$; @@ -69,6 +70,10 @@ public boolean containsText(String value){ return $(byText(value)).waitUntil(Condition.visible, MidPoint.TIMEOUT_MEDIUM_6_S).is(Condition.visible); } + public boolean containsLinkTextPartially(String value){ + return $(byPartialLinkText(value)).waitUntil(Condition.visible, MidPoint.TIMEOUT_MEDIUM_6_S).is(Condition.visible); + } + public boolean buttonToolBarExists(){ return $(Schrodinger.byDataId("buttonToolbar")).exists(); } 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 c3702acb3af..6fa9690aa4f 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 @@ -13,6 +13,7 @@ import com.evolveum.midpoint.schrodinger.component.common.FeedbackBox; import com.evolveum.midpoint.schrodinger.component.user.UsersPageTable; import com.evolveum.midpoint.schrodinger.page.BasicPage; +import com.evolveum.midpoint.schrodinger.util.ConstantsUtil; import org.openqa.selenium.By; import static com.codeborne.selenide.Selenide.$; @@ -26,4 +27,10 @@ public class ListUsersPage extends AssignmentHolderObjectListPage