Repository: openmeetings Updated Branches: refs/heads/master ddf8ea1bb -> 19024cd88
[OPENMEETINGS-1714] more issues are fixed Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/19024cd8 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/19024cd8 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/19024cd8 Branch: refs/heads/master Commit: 19024cd889da281715813557ebcb67bae83aa0cc Parents: ddf8ea1 Author: Maxim Solodovnik <[email protected]> Authored: Wed Oct 4 12:05:24 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Wed Oct 4 12:05:24 2017 +0700 ---------------------------------------------------------------------- .../db/dao/basic/ConfigurationDao.java | 18 +- .../apache/openmeetings/web/app/WebSession.java | 14 +- .../openmeetings/web/pages/ResetPage.java | 2 +- .../web/pages/auth/ForgetPasswordDialog.java | 6 +- .../web/pages/auth/RegisterDialog.java | 9 +- .../openmeetings/web/pages/auth/SignInPage.java | 14 +- .../openmeetings/AbstractJUnitDefaults.java | 16 +- .../apache/openmeetings/web/TestLoginUI.java | 87 -------- .../web/pages/auth/TestLoginUI.java | 211 +++++++++++++++++++ 9 files changed, 248 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java index e050978..4447fa3 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java @@ -129,14 +129,18 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> { /** * Retrieves Configuration regardless of its deleted status * - * @param confKey - * @return + * @param key + * @return correspondent {@link Configuration} or null */ - public Configuration forceGet(String confKey) { + public Configuration forceGet(String key) { try { List<Configuration> list = em.createNamedQuery("forceGetConfigurationByKey", Configuration.class) - .setParameter("key", confKey).getResultList(); - return list.isEmpty() ? null : list.get(0); + .setParameter("key", key).getResultList(); + if (list.isEmpty()) { + return null; + } + Configuration c = list.get(0); + return c.getKey().equals(key) ? c : null; } catch (Exception e) { log.error("[forceGet]: ", e); } @@ -284,9 +288,7 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> { entity.setDeleted(deleted); em.persist(entity); } else { - if (userId != null) { - entity.setUser(userDao.get(userId)); - } + entity.setUser(userDao.get(userId)); entity.setDeleted(deleted); entity.setUpdated(new Date()); entity = em.merge(entity); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java index 269d102..9d1a2d7 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java @@ -40,7 +40,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; -import java.util.Locale; import java.util.Set; import java.util.TimeZone; @@ -105,7 +104,6 @@ public class WebSession extends AbstractAuthenticatedWebSession implements IWebS private FastDateFormat ISO8601FORMAT = null; private FastDateFormat sdf = null; private UserDashboard dashboard; - private Locale browserLocale = null; private Invitation i = null; private SOAPLogin soap = null; private Long roomId = null; @@ -116,7 +114,6 @@ public class WebSession extends AbstractAuthenticatedWebSession implements IWebS public WebSession(Request request) { super(request); - browserLocale = getLocale(); } @Override @@ -135,7 +132,6 @@ public class WebSession extends AbstractAuthenticatedWebSession implements IWebS externalType = null; tz = null; browserTz = null; - browserLocale = null; extProps = new ExtendedClientProperties(); } @@ -443,12 +439,8 @@ public class WebSession extends AbstractAuthenticatedWebSession implements IWebS return d; } - public Locale getBrowserLocale(){ - return browserLocale; - } - - public Long getLanguageByBrowserLocale() { - return getBean(IUserManager.class).getLanguage(getBrowserLocale()); + public Long getLanguageByLocale() { + return getBean(IUserManager.class).getLanguage(getLocale()); } public String getClientTZCode() { @@ -470,7 +462,7 @@ public class WebSession extends AbstractAuthenticatedWebSession implements IWebS //no-op } if (browserTz == null) { - _zone = Calendar.getInstance(getBrowserLocale()).getTimeZone(); + _zone = Calendar.getInstance(getLocale()).getTimeZone(); } } return _zone == null ? null : _zone.getID(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java index 727c972..1b3d8af 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/ResetPage.java @@ -26,7 +26,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters; public class ResetPage extends BaseNotInitedPage { private static final long serialVersionUID = 1L; - private static final String RESET_PARAM = "hash"; + public static final String RESET_PARAM = "hash"; public ResetPage(PageParameters pp) { String resetHash = pp.get(RESET_PARAM).toString(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java index 255ca49..ef6abfe 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java @@ -91,8 +91,8 @@ public class ForgetPasswordDialog extends AbstractFormDialog<String> { add(label.setOutputMarkupId(true)); add(name.setOutputMarkupId(true)); add(captcha); - add(rg.add(new Radio<>("email", Model.of(Type.email)).setOutputMarkupId(true)) - .add(new Radio<>("login", Model.of(Type.login)).setOutputMarkupId(true)) + add(rg.add(new Radio<>("email", Model.of(Type.email))) + .add(new Radio<>("login", Model.of(Type.login))) .setOutputMarkupId(true)); rg.add(new AjaxFormChoiceComponentUpdatingBehavior() { private static final long serialVersionUID = 1L; @@ -123,7 +123,7 @@ public class ForgetPasswordDialog extends AbstractFormDialog<String> { String n = name.getConvertedInput(); if (n != null) { IValidatable<String> val = new Validatable<>(n); - Type type = rg.getModelObject(); + Type type = rg.getConvertedInput(); if (type == Type.email) { emailValidator.validate(val); if (!val.isValid()) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java index e43e78d..4e8c548 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java @@ -22,6 +22,7 @@ import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength; import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_EMAIL_AT_REGISTER; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_EMAIL_VERIFICATION; import static org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; import static org.apache.wicket.validation.validator.StringValidator.minimumLength; @@ -37,7 +38,6 @@ import org.apache.openmeetings.db.dao.user.IUserManager; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.user.Address; import org.apache.openmeetings.db.entity.user.User; -import org.apache.openmeetings.util.OpenmeetingsVariables; import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.Captcha; @@ -135,8 +135,8 @@ public class RegisterDialog extends NonClosableDialog<String> { password = null; form.confirmPassword.setModelObject(null); email = null; - lang = WebSession.get().getLanguageByBrowserLocale(); - country = WebSession.get().getBrowserLocale().getCountry(); + lang = WebSession.get().getLanguageByLocale(); + country = WebSession.get().getLocale().getCountry(); captcha.refresh(handler); } @@ -145,8 +145,7 @@ public class RegisterDialog extends NonClosableDialog<String> { ConfigurationDao cfgDao = getBean(ConfigurationDao.class); String baseURL = cfgDao.getBaseUrl(); sendEmailAtRegister = cfgDao.getBool(CONFIG_EMAIL_AT_REGISTER, false); - sendConfirmation = !Strings.isEmpty(baseURL) - && cfgDao.getBool(OpenmeetingsVariables.CONFIG_EMAIL_VERIFICATION, false); + sendConfirmation = !Strings.isEmpty(baseURL) && cfgDao.getBool(CONFIG_EMAIL_VERIFICATION, false); String messageCode = "account.created"; if (sendConfirmation && sendEmailAtRegister) { messageCode = "warn.notverified"; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java index 9a26abc..d345a12 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java @@ -58,7 +58,6 @@ import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.pages.BaseInitedPage; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.request.IRequestParameters; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.flow.RedirectToUrlException; @@ -83,6 +82,10 @@ public class SignInPage extends BaseInitedPage { return !getBean(OAuth2Dao.class).getActive().isEmpty(); } + public SignInPage() { + this(new PageParameters()); + } + public SignInPage(PageParameters p) { super(); StringValue oauthid = p.get("oauthid"); @@ -141,15 +144,6 @@ public class SignInPage extends BaseInitedPage { r.setVisible(allowRegister()), f, m.setVisible(WebSession.get().isKickedByAdmin())); } - public SignInPage() { - this(new PageParameters()); - } - - @Override - public void renderHead(IHeaderResponse response) { - super.renderHead(response); - } - @Override protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget arg1) { WebSession.get().setArea(getUrlFragment(params)); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java index 29f7580..76adff4 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java @@ -48,7 +48,7 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest { protected static final String adminUsername = "admin"; protected static final String regularUsername = "user"; protected static final String groupAdminUsername = "groupAdmin"; - protected static final String userpass = "12345"; + protected static final String userpass = "Q!w2e3r4t5"; private static final String group = "smoketest"; private static final String timeZone = "Europe/Berlin"; private static final String email = "[email protected]"; @@ -56,7 +56,7 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest { @Autowired private AppointmentDao appointmentDao; @Autowired - private UserDao userDao; + protected UserDao userDao; @Autowired private GroupDao groupDao; @Autowired @@ -146,6 +146,14 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest { return getUser(UUID.randomUUID().toString()); } + protected static String getLogin(String uid) { + return String.format("login%s", uid); + } + + protected static String getEmail(String uid) { + return String.format("email%s@local", uid); + } + protected String createPass() { return "pass1_!@#$%_A"; } @@ -155,9 +163,9 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest { // add user u.setFirstname("firstname" + uuid); u.setLastname("lastname" + uuid); - u.setLogin("login" + uuid); + u.setLogin(getLogin(uuid)); u.setAddress(new Address()); - u.getAddress().setEmail(String.format("email%s@local", uuid)); + u.getAddress().setEmail(getEmail(uuid)); u.setRights(UserDao.getDefaultRights()); u.setTimeZoneId("Asia/Bangkok"); u.updatePassword(cfgDao, createPass()); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestLoginUI.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestLoginUI.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestLoginUI.java deleted file mode 100644 index 5be474c..0000000 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestLoginUI.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.web; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.apache.openmeetings.AbstractWicketTester; -import org.apache.openmeetings.web.app.WebSession; -import org.apache.openmeetings.web.pages.MainPage; -import org.apache.openmeetings.web.pages.auth.SignInPage; -import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter; -import org.apache.wicket.feedback.FeedbackMessage; -import org.apache.wicket.util.tester.FormTester; -import org.junit.Test; - -import com.googlecode.wicket.jquery.ui.widget.dialog.ButtonAjaxBehavior; - -public class TestLoginUI extends AbstractWicketTester { - @Test - public void testValidLogin() { - tester.startPage(MainPage.class); - tester.assertRenderedPage(SignInPage.class); - - FormTester formTester = tester.newFormTester("signin:signin"); - formTester.setValue("login", adminUsername); - formTester.setValue("pass", userpass); - formTester.submit("submit"); - - tester.assertNoErrorMessage(); - tester.assertRenderedPage(MainPage.class); - WebSession ws = (WebSession)tester.getSession(); - assertTrue("Login should be successful", ws.isSignedIn()); - } - - @Test - public void testEmptyLogin() { - tester.startPage(SignInPage.class); - tester.assertRenderedPage(SignInPage.class); - - FormTester formTester = tester.newFormTester("signin:signin"); - formTester.submit("submit"); - - assertEquals("There should be exactly 2 errors", 2, - tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); - } - - @Test - public void testEmptyRegister() { - tester.startPage(SignInPage.class); - tester.assertRenderedPage(SignInPage.class); - - ButtonAjaxBehavior b = getButtonBehavior("signin", "register"); - tester.executeBehavior(b); - FormTester formTester = tester.newFormTester("register:form"); - formTester.submit("submit"); - assertEquals("There should be exactly 8 errors", 8, - tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); - } - - @Test - public void testEmptyForget() { - tester.startPage(SignInPage.class); - tester.assertRenderedPage(SignInPage.class); - tester.clickLink("signin:signin:forget"); - FormTester formTester = tester.newFormTester("forget:form"); - formTester.submit("submit"); - assertEquals("There should be exactly 2 errors", 2, - tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); - } -} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/19024cd8/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java new file mode 100644 index 0000000..b944a9a --- /dev/null +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.pages.auth; + +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_EMAIL_AT_REGISTER; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_EMAIL_VERIFICATION; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Locale; +import java.util.Random; +import java.util.UUID; + +import org.apache.openmeetings.AbstractWicketTester; +import org.apache.openmeetings.db.entity.basic.Configuration; +import org.apache.openmeetings.db.entity.user.User; +import org.apache.openmeetings.web.app.Application; +import org.apache.openmeetings.web.app.WebSession; +import org.apache.openmeetings.web.pages.ActivatePage; +import org.apache.openmeetings.web.pages.MainPage; +import org.apache.openmeetings.web.pages.ResetPage; +import org.apache.wicket.extensions.markup.html.captcha.CaptchaImageResource; +import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter; +import org.apache.wicket.feedback.FeedbackMessage; +import org.apache.wicket.markup.html.image.Image; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.request.resource.IResource.Attributes; +import org.apache.wicket.util.tester.FormTester; +import org.junit.Test; + +import com.googlecode.wicket.jquery.ui.widget.dialog.ButtonAjaxBehavior; + +public class TestLoginUI extends AbstractWicketTester { + private final static String PATH_REGISTER = "register:form"; + + private void checkLogin(String login, String pass) { + FormTester formTester = tester.newFormTester("signin:signin"); + formTester.setValue("login", login); + formTester.setValue("pass", pass); + formTester.submit("submit"); + + tester.assertNoErrorMessage(); + tester.assertRenderedPage(MainPage.class); + WebSession ws = (WebSession)tester.getSession(); + assertTrue("Login should be successful", ws.isSignedIn()); + } + + @Test + public void testValidLogin() { + tester.startPage(MainPage.class); + tester.assertRenderedPage(SignInPage.class); + + checkLogin(adminUsername, userpass); + } + + @Test + public void testEmptyLogin() { + tester.startPage(SignInPage.class); + tester.assertRenderedPage(SignInPage.class); + + FormTester formTester = tester.newFormTester("signin:signin"); + formTester.submit("submit"); + + assertEquals("There should be exactly 2 errors", 2, + tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); + } + + private FormTester showRegister() { + tester.startPage(SignInPage.class); + tester.assertRenderedPage(SignInPage.class); + + ButtonAjaxBehavior b = getButtonBehavior("signin", "register"); + tester.executeBehavior(b); + return tester.newFormTester(PATH_REGISTER); + } + + @Test + public void testEmptyRegister() { + FormTester formTester = showRegister(); + formTester.submit("submit"); + assertEquals("There should be exactly 8 errors", 8, + tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); + } + + private FormTester showForget() { + tester.startPage(SignInPage.class); + tester.assertRenderedPage(SignInPage.class); + tester.clickLink("signin:signin:forget"); + return tester.newFormTester("forget:form"); + } + + @Test + public void testEmptyForget() { + FormTester formTester = showForget(); + formTester.submit("submit"); + assertEquals("There should be exactly 2 errors", 2, + tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); + } + + private String getCaptcha(String path) throws ReflectiveOperationException, SecurityException { + // hacks with reflection + Image captchaImg = (Image)tester.getComponentFromLastRenderedPage(path); + Method m1 = Image.class.getDeclaredMethod("getImageResource"); + m1.setAccessible(true); + CaptchaImageResource captcha = (CaptchaImageResource)m1.invoke(captchaImg); + Method m2 = CaptchaImageResource.class.getDeclaredMethod("getImageData", Attributes.class); + m2.setAccessible(true); + m2.invoke(captcha, (Attributes)null); + return captcha.getChallengeId(); + } + + private void testRegister(String uid) throws ReflectiveOperationException, SecurityException { + ButtonAjaxBehavior b1 = getButtonBehavior("signin", "register"); + tester.executeBehavior(b1); + FormTester formTester = tester.newFormTester(PATH_REGISTER); + formTester.setValue("login", getLogin(uid)); + formTester.setValue("email", getEmail(uid)); + formTester.setValue("firstName", String.format("first%s", uid)); + formTester.setValue("lastName", String.format("last%s", uid)); + formTester.setValue("password", userpass); + formTester.setValue("confirmPassword", userpass); + formTester.setValue("captcha:captchaText", getCaptcha("register:form:captcha:captcha")); + formTester.submit("submit"); + assertEquals("There should be exactly 0 errors", 0, + tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); + tester.assertLabel("register:confirmRegistration:container:message", Application.getString("warn.notverified")); + ButtonAjaxBehavior b2 = getButtonBehavior("register:confirmRegistration", "OK"); + tester.executeBehavior(b2); + } + + // complex test + @Test + public void testCompleteRegister() throws ReflectiveOperationException, SecurityException { + // set activation properties + List<Configuration> cfgs = cfgDao.get(CONFIG_EMAIL_AT_REGISTER, CONFIG_EMAIL_VERIFICATION); + for (Configuration c : cfgs) { + c.setValueB(true); + cfgDao.update(c, null); + } + try { + tester.startPage(SignInPage.class); + tester.assertRenderedPage(SignInPage.class); + + String uid = UUID.randomUUID().toString(); + testRegister(uid); + + // activate + User u = userDao.getByLogin(getLogin(uid), User.Type.user, null); + assertNotNull(u); + assertFalse(u.getRights().contains(User.Right.Login)); + tester.startPage(ActivatePage.class, new PageParameters().add(ActivatePage.ACTIVATION_PARAM, u.getActivatehash())); + tester.assertRenderedPage(SignInPage.class); + + // check activated + u = userDao.getByLogin(getLogin(uid), User.Type.user, null); + assertNotNull(u); + assertNull(u.getActivatehash()); + assertTrue(u.getRights().contains(User.Right.Login)); + checkLogin(getEmail(uid), userpass); + tester.getSession().invalidateNow(); + + // forget by 'random' + tester.getSession().setLocale(Locale.GERMAN); + Random rnd = new Random(); + int type = rnd.nextInt(2); + FormTester forgetTester = showForget(); + forgetTester.select("type", type); + forgetTester.setValue("name", type == 0 ? getEmail(uid) : getLogin(uid)); + forgetTester.setValue("captcha:captchaText", getCaptcha("forget:form:captcha:captcha")); + forgetTester.submit("submit"); + assertEquals("There should be exactly 0 errors", 0, + tester.getFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)).size()); + tester.assertLabel("forget:confirmDialog:container:message", Application.getString("321")); + + // reset password + u = userDao.getByEmail(getEmail(uid)); + assertNotNull(u); + assertNotNull(u.getResethash()); + tester.startPage(ResetPage.class, new PageParameters().add(ResetPage.RESET_PARAM, u.getResethash())); + tester.assertRenderedPage(ResetPage.class); + + // check reset + } finally { + for (Configuration c : cfgs) { + c.setValueB(false); + cfgDao.update(c, null); + } + } + } +}
