This is an automated email from the ASF dual-hosted git repository.

andreapatricelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 6edb4b0  [SYNCOPE-1421] enabled enduser UI tests, fit with all other 
IT tests
6edb4b0 is described below

commit 6edb4b036eaf77c550e9836fb7da5e0a66e2654a
Author: Andrea Patricelli <andreapatrice...@apache.org>
AuthorDate: Thu Jun 13 14:36:36 2019 +0200

    [SYNCOPE-1421] enabled enduser UI tests, fit with all other IT tests
---
 .../client/enduser/panels/SelfPwdResetPanel.java   |  22 ++-
 .../client/enduser/wizards/any/PlainAttrs.java     |   3 +-
 .../client/enduser/panels/SelfPwdResetPanel.html   |   5 +-
 .../syncope/fit/enduser/AbstractEnduserITCase.java |  45 +++++
 .../fit/enduser/SelfRegistrationITCase.java        | 190 ++++++++++++++++-----
 .../java/org/apache/syncope/fit/ui/UtilityUIT.java |  10 ++
 6 files changed, 227 insertions(+), 48 deletions(-)

diff --git 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
index 8e8cb2d..bdec2a5 100644
--- 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
+++ 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.java
@@ -28,7 +28,6 @@ import 
org.apache.syncope.client.enduser.pages.BaseEnduserWebPage;
 import org.apache.syncope.client.enduser.wizards.any.CaptchaPanel;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.DomainDropDown;
-import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.common.keymaster.client.api.DomainOps;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -77,12 +76,12 @@ public class SelfPwdResetPanel extends Panel implements 
IEventSource {
 
     private String usernameText;
 
+    private String securityAnswerText;
+
     private final TextField<String> securityQuestion;
 
     private final CaptchaPanel<Void> captcha;
 
-    protected final Model<String> securityAnswerModel = new Model<>();
-
     public SelfPwdResetPanel(final String id, final PageReference pageRef) {
         super(id);
 
@@ -137,10 +136,17 @@ public class SelfPwdResetPanel extends Panel implements 
IEventSource {
         };
         add(reloadLink);
 
-        AjaxTextFieldPanel securityAnswer =
-                new AjaxTextFieldPanel("securityAnswer", "securityAnswer", 
securityAnswerModel);
-        securityAnswer.setOutputMarkupId(true);
-        securityAnswer.setOutputMarkupPlaceholderTag(true);
+        TextField<String> securityAnswer =
+                new TextField<>("securityAnswer", new PropertyModel<>(this, 
"securityAnswerText"), String.class);
+        securityAnswer.add(new 
AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+            private static final long serialVersionUID = -1107858522700306810L;
+
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                // do nothing
+            }
+        });
         securityAnswer.setRequired(true);
         add(securityAnswer);
 
@@ -166,7 +172,7 @@ public class SelfPwdResetPanel extends Panel implements 
IEventSource {
                 } else {
                     try {
                         
SyncopeEnduserSession.get().getService(UserSelfService.class).
-                                requestPasswordReset(usernameText, 
securityAnswerModel.getObject());
+                                requestPasswordReset(usernameText, 
securityAnswerText);
                         final PageParameters parameters = new PageParameters();
                         parameters.add(Constants.NOTIFICATION_MSG_PARAM, 
getString("self.pwd.reset.success"));
                         setResponsePage(getApplication().getHomePage(), 
parameters);
diff --git 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
index d0189fc..8481591 100644
--- 
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
+++ 
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/wizards/any/PlainAttrs.java
@@ -377,7 +377,8 @@ public class PlainAttrs extends 
AbstractAttrs<PlainSchemaTO> {
         }
 
         panel.setReadOnly(readOnly);
-
+        panel.setMarkupId(StringUtils.isBlank(groupName) ? schemaTO.getKey() : 
groupName + "." + schemaTO.getKey());
+        
         return panel;
     }
 
diff --git 
a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.html
 
b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.html
index 08c3d35..a1c884b 100644
--- 
a/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.html
+++ 
b/client/idrepo/enduser/src/main/resources/org/apache/syncope/client/enduser/panels/SelfPwdResetPanel.html
@@ -41,7 +41,10 @@ under the License.
           </wicket:message><a wicket:id="reloadLink"> <wicket:message 
key="reload"></wicket:message></a>)</div>
       </div>
       <div class="form-group input-md">
-        <span wicket:id="securityAnswer">[SECURITY ANSWER]</span>
+        <label for="securityAnswer"><wicket:message 
key="securityAnswer"/></label>
+        <input id="securityAnswer" type="text" wicket:id="securityAnswer" 
class="form-control" 
+               wicket:message="placeholder:securityAnswer" 
+               autofocus="autofocus" />
       </div>
       <div class="form-group input-md">
         <span wicket:id="captchaPanel">[CAPTCHA]</span>
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
index cc0d2dd..b40a68b 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/AbstractEnduserITCase.java
@@ -24,8 +24,10 @@ import 
com.giffing.wicket.spring.boot.starter.app.classscanner.candidates.Wicket
 import 
com.giffing.wicket.spring.boot.starter.configuration.extensions.core.settings.general.GeneralSettingsProperties;
 import 
com.giffing.wicket.spring.boot.starter.configuration.extensions.external.spring.boot.actuator.WicketEndpointRepositoryDefault;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.syncope.client.enduser.SyncopeWebApplication;
 import org.apache.syncope.client.enduser.commons.PreviewUtils;
 import 
org.apache.syncope.client.enduser.init.ClassPathScanImplementationLookup;
@@ -41,6 +43,10 @@ import 
org.springframework.context.annotation.AnnotationConfigApplicationContext
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import 
org.apache.syncope.common.keymaster.client.self.SelfKeymasterClientContext;
+import org.apache.syncope.common.lib.Attr;
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.request.UserCR;
+import org.apache.syncope.common.rest.api.service.SecurityQuestionService;
 import org.apache.syncope.common.rest.api.service.UserService;
 import org.apache.syncope.fit.ui.AbstractUITCase;
 import org.apache.syncope.fit.ui.UtilityUIT;
@@ -56,6 +62,8 @@ public abstract class AbstractEnduserITCase extends 
AbstractUITCase {
 
     protected static UserService userService;
 
+    protected static SecurityQuestionService securityQuestionService;
+
     protected static UtilityUIT UTILITY_UI;
 
     @ImportAutoConfiguration(classes = { SelfKeymasterClientContext.class })
@@ -135,6 +143,39 @@ public abstract class AbstractEnduserITCase extends 
AbstractUITCase {
         adminClient = clientFactory.create(ADMIN_UNAME, ADMIN_PWD);
 
         userService = adminClient.getService(UserService.class);
+        securityQuestionService = 
adminClient.getService(SecurityQuestionService.class);
+        // create test user for must change password
+        userService.create(new UserCR.Builder(SyncopeConstants.ROOT_REALM, 
"mustchangepassword").
+                password("password123").
+                mustChangePassword(true).
+                plainAttr(attr("fullname", "mustchangepassw...@apache.org")).
+                plainAttr(attr("firstname", "mustchangepassw...@apache.org")).
+                plainAttr(attr("surname", "surname")).
+                plainAttr(attr("ctype", "a type")).
+                plainAttr(attr("userId", "mustchangepassw...@apache.org")).
+                plainAttr(attr("email", "mustchangepassw...@apache.org")).
+                plainAttr(attr("loginDate", 
DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(new Date()))).
+                build());
+        // create test user for self password reset
+        userService.create(new UserCR.Builder(SyncopeConstants.ROOT_REALM, 
"selfpwdreset").
+                password("password123").
+                plainAttr(attr("fullname", "selfpwdre...@apache.org")).
+                plainAttr(attr("firstname", "selfpwdre...@apache.org")).
+                plainAttr(attr("surname", "surname")).
+                plainAttr(attr("ctype", "a type")).
+                plainAttr(attr("userId", "selfpwdre...@apache.org")).
+                plainAttr(attr("email", "selfpwdre...@apache.org")).
+                plainAttr(attr("loginDate", 
DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(new Date()))).
+                build());
+        // create test user for self update
+        userService.create(new UserCR.Builder(SyncopeConstants.ROOT_REALM, 
"selfupdate").
+                password("password123").
+                plainAttr(attr("fullname", "selfupd...@apache.org")).
+                plainAttr(attr("firstname", "selfupd...@apache.org")).
+                plainAttr(attr("surname", "surname")).
+                plainAttr(attr("ctype", "a type")).
+                plainAttr(attr("userId", "selfupd...@apache.org")).
+                build());
     }
 
     protected void doLogin(final String user, final String passwd) {
@@ -146,4 +187,8 @@ public abstract class AbstractEnduserITCase extends 
AbstractUITCase {
         formTester.setValue("password", passwd);
         formTester.submit("submit");
     }
+
+    protected static Attr attr(final String schema, final String value) {
+        return new Attr.Builder(schema).value(value).build();
+    }
 }
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/SelfRegistrationITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/SelfRegistrationITCase.java
index 7c8b009..bfa2ff6 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/SelfRegistrationITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/enduser/SelfRegistrationITCase.java
@@ -18,23 +18,29 @@
  */
 package org.apache.syncope.fit.enduser;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.enduser.pages.Login;
+import org.apache.syncope.client.enduser.pages.SelfPasswordReset;
+import org.apache.syncope.client.enduser.pages.MustChangePassword;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.request.BooleanReplacePatchItem;
+import org.apache.syncope.common.lib.request.StringReplacePatchItem;
+import org.apache.syncope.common.lib.request.UserUR;
+import org.apache.syncope.common.lib.to.SecurityQuestionTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.PatchOperation;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
 import org.apache.wicket.extensions.markup.html.form.palette.component.Choices;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.util.tester.FormTester;
-import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-@Disabled("WIP")
 public class SelfRegistrationITCase extends AbstractEnduserITCase {
 
     private static final String WIZARD_FORM = "body:wizard:form";
@@ -50,7 +56,7 @@ public class SelfRegistrationITCase extends 
AbstractEnduserITCase {
 
         UTILITY_UI.getTester().assertComponent(WIZARD_FORM + 
":view:username:textField", TextField.class);
         FormTester formTester = 
UTILITY_UI.getTester().newFormTester(WIZARD_FORM);
-        assertNotNull(formTester);
+        Assertions.assertNotNull(formTester);
         formTester.setValue("view:username:textField", username);
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
 
@@ -65,23 +71,32 @@ public class SelfRegistrationITCase extends 
AbstractEnduserITCase {
                 TextField.class);
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
 
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:6:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"fullname").getPageRelativePath()
+                + ":textField",
                 TextField.class);
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:12:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"surname").getPageRelativePath()
+                + ":textField",
                 TextField.class);
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:14:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"userId").getPageRelativePath()
+                + ":textField",
                 TextField.class);
 
         formTester = UTILITY_UI.getTester().newFormTester(WIZARD_FORM);
-        assertNotNull(formTester);
-        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:6:panel:textField",
+        Assertions.assertNotNull(formTester);
+        formTester.setValue(UTILITY_UI.findComponentByMarkupId(WIZARD_FORM
+                + ":view:plainSchemas:tabs:0:body:content:schemas",
+                "fullname").getPageRelativePath().replace(WIZARD_FORM + ":", 
StringUtils.EMPTY) + ":textField",
                 "User fullname");
-        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:12:panel:textField",
+        formTester.setValue(UTILITY_UI.findComponentByMarkupId(WIZARD_FORM
+                + ":view:plainSchemas:tabs:0:body:content:schemas",
+                "surname").getPageRelativePath().replace(WIZARD_FORM + ":", 
StringUtils.EMPTY) + ":textField",
                 "User surname");
-        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:14:panel:textField",
+        formTester.setValue(UTILITY_UI.
+                findComponentByMarkupId(WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", "userId").
+                getPageRelativePath().replace(WIZARD_FORM + ":", 
StringUtils.EMPTY) + ":textField",
                 "t...@email.com");
 
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
@@ -107,30 +122,125 @@ public class SelfRegistrationITCase extends 
AbstractEnduserITCase {
         UTILITY_UI.getTester().assertRenderedPage(Login.class);
         UTILITY_UI.getTester().assertComponent("login:username", 
TextField.class);
 
-        assertFalse(userService.search(new 
AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+        Assertions.assertFalse(userService.search(new 
AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
                 
fiql(SyncopeClient.getUserSearchConditionBuilder().is("username").equalTo(username).query()).
                 build()).getResult().isEmpty());
-        
-        assertNotNull(userService.read(username));
+
+        Assertions.assertNotNull(userService.read(username));
 
         UTILITY_UI.getTester().cleanupFeedbackMessages();
+
+        // cleanup
+        userService.delete(username);
     }
 
     @Test
     public void selfPasswordReset() {
+        SecurityQuestionTO question = 
securityQuestionService.read("887028ea-66fc-41e7-b397-620d7ea6dfbb");
+        UserTO selfpwdreset = userService.read("selfpwdreset");
+        userService.update(new UserUR.Builder(selfpwdreset.getKey())
+                .securityQuestion(new StringReplacePatchItem.Builder()
+                        .operation(PatchOperation.ADD_REPLACE)
+                        .value(question.getKey())
+                        .build())
+                .securityAnswer(new StringReplacePatchItem.Builder()
+                        .operation(PatchOperation.ADD_REPLACE)
+                        .value("ananswer")
+                        .build())
+                .build());
+
+        final String pwdResetForm = "body:content:selfPwdResetForm";
         UTILITY_UI.getTester().startPage(Login.class);
         UTILITY_UI.getTester().assertRenderedPage(Login.class);
 
         UTILITY_UI.getTester().clickLink("self-pwd-reset");
+
+        UTILITY_UI.getTester().assertRenderedPage(SelfPasswordReset.class);
+
+        UTILITY_UI.getTester().assertComponent(pwdResetForm + 
":selfPwdResetPanel:username", TextField.class);
+        UTILITY_UI.getTester().assertComponent(pwdResetForm + 
":selfPwdResetPanel:securityQuestion", TextField.class);
+
+        FormTester formTester = 
UTILITY_UI.getTester().newFormTester(pwdResetForm);
+        Assertions.assertNotNull(formTester);
+        // 1. set username to selfpwdreset
+        formTester.setValue(UTILITY_UI.findComponentById(pwdResetForm + 
":selfPwdResetPanel", "username"),
+                "selfpwdreset");
+        // 2. check that the question has been populated
+        UTILITY_UI.getTester().executeAjaxEvent(pwdResetForm + 
":selfPwdResetPanel:username", Constants.ON_BLUR);
+        UTILITY_UI.getTester().assertModelValue(pwdResetForm + 
":selfPwdResetPanel:securityQuestion", question.
+                getContent());
+        // 3. submit form and receive an error
+        formTester = UTILITY_UI.getTester().newFormTester(pwdResetForm);
+        Assertions.assertNotNull(formTester);
+        UTILITY_UI.getTester().executeAjaxEvent(pwdResetForm + 
":selfPwdResetPanel:submit", Constants.ON_CLICK);
+        UTILITY_UI.getTester().assertErrorMessages("InvalidSecurityAnswer []");
+        UTILITY_UI.getTester().cleanupFeedbackMessages();
+        // 3.1 set the correct answer
+        formTester = UTILITY_UI.getTester().newFormTester(pwdResetForm);
+        Assertions.assertNotNull(formTester);
+        UTILITY_UI.getTester().assertComponent(pwdResetForm + 
":selfPwdResetPanel:securityAnswer", TextField.class);
+        formTester.setValue("selfPwdResetPanel:securityAnswer", "ananswer");
+        UTILITY_UI.getTester().executeAjaxEvent(pwdResetForm + 
":selfPwdResetPanel:securityAnswer", Constants.ON_CHANGE);
+        UTILITY_UI.getTester().assertComponent(pwdResetForm + 
":selfPwdResetPanel:securityAnswer",
+                TextField.class);
+        // 4. submit form
+        UTILITY_UI.getTester().assertNoFeedbackMessage(0);
+        UTILITY_UI.getTester().assertNoErrorMessage();
+        UTILITY_UI.getTester().assertComponent(pwdResetForm + 
":selfPwdResetPanel:submit", Button.class);
+        UTILITY_UI.getTester().executeAjaxEvent(pwdResetForm + 
":selfPwdResetPanel:submit", Constants.ON_CLICK);
+        UTILITY_UI.getTester().assertRenderedPage(Login.class);
+        UTILITY_UI.getTester().assertComponent("login:username", 
TextField.class);
+
+        UTILITY_UI.getTester().cleanupFeedbackMessages();
+    }
+
+    @Test
+    public void mustChangePassword() {
+        UserTO mustchangepassword = userService.read("mustchangepassword");
+        userService.update(new UserUR.Builder(mustchangepassword.getKey())
+                .mustChangePassword(new BooleanReplacePatchItem.Builder()
+                        .operation(PatchOperation.ADD_REPLACE)
+                        .value(Boolean.TRUE).build()).build());
+
+        UTILITY_UI.getTester().startPage(Login.class);
+        doLogin("mustchangepassword", "password123");
+
+        UTILITY_UI.getTester().assertRenderedPage(MustChangePassword.class);
+
+        final String changePwdForm = "changePassword";
+        UTILITY_UI.getTester().assertComponent(changePwdForm + ":username", 
TextField.class);
+        UTILITY_UI.getTester().assertComponent(changePwdForm + 
":password:passwordField", PasswordTextField.class);
+        UTILITY_UI.getTester().
+                assertComponent(changePwdForm + 
":confirmPassword:passwordField", PasswordTextField.class);
+        UTILITY_UI.getTester().assertModelValue(changePwdForm + ":username", 
"mustchangepassword");
+
+        FormTester formTester = 
UTILITY_UI.getTester().newFormTester(changePwdForm);
+
+        Assertions.assertNotNull(formTester);
+        // 1. set new password
+        formTester.setValue(UTILITY_UI.findComponentById(changePwdForm + 
":password", "passwordField"), "password124");
+        // 2. confirm password
+        formTester.setValue(UTILITY_UI.findComponentById(changePwdForm + 
":confirmPassword", "passwordField"),
+                "password124");
+        // 3. submit form
+        UTILITY_UI.getTester().executeAjaxEvent(changePwdForm + ":submit", 
Constants.ON_CLICK);
+
+        UTILITY_UI.getTester().assertRenderedPage(Login.class);
+        UTILITY_UI.getTester().assertComponent("login:username", 
TextField.class);
+
+        UTILITY_UI.getTester().cleanupFeedbackMessages();
+
+        doLogin("mustchangepassword", "password124");
+        UTILITY_UI.getTester().assertComponent(WIZARD_FORM + 
":view:username:textField", TextField.class);
     }
 
     @Test
     public void selfUpdate() {
-        String username = "puccini";
-        String newEmail = "giacomo.pucc...@email.com";
+        String username = "selfupdate";
+        String newEmail = "selfupd...@email.com";
 
         UTILITY_UI.getTester().startPage(Login.class);
-        doLogin(username, "password");
+        doLogin(username, "password123");
 
         UTILITY_UI.getTester().assertComponent(WIZARD_FORM + 
":view:username:textField", TextField.class);
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
@@ -142,22 +252,29 @@ public class SelfRegistrationITCase extends 
AbstractEnduserITCase {
                 TextField.class);
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
 
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:6:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"fullname").getPageRelativePath()
+                + ":textField",
                 TextField.class);
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:12:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"surname").getPageRelativePath()
+                + ":textField",
                 TextField.class);
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:14:panel:textField",
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", 
"userId").getPageRelativePath()
+                + ":textField",
                 TextField.class);
 
         FormTester formTester = 
UTILITY_UI.getTester().newFormTester(WIZARD_FORM);
-        assertNotNull(formTester);
-        UTILITY_UI.getTester().assertComponent(WIZARD_FORM
-                + 
":view:plainSchemas:tabs:0:body:content:schemas:4:panel:textField",
+        Assertions.assertNotNull(formTester);
+        
UTILITY_UI.getTester().assertComponent(UTILITY_UI.findComponentByMarkupId(
+                WIZARD_FORM + 
":view:plainSchemas:tabs:0:body:content:schemas", "email").getPageRelativePath()
+                + ":textField",
                 TextField.class);
-        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:4:panel:textField",
 newEmail);
+        formTester.setValue(UTILITY_UI.findComponentByMarkupId(WIZARD_FORM
+                + ":view:plainSchemas:tabs:0:body:content:schemas",
+                "email").getPageRelativePath().replace(WIZARD_FORM + ":", 
StringUtils.EMPTY) + ":textField",
+                newEmail);
 
         UTILITY_UI.getTester().executeAjaxEvent(WIZARD_FORM + ":buttons:next", 
Constants.ON_CLICK);
 
@@ -181,13 +298,10 @@ public class SelfRegistrationITCase extends 
AbstractEnduserITCase {
         UTILITY_UI.getTester().assertRenderedPage(Login.class);
         UTILITY_UI.getTester().assertComponent("login:username", 
TextField.class);
 
-        
assertTrue(userService.read(username).getPlainAttr("email").get().getValues().get(0).equals(newEmail));
+        Assertions.assertEquals("active", 
userService.read(username).getStatus());
+        Assertions.assertEquals(newEmail, 
userService.read(username).getPlainAttr("email").get().getValues().get(0));
 
         UTILITY_UI.getTester().cleanupFeedbackMessages();
     }
 
-    @Test
-    public void mustChangePassword() {
-
-    }
 }
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/ui/UtilityUIT.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/ui/UtilityUIT.java
index 93dea13..342d0c6 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/ui/UtilityUIT.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/ui/UtilityUIT.java
@@ -83,6 +83,16 @@ public class UtilityUIT {
                     }
                 });
     }
+    
+    public Component findComponentByMarkupId(final String searchPath, final 
String markupId) {
+        Component component = 
tester.getComponentFromLastRenderedPage(searchPath);
+        return (component instanceof MarkupContainer ? 
MarkupContainer.class.cast(component) : component.getPage()).
+                visitChildren(Component.class, (final Component object, final 
IVisit<Component> visit) -> {
+                    if (object.getMarkupId().equals(markupId)) {
+                        visit.stop(object);
+                    }
+                });
+    }
 
     public void closeCallBack(final Component modal) {
         modal.getBehaviors().stream().

Reply via email to