From 857c05b348c658eb63b6467a1c3b7a61b51b4601 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Fri, 29 May 2020 08:22:55 +0200 Subject: [PATCH 1/2] Stop eagerly resolving assignment targets This was the state before refactoring AssignmentEvaluator. It also fixes TestPlentyOfAssignments in story tests. However, missing evaluatedAssignment.target has to be treated somehow. See MID-6292. --- .../impl/lens/assignments/TargetsEvaluation.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetsEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetsEvaluation.java index 384fe02ccfd..62db51b2020 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetsEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetsEvaluation.java @@ -115,7 +115,7 @@ void evaluate() throws SchemaException, SecurityViolationException, Communicatio private void addSkippedTargetsToMembershipLists() throws SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { - boolean resolvedTargets = false; +// boolean resolvedTargets = false; // TODO CLEAN THIS UP // Important: but we still want this to be reflected in roleMembershipRef if (segment.isNonNegativeRelativityMode() && Util.shouldCollectMembership(segment)) { @@ -123,7 +123,7 @@ private void addSkippedTargetsToMembershipLists() ctx.membershipCollector.collect(segment.assignment.getTargetRef(), segment.relation); } else { // no OID, so we have to resolve the filter - resolvedTargets = true; +// resolvedTargets = true; targets.addAll(getTargets()); for (PrismObject targetObject : targets) { ObjectType target = targetObject.asObjectable(); @@ -134,10 +134,11 @@ private void addSkippedTargetsToMembershipLists() } } - // We have to know targets for direct assignments - if (segment.direct && !resolvedTargets) { - targets.addAll(getTargets()); - } + // We have to know targets for direct assignments. + // But these should be perhaps loaded lazily (MID-6292) +// if (segment.direct && !resolvedTargets) { +// targets.addAll(getTargets()); +// } } private boolean hasCycle(@NotNull PrismObject target) throws PolicyViolationException { From 2838e3c0b84b3386d7d655c348175ee9726e7dfc Mon Sep 17 00:00:00 2001 From: kate Date: Fri, 29 May 2020 10:01:13 +0200 Subject: [PATCH 2/2] schrodinger test fix --- .../midpoint/web/component/search/Search.java | 2 +- .../web/component/search/SearchFactory.java | 2 +- .../schrodinger/scenarios/CaseTests.java | 10 ++++++-- .../scenarios/ObjectListArchetypeTests.java | 11 +++++--- .../schrodinger/component/common/Search.java | 25 +++++++++++++------ .../component/common/SearchItemField.java | 24 ++++++++++++++++++ .../midpoint/schrodinger/util/Utils.java | 2 +- 7 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/SearchItemField.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java index 38f3dc8623d..80ae89ee359 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/Search.java @@ -57,7 +57,7 @@ public class Search implements Serializable, DebugDumpable { private boolean showAdvanced = false; private boolean isFullTextSearchEnabled = false; - private boolean canConfigure; + private boolean canConfigure = true; //TODO should be changed to false private String advancedQuery; private String advancedError; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java index 6b2155ba450..6e06a6e52ff 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/SearchFactory.java @@ -323,7 +323,7 @@ private static SearchItemsType getConfiguredSearchItems(M private static boolean isAllowToConfigureSearchItems(ModelServiceLocator modelServiceLocator, Class type, String collectionViewName){ SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName); if (searchConfig == null || searchConfig.isAllowToConfigureSearchItems() == null){ - return false; + return true; //todo should be set to false } return searchConfig.isAllowToConfigureSearchItems(); } 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 e513f402a31..9539f3a456f 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 @@ -11,6 +11,11 @@ import com.codeborne.selenide.Condition; import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.component.common.Search; +import com.evolveum.midpoint.schrodinger.component.common.SearchItemField; +import com.evolveum.midpoint.schrodinger.component.modal.ObjectBrowserModal; + import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -234,10 +239,11 @@ public void test140forwardCaseAction() { .clickByName(ASSIGNING_ROLE_CASE_NAME + FORWARD_WORKITEM_TEST_USER_NAME); ForwardWorkitemModal forwardWorkitemModal = workitemDetailsPanel.forwardButtonClick(); - forwardWorkitemModal + SearchItemField> nameSearchField = forwardWorkitemModal .table() .search() - .byName() + .byName(); + nameSearchField .inputValue(FORWARD_WORKITEM_TO_USER_NAME) .updateSearch(); forwardWorkitemModal 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 d0f59b35d05..06e902dd22f 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 @@ -11,6 +11,8 @@ import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.common.PrismForm; +import com.evolveum.midpoint.schrodinger.component.common.Search; +import com.evolveum.midpoint.schrodinger.component.common.SearchItemField; import com.evolveum.midpoint.schrodinger.component.configuration.AdminGuiTab; import com.evolveum.midpoint.schrodinger.component.modal.ObjectBrowserModal; import com.evolveum.midpoint.schrodinger.page.user.ListUsersPage; @@ -81,13 +83,14 @@ public void configureArchetypeObjectListView(){ .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); ObjectBrowserModal objectBrowserModal = new ObjectBrowserModal<>(prismForm, modalWindow); - objectBrowserModal + SearchItemField> nameSearchField = objectBrowserModal .selectType("Archetype") .table() .search() - .byName() - .inputValue(ARCHETYPE_OBJECT_NAME) - .updateSearch(); + .byName(); + nameSearchField + .inputValue(ARCHETYPE_OBJECT_NAME) + .updateSearch(); objectBrowserModal .table() .clickByName(ARCHETYPE_OBJECT_NAME); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java index 15f0a3499d7..1a7fc39f8c6 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java @@ -13,6 +13,10 @@ import com.evolveum.midpoint.schrodinger.component.Component; import com.evolveum.midpoint.schrodinger.util.Schrodinger; +import org.openqa.selenium.By; + +import static com.codeborne.selenide.Selectors.byText; + /** * Created by Viliam Repan (lazyman). */ @@ -22,13 +26,18 @@ public Search(T parent, SelenideElement parentElement) { super(parent, parentElement); } - public Popover> byName() { - + public SearchItemField> byName() { choiceBasicSearch(); + SelenideElement nameElement = getItemByName("Name"); + SelenideElement nameInput = nameElement.parent().$x(".//input[@" + Schrodinger.DATA_S_ID + "='input']") + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + return new SearchItemField(this, nameInput); + } - getParentElement().$x(".//a[@"+Schrodinger.DATA_S_ID+"='mainButton']").waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); - return new Popover<>(this, getDisplayedPopover()); + public Search updateSearch(){ + getParentElement().$(Schrodinger.byDataId("searchSimple")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + return this; } private void choiceBasicSearch() { @@ -85,9 +94,9 @@ public Popover> byItem(String name) { } private SelenideElement getItemByName(String name) { - ElementsCollection items = getParentElement().findAll(Schrodinger.byDataId("a", "mainButton")); + ElementsCollection items = getParentElement().findAll(By.className("search-item")); for (SelenideElement item : items) { - if (item.getText().startsWith(name + ":")) { + if (item.$(byText(name)) != null) { return item; } } @@ -107,6 +116,8 @@ private SelenideElement getDisplayedPopover() { return popover; } + + public Search resetBasicSearch() { choiceBasicSearch(); SelenideElement nameItem = getItemByName("Name"); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/SearchItemField.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/SearchItemField.java new file mode 100644 index 00000000000..f0701ac0c02 --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/SearchItemField.java @@ -0,0 +1,24 @@ +package com.evolveum.midpoint.schrodinger.component.common; + +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.util.Schrodinger; + +public class SearchItemField extends Component { + + public SearchItemField(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public T inputValue(String input) { + SelenideElement inputField = getParentElement().parent().$x(".//input[@" + Schrodinger.DATA_S_ID + "='input']") + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + if(!input.equals(inputField.getValue())) { + inputField.setValue(input); + } + return getParent(); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/util/Utils.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/util/Utils.java index 0128aa05e49..de6d73bd44f 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/util/Utils.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/util/Utils.java @@ -59,7 +59,7 @@ public static

void addAsignments(Assignm .updateSearch() .and() .selectCheckboxByName(assignment) - .and() + .and() .clickAdd(); }