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);
+                       }
+               }
+       }
+}

Reply via email to