[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/3dac8e2f
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/3dac8e2f
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/3dac8e2f

Branch: refs/heads/master
Commit: 3dac8e2feb36c1384bfb72afaca6dfd41646f20a
Parents: c08491a
Author: Maxim Solodovnik <[email protected]>
Authored: Sun Oct 1 12:43:14 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Sun Oct 1 12:43:14 2017 +0700

----------------------------------------------------------------------
 .../util/crypt/AbstractCryptTest.java           |   7 +
 .../openmeetings/util/crypt/TestSCrypt.java     |   1 +
 .../openmeetings/AbstractJUnitDefaults.java     | 194 ++++++++++++
 .../apache/openmeetings/AbstractSpringTest.java |  55 ++++
 .../openmeetings/AbstractWicketTester.java      |  75 +++++
 .../openmeetings/backup/TestOldBackups.java     | 124 ++++++++
 .../calendar/TestAppointmentAddAppointment.java | 149 +++++++++
 .../calendar/TestAppointmentSchedulerTask.java  |  50 +++
 .../TestDatabaseStructureAppointment.java       |  76 +++++
 ...tDatabaseStructureGetAppointmentByRange.java | 105 +++++++
 .../TestDatabaseStructureGetUserStart.java      |  44 +++
 .../TestDatabaseStructureMeetingMember.java     |  41 +++
 .../TestDatabaseStructureUsersSearch.java       |  49 +++
 .../calendar/TestGetAppointment.java            |  60 ++++
 .../openmeetings/calendar/TestOmCalendar.java   |  58 ++++
 .../calendar/TestSendIcalMessage.java           | 235 ++++++++++++++
 .../apache/openmeetings/config/TestConfig.java  |  74 +++++
 .../core/file/TestFileProcessor.java            |  58 ++++
 .../openmeetings/derby/PrepareSystemFiles.java  |  67 ++++
 .../openmeetings/domain/TestAddGroup.java       |  60 ++++
 .../domain/TestUserGroupAggregation.java        |  51 +++
 .../invitiation/TestInvitation.java             |  57 ++++
 .../selenium/AbstractTestDefaults.java          | 229 ++++++++++++++
 .../openmeetings/selenium/HeavyTests.java       |  23 ++
 .../openmeetings/selenium/SeleniumTests.java    |  23 ++
 .../openmeetings/selenium/SeleniumUtils.java    | 229 ++++++++++++++
 .../openmeetings/selenium/TestSignUp.java       | 128 ++++++++
 .../openmeetings/smoke/TestSmokeBasic.java      |  36 +++
 .../test/AbstractJUnitDefaults.java             | 194 ------------
 .../openmeetings/test/AbstractSpringTest.java   |  55 ----
 .../openmeetings/test/AbstractWicketTester.java |  75 -----
 .../test/backup/TestOldBackups.java             | 124 --------
 .../calendar/TestAppointmentAddAppointment.java | 149 ---------
 .../calendar/TestAppointmentSchedulerTask.java  |  50 ---
 .../TestDatabaseStructureAppointment.java       |  76 -----
 ...tDatabaseStructureGetAppointmentByRange.java | 105 -------
 .../TestDatabaseStructureGetUserStart.java      |  44 ---
 .../TestDatabaseStructureMeetingMember.java     |  41 ---
 .../TestDatabaseStructureUsersSearch.java       |  49 ---
 .../test/calendar/TestGetAppointment.java       |  60 ----
 .../test/calendar/TestOmCalendar.java           |  58 ----
 .../test/calendar/TestSendIcalMessage.java      | 235 --------------
 .../openmeetings/test/config/TestConfig.java    |  74 -----
 .../test/core/file/TestFileProcessor.java       |  58 ----
 .../test/derby/PrepareSystemFiles.java          |  67 ----
 .../openmeetings/test/domain/TestAddGroup.java  |  60 ----
 .../test/domain/TestUserGroupAggregation.java   |  51 ---
 .../test/invitiation/TestInvitation.java        |  57 ----
 .../test/selenium/AbstractTestDefaults.java     | 229 --------------
 .../openmeetings/test/selenium/HeavyTests.java  |  23 --
 .../test/selenium/SeleniumTests.java            |  23 --
 .../test/selenium/SeleniumUtils.java            | 229 --------------
 .../openmeetings/test/selenium/TestSignUp.java  | 128 --------
 .../openmeetings/test/smoke/TestSmokeBasic.java |  36 ---
 .../openmeetings/test/user/TestUserContact.java | 105 -------
 .../openmeetings/test/user/TestUserCount.java   |  58 ----
 .../openmeetings/test/user/TestUserGroup.java   | 132 --------
 .../openmeetings/test/userdata/TestAuth.java    |  44 ---
 .../openmeetings/test/userdata/TestLogin.java   |  45 ---
 .../openmeetings/test/util/TestStoredFile.java  |  42 ---
 .../apache/openmeetings/test/web/LoginUI.java   |  77 -----
 .../test/webservice/AbstractWebServiceTest.java | 186 -----------
 .../test/webservice/TestCalendarService.java    | 308 -------------------
 .../test/webservice/TestFileService.java        |  73 -----
 .../test/webservice/TestGroupService.java       |  67 ----
 .../test/webservice/TestRecordingService.java   |  73 -----
 .../test/webservice/TestRoomService.java        | 169 ----------
 .../test/webservice/TestUserService.java        | 113 -------
 .../test/webservice/TestWebConverters.java      |  61 ----
 .../openmeetings/user/TestUserContact.java      | 105 +++++++
 .../apache/openmeetings/user/TestUserCount.java |  58 ++++
 .../apache/openmeetings/user/TestUserGroup.java | 132 ++++++++
 .../apache/openmeetings/userdata/TestAuth.java  |  44 +++
 .../apache/openmeetings/userdata/TestLogin.java |  45 +++
 .../openmeetings/util/TestStoredFile.java       |  42 +++
 .../org/apache/openmeetings/web/LoginUI.java    |  77 +++++
 .../web/app/TestOmAuthenticationStrategy.java   |  33 ++
 .../webservice/AbstractWebServiceTest.java      | 186 +++++++++++
 .../webservice/TestCalendarService.java         | 308 +++++++++++++++++++
 .../webservice/TestFileService.java             |  73 +++++
 .../webservice/TestGroupService.java            |  67 ++++
 .../webservice/TestRecordingService.java        |  73 +++++
 .../webservice/TestRoomService.java             | 169 ++++++++++
 .../webservice/TestUserService.java             | 113 +++++++
 .../webservice/TestWebConverters.java           |  61 ++++
 pom.xml                                         |   8 +-
 86 files changed, 3948 insertions(+), 3907 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/AbstractCryptTest.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/AbstractCryptTest.java
 
b/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/AbstractCryptTest.java
index c641db4..3b8ccf4 100644
--- 
a/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/AbstractCryptTest.java
+++ 
b/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/AbstractCryptTest.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.util.crypt;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -39,6 +40,12 @@ public abstract class AbstractCryptTest {
                assertEquals("Hash for null should be null", null, hash);
 
                assertTrue("Hash for null should be null", crypt.verify(null, 
null));
+               assertFalse("Hash for null should be null", crypt.verify(null, 
"abc"));
+               assertFalse("Hash for null should NOT be null", 
crypt.verify("abc", null));
+
+               assertTrue("Hash for null should be null", crypt.fallback(null, 
null));
+               assertFalse("Hash for null should be null", 
crypt.fallback(null, "abc"));
+               assertFalse("Hash for null should NOT be null", 
crypt.fallback("abc", null));
        }
 
        private static List<String> get(int count) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestSCrypt.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestSCrypt.java
 
b/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestSCrypt.java
index 094d0b5..724817f 100644
--- 
a/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestSCrypt.java
+++ 
b/openmeetings-util/src/test/java/org/apache/openmeetings/util/crypt/TestSCrypt.java
@@ -40,5 +40,6 @@ public class TestSCrypt extends AbstractCryptTest {
                assertFalse("SHA256 is not valid hash", crypt.verify(TEST_PASS, 
SHA_HASH));
                assertTrue("MD5 is valid fallback", crypt.fallback(TEST_PASS, 
MD5_HASH));
                assertTrue("SHA256 is valid fallback", 
crypt.fallback(TEST_PASS, SHA_HASH));
+               assertFalse("Fallback can return false", 
crypt.fallback(TEST_PASS, "abc"));
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/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
new file mode 100644
index 0000000..5aebd72
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java
@@ -0,0 +1,194 @@
+/*
+ * 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;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getConfigKeyCryptClassName;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setWicketApplicationName;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Date;
+import java.util.UUID;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.junit.Before;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(AbstractJUnitDefaults.class);
+       public static final int ONE_HOUR = 60 * 60 * 1000;
+
+       protected static final String username = "admin";
+       protected static final String userpass = "12345";
+       private static final String group = "smoketest";
+       private static final String timeZone = "Europe/Berlin";
+       private static final String email = "[email protected]";
+
+       @Autowired
+       private AppointmentDao appointmentDao;
+       @Autowired
+       private UserDao userDao;
+       @Autowired
+       private ImportInitvalues importInitvalues;
+       @Autowired
+       protected ConfigurationDao cfgDao;
+
+       @Before
+       public void setUp() throws Exception {
+               setWicketApplicationName("openmeetings");
+               cfgDao.getCryptKey();
+               if (userDao.count() < 1) {
+                       makeDefaultScheme();
+                       log.info("Default scheme created successfully");
+               } else {
+                       log.info("Default scheme already created");
+               }
+               if (getConfigKeyCryptClassName() == null) {
+                       assertNotNull("Crypt class name should not be null", 
cfgDao.getCryptKey());
+               }
+       }
+
+       public Appointment getAppointment() {
+               Date start = new Date();
+               Date end = new Date();
+               end.setTime(start.getTime() + ONE_HOUR);
+               return getAppointment(start, end);
+       }
+
+       public Appointment getAppointment(Date start, Date end) {
+               return getAppointment(userDao.get(1L), start, end);
+       }
+
+       public Appointment getAppointment(User owner, Date start, Date end) {
+               return getAppointment(owner, null, start, end);
+       }
+
+       public Appointment getAppointment(User owner, Room r, Date start, Date 
end) {
+               assertNotNull("Can't access to appointment dao implimentation", 
appointmentDao);
+
+               // add new appointment
+               Appointment ap = new Appointment();
+
+               ap.setTitle("appointmentName");
+               ap.setLocation("appointmentLocation");
+
+               ap.setStart(start);
+               ap.setEnd(end);
+               ap.setDescription("appointmentDescription");
+               ap.setInserted(new Date());
+               ap.setDeleted(false);
+               ap.setIsDaily(false);
+               ap.setIsWeekly(false);
+               ap.setIsMonthly(false);
+               ap.setIsYearly(false);
+               ap.setPasswordProtected(false);
+
+               ap.setOwner(owner);
+               ap.setConnectedEvent(false);
+
+               if (ap.getReminder() == null) {
+                       ap.setReminder(Appointment.Reminder.none);
+               }
+
+               if (r == null) {
+                       r = new Room();
+                       r.setType(Room.Type.conference);
+                       r.setAppointment(true);
+               }
+               ap.setRoom(r);
+               return ap;
+       }
+
+       public Appointment createAppointment(Appointment ap) {
+               // add new appointment
+               ap = appointmentDao.update(ap, null, false);
+               assertNotNull("Cann't add appointment", ap.getId());
+               return ap;
+       }
+
+       public User getUser() throws Exception {
+               return getUser(UUID.randomUUID().toString());
+       }
+
+       protected String createPass() {
+               return "pass1_!@#$%_A";
+       }
+
+       public User getUser(String uuid) throws Exception {
+               User u = new User();
+               // add user
+               u.setFirstname("firstname" + uuid);
+               u.setLastname("lastname" + uuid);
+               u.setLogin("login" + uuid);
+               u.setAddress(new Address());
+               u.getAddress().setEmail(String.format("email%s@local", uuid));
+               u.setRights(UserDao.getDefaultRights());
+               u.setTimeZoneId("Asia/Bangkok");
+               u.updatePassword(cfgDao, createPass());
+               u.setLanguageId(1L);
+               return u;
+       }
+
+       public User createUser() throws Exception {
+               return createUser(UUID.randomUUID().toString());
+       }
+
+       public User createUser(String uuid) throws Exception {
+               return createUser(getUser(uuid));
+       }
+
+       public User createUser(User u) {
+               u = userDao.update(u, null);
+               assertNotNull("Can't add user", u);
+               return u;
+       }
+
+       private void makeDefaultScheme() throws Exception {
+               InstallationConfig cfg = new InstallationConfig();
+               cfg.setUsername(username);
+               cfg.setPassword(userpass);
+               cfg.setEmail(email);
+               cfg.setGroup(group);
+               cfg.setTimeZone(timeZone);
+               importInitvalues.loadAll(cfg, false);
+       }
+
+       public User getContact(String uuid, Long ownerId) {
+               return userDao.getContact("email" + uuid, "firstname" + uuid, 
"lastname" + uuid, ownerId);
+       }
+
+       public User createUserContact(Long ownerId) {
+               return 
createUserContact(getContact(UUID.randomUUID().toString(), ownerId), ownerId);
+       }
+
+       public User createUserContact(User user, Long ownerId) {
+               user = userDao.update(user, ownerId);
+               assertNotNull("Cann't add user", user);
+               return user;
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
new file mode 100644
index 0000000..d3d974c
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+import static org.junit.Assert.fail;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.tomcat.util.scan.Constants;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import 
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestExecutionListeners({})
+@ContextConfiguration(locations={"classpath:applicationContext.xml"}, 
inheritLocations = true)
+public abstract class AbstractSpringTest extends 
AbstractJUnit4SpringContextTests {
+
+       @BeforeClass
+       public static void init() {
+               setOmHome();
+               System.setProperty(Constants.SKIP_JARS_PROPERTY, "*");
+               LabelDao.initLanguageMap();
+               if (LabelDao.getLanguages().isEmpty()) {
+                       fail("Failed to set languages");
+               }
+       }
+
+       protected static void setOmHome() {
+               String webappsDir = System.getProperty("om.home", ".");
+               OmFileHelper.setOmHome(webappsDir);
+               if (!OmFileHelper.getOmHome().exists() || 
!OmFileHelper.getOmHome().isDirectory()) {
+                       fail("Invalid directory is specified as OM HOME: " + 
webappsDir);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
new file mode 100644
index 0000000..ec4b817
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
@@ -0,0 +1,75 @@
+/*
+ * 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;
+
+import static 
org.apache.openmeetings.db.util.ApplicationHelper.getWicketTester;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.tester.WicketTester;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.ButtonAjaxBehavior;
+
+public class AbstractWicketTester extends AbstractJUnitDefaults {
+       protected WicketTester tester;
+
+       @Override
+       public void setUp() throws Exception {
+               super.setUp();
+               tester = getWicketTester();
+               assertNotNull("Web session should not be null", 
WebSession.get());
+       }
+
+       public void login(String login, String password) {
+               WebSession s = WebSession.get();
+               try {
+                       if (login != null && password != null) {
+                               s.signIn(login, password, Type.user, null);
+                       } else {
+                               s.signIn(username, userpass, Type.user, null);
+                       }
+               } catch (OmException e) {
+                       fail(e.getMessage());
+               }
+               assertTrue("Web session is not signed in for user: " + (login 
!= null ? login : username), s.isSignedIn());
+       }
+
+       public <T extends Serializable> ButtonAjaxBehavior 
getButtonBehavior(String path, String name) {
+               Args.notNull(path, "path");
+               Args.notNull(name, "name");
+               @SuppressWarnings("unchecked")
+               AbstractDialog<T> dialog = 
(AbstractDialog<T>)tester.getComponentFromLastRenderedPage(path);
+               List<ButtonAjaxBehavior> bl = 
dialog.getBehaviors(ButtonAjaxBehavior.class);
+               for (ButtonAjaxBehavior bb : bl) {
+                       if (name.equals(bb.getButton().getName())) {
+                               return bb;
+                       }
+               }
+               return null;
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestOldBackups.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestOldBackups.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestOldBackups.java
new file mode 100644
index 0000000..45509b3
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestOldBackups.java
@@ -0,0 +1,124 @@
+/*
+ * 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.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomGroupDao;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.junit.After;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestOldBackups extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestOldBackups.class, getWebAppRootKey());
+
+       @Autowired
+       private BackupImport backupController;
+       @Autowired
+       private GroupDao groupDao;
+       @Autowired
+       private UserDao userDao;
+       @Autowired
+       private RoomDao roomDao;
+       @Autowired
+       private AppointmentDao appointmentDao;
+       @Autowired
+       private MeetingMemberDao meetingMemberDao;
+       @Autowired
+       private RoomGroupDao roomGroupDao;
+       private String cryptClass = null;
+
+       @Override
+       public void setUp() throws Exception {
+               super.setUp();
+               // Crypt class need to be preserved here to avoid overriding by 
backup import
+               cryptClass = cfgDao.getCryptKey();
+       }
+
+       @After
+       public void tearDown() {
+               Configuration cfg = cfgDao.get(CONFIG_CRYPT);
+               assertNotNull("Not null config should be returned", cfg);
+               cfg.setValue(cryptClass);
+               cfgDao.update(cfg, null);
+       }
+
+       @Test
+       public void importOldVersions() {
+               String backupsDir = System.getProperty("backups.dir", ".");
+               File backupsHome = new File(backupsDir);
+
+               if (!backupsHome.exists() || !backupsHome.isDirectory()) {
+                       fail("Invalid directory is specified for backup files: 
" + backupsDir);
+               }
+               long groupCount = 0;
+               long userCount = 0;
+               long roomCount = 0;
+               long roomGroupCount = 0;
+               long apptCount = 0;
+               long meetingMembersCount = 0;
+               for (File backup : backupsHome.listFiles()) {
+                       String name = backup.getName();
+                       log.debug("Import of backup file : '" + name + "' is 
started ...");
+                       try (InputStream is = new FileInputStream(backup)) {
+                               backupController.performImport(is);
+                               long newGroupCount = groupDao.count();
+                               long newUserCount = userDao.count();
+                               long newRoomCount = roomDao.count();
+                               long newRoomGroupCount = 
roomGroupDao.get().size();
+                               long newApptCount = appointmentDao.get().size();
+                               long newMeetingMembersCount = 
meetingMemberDao.getMeetingMembers().size();
+                               assertTrue("Zero groups were imported from " + 
name, newGroupCount > groupCount);
+                               assertTrue("Zero users were imported from " + 
name, newUserCount > userCount);
+                               assertTrue("Zero rooms were imported from " + 
name, newRoomCount > roomCount);
+                               assertTrue("Zero room groups were imported from 
" + name, newRoomGroupCount > roomGroupCount);
+                               assertTrue("Zero appointments were imported 
from " + name, newApptCount > apptCount);
+                               assertTrue("Zero meeting members were imported 
from " + name, newMeetingMembersCount > meetingMembersCount);
+
+                               groupCount = newGroupCount;
+                               userCount = newUserCount;
+                               roomCount = newRoomCount;
+                               roomGroupCount = newRoomGroupCount;
+                               apptCount = newApptCount;
+                               meetingMembersCount = newMeetingMembersCount;
+                       } catch (Exception e) {
+                               throw new RuntimeException("Unexpected 
exception while importing backup: " + name, e);
+                       }
+                       log.debug("... Done.");
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
new file mode 100644
index 0000000..6339b9c
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
@@ -0,0 +1,149 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.UUID;
+
+import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.service.calendar.AppointmentLogic;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.util.string.StringValue;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAppointmentAddAppointment extends AbstractWicketTester {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestAppointmentAddAppointment.class, 
getWebAppRootKey());
+
+       @Autowired
+       private AppointmentLogic appointmentLogic;
+       @Autowired
+       private AppointmentDao appointmentDao;
+       @Autowired
+       private UserDao userDao;
+
+       private static void setTime(Appointment a) {
+               
a.setStart(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()));
+               
a.setEnd(Date.from(LocalDateTime.now().plusHours(1).atZone(ZoneId.systemDefault()).toInstant()));
+       }
+
+       @Test
+       public void saveAppointment() throws Exception {
+               log.debug("- saveAppointment");
+
+               Calendar start = Calendar.getInstance();
+               start.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+               Calendar end = Calendar.getInstance();
+               end.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+               String appointmentName = "Test 01";
+               String appointmentDescription = "Descr";
+               Long userId = 1L;
+               String appointmentLocation = "office";
+               Boolean isMonthly = false;
+               Boolean isDaily = false;
+               Boolean isWeekly = false;
+               String remind = Appointment.Reminder.ical.name();
+               Boolean isYearly = false;
+               String[] mmClient = new String[1];
+               for (int i = 0; i < 1; i++) {
+                       mmClient[0] = createClientObj("firstname" + i, 
"lastname" + i,
+                                       "first" + i + ".last" + i + 
"@webbase-design.de", "Etc/GMT+1");
+               }
+               Long languageId = 1L;
+               Long roomType = 1L;
+
+               Appointment a = appointmentLogic.getAppointment(appointmentName,
+                               appointmentLocation, appointmentDescription,
+                               start, end, isDaily, isWeekly,
+                               isMonthly, isYearly, remind, mmClient,
+                               roomType, languageId, false, "", -1, userId);
+               a = appointmentDao.update(a, userId);
+
+               Thread.sleep(3000);
+
+               appointmentLogic.doScheduledMeetingReminder();
+
+               Thread.sleep(3000);
+
+               assertNotNull("Saved appointment should have valid id: " + 
a.getId(), a.getId());
+       }
+
+       @Test
+       public void testCreate() {
+               Appointment a = new Appointment();
+               a.setTitle("Test title");
+               setTime(a);
+               a.setReminder(Reminder.ical);
+               a.setMeetingMembers(new ArrayList<>());
+               User owner = userDao.get(1L);
+               a.setOwner(owner);
+               a.setRoom(new Room());
+               a.getRoom().setAppointment(true);
+               a.getRoom().setType(Room.Type.conference);
+               for (int i = 0; i < 3; ++i) {
+                       MeetingMember mm = new MeetingMember();
+                       mm.setUser(getContact(UUID.randomUUID().toString(), 
owner.getId()));
+                       a.getMeetingMembers().add(mm);
+               }
+               a = appointmentDao.update(a, owner.getId());
+               assertNotNull("Saved appointment should have valid id: " + 
a.getId(), a.getId());
+               assertEquals("Saved appointment should have corect count of 
guests: ", 3, a.getMeetingMembers().size());
+               for (MeetingMember mm : a.getMeetingMembers()) {
+                       assertNotNull("Saved guest should have valid id: ", 
mm.getId());
+                       assertNotNull("Saved guest should have valid 
invitation: ", mm.getInvitation());
+                       assertNotNull("Saved guest should have invitation with 
ID: ", mm.getInvitation().getId());
+               }
+
+               WebSession ws = WebSession.get();
+               Appointment a1 = appointmentDao.get(a.getId());
+               ws.checkHashes(StringValue.valueOf(""), 
StringValue.valueOf(a1.getMeetingMembers().get(0).getInvitation().getHash()));
+               assertTrue("Login via secure hash should be successful", 
ws.isSignedIn());
+       }
+
+       private static String createClientObj(String firstname, String 
lastname, String email, String jNameTimeZone) {
+               StringBuilder sb = new StringBuilder();
+               sb.append(",") //memberId
+                       .append(firstname).append(",")
+                       .append(lastname).append(",")
+                       .append(email).append(",")
+                       .append(",") //userId
+                       .append(jNameTimeZone);
+               return sb.toString();
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
new file mode 100644
index 0000000..b28d254
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
@@ -0,0 +1,50 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.service.calendar.AppointmentLogic;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAppointmentSchedulerTask extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestAppointmentSchedulerTask.class, 
getWebAppRootKey());
+
+       @Autowired
+       private AppointmentLogic appointmentLogic;
+
+       @Test
+       public void doIt() {
+               log.debug("- 1 MeetingReminderJob.execute");
+               log.warn("- 2 MeetingReminderJob.execute");
+               try {
+                       appointmentLogic.doScheduledMeetingReminder();
+
+                       assertTrue(true);
+               } catch (Exception err){
+                       log.error("execute",err);
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
new file mode 100644
index 0000000..3cb9daf
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
@@ -0,0 +1,76 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureAppointment extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestDatabaseStructureAppointment.class, 
getWebAppRootKey());
+
+       @Autowired
+       private AppointmentDao appointmentDao;
+
+       @Test
+       public void testAddingGroup() {
+               try {
+                       Calendar cal = Calendar.getInstance();
+                       cal.set(2008, 9, 2);
+                       cal.get(Calendar.DAY_OF_MONTH);
+                       cal.getTime();
+
+                       SimpleDateFormat format = new 
SimpleDateFormat("yyyy-MM-dd");
+                       Date date = format.parse("2008-17-08");
+                       Date date2 = format.parse("2008-18-08");
+
+                       List<Appointment> listAppoints = 
appointmentDao.getInRange(1L, date, date2);
+                       // List<Appointment> listAppoints = 
appointmentDao.searchAppointmentsByName("%");
+                       // appointmentDao.getNextAppointmentById(1L);
+                       // appointmentDao.addAppointment("mezo", 1L, 
"Pforzheim", "zweiter", Calendar.getInstance().getTime(),
+                       //              date, null, true, null, null, 1L,1L);
+                       // appointmentDao.addAppointment("testap", "erster 
Test",Calendar.getInstance().getTime(),
+                       //              Calendar.getInstance().getTime(), true, 
false, false, false, new Long(1), 1L);
+                       log.debug("Anzahl: " + listAppoints.size());
+
+                       for (Appointment appoints : listAppoints) {
+                               log.debug("Termin: " + appoints.getTitle() + " 
startDate: " + appoints.getStart() + " endDate: " + appoints.getEnd());
+                               log.debug("MeetingMembers: " + 
appoints.getMeetingMembers().size());
+                       }
+
+                       for (Iterator<Appointment> iter = 
listAppoints.iterator(); iter.hasNext();) {
+                               log.debug("" + iter.next());
+                       }
+               } catch (Exception err) {
+                       log.error("[testAddingGroup]", err);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
new file mode 100644
index 0000000..ceacb41
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
@@ -0,0 +1,105 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetAppointmentByRange extends 
AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestDatabaseStructureGetAppointmentByRange.class, 
getWebAppRootKey());
+
+       @Autowired
+       private AppointmentDao appointmentDao;
+
+       @Test
+       public void test() {
+               log.debug("Test started");
+               Long userId = 1L;
+
+               Calendar now = Calendar.getInstance();
+               Calendar rangeStart = Calendar.getInstance();
+               rangeStart.setTime(now.getTime());
+               rangeStart.add(Calendar.DATE, -1);
+               Calendar rangeEnd = Calendar.getInstance();
+               rangeEnd.add(Calendar.DATE, 1);
+               rangeEnd.setTime(now.getTime());
+
+               Calendar a1End = Calendar.getInstance();
+               a1End.setTime(now.getTime());
+               a1End.add(Calendar.HOUR_OF_DAY, 1);
+               Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+               a1.setTitle("AppointmentByRange_a1");
+
+               Appointment a2 = getAppointment(now.getTime(), a1End.getTime());
+               a2.setTitle("AppointmentByRange_a2");
+               a2.setMeetingMembers(new ArrayList<MeetingMember>());
+               MeetingMember mm1 = new MeetingMember();
+               mm1.setUser(createUserContact(userId));
+               mm1.setAppointment(a2);
+               a2.getMeetingMembers().add(mm1);
+
+               Appointment a3 = getAppointment(now.getTime(), a1End.getTime());
+               a3.setTitle("AppointmentByRange_a3");
+               a3.setMeetingMembers(new ArrayList<MeetingMember>());
+               MeetingMember mm2 = new MeetingMember();
+               mm2.setUser(createUserContact(userId));
+               mm2.setAppointment(a3);
+               a3.getMeetingMembers().add(mm2);
+               MeetingMember mm3 = new MeetingMember();
+               mm3.setUser(createUserContact(userId));
+               mm3.setAppointment(a3);
+               a3.getMeetingMembers().add(mm3);
+
+               a1 = appointmentDao.update(a1, userId);
+               a2 = appointmentDao.update(a2, userId);
+               a3 = appointmentDao.update(a3, userId);
+
+               int a1found = 0, a2found = 0, a3found = 0;
+               for (Appointment a : appointmentDao.getInRange(userId, 
rangeStart.getTime(), rangeEnd.getTime())) {
+                       int mmCount = a.getMeetingMembers() == null ? 0 : 
a.getMeetingMembers().size();
+                       if (a.getId().equals(a1.getId())) {
+                               assertEquals("Inapropriate MeetingMembers 
count", 0, mmCount);
+                               a1found++;
+                       }
+                       if (a.getId().equals(a2.getId())) {
+                               assertEquals("Inapropriate MeetingMembers 
count", 1, mmCount);
+                               a2found++;
+                       }
+                       if (a.getId().equals(a3.getId())) {
+                               assertEquals("Inapropriate MeetingMembers 
count", 2, mmCount);
+                               a3found++;
+                       }
+               }
+               assertEquals("Inappropriate count of appointments without 
members found", 1, a1found);
+               assertEquals("Inappropriate count of appointments with 1 member 
found", 1, a2found);
+               assertEquals("Inappropriate count of appointments with 2 
members found", 1, a3found);
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
new file mode 100644
index 0000000..6c7b50c
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
@@ -0,0 +1,44 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetUserStart extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestDatabaseStructureGetUserStart.class, 
getWebAppRootKey());
+
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void testAddingGroup() {
+               try {
+                       userDao.get(new Long(1));
+               } catch (Exception err) {
+                       log.error("[testAddingGroup]", err);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
new file mode 100644
index 0000000..20d3d54
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
@@ -0,0 +1,41 @@
+/*
+ * 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.calendar;
+
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.junit.Test;
+
+
+public class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+
+       @Test
+       public void testUpdateMeetingMember(){
+               //FIXME need to be refactored !!!!
+
+               //MeetingMemberDaoImpl.getInstance().addMeetingMember("Adddd", 
"dir", "1", "2", 1L, 1L, "test");
+               
//MeetingMemberDaoImpl.getInstance().addMeetingMember(firstname, lastname, 
memberStatus, appointmentStatus, appointmentId, userid, email)
+
+
+               //MeetingMemberDaoImpl.getInstance().getMeetingMemberById(1L);
+               //MeetingMemberDaoImpl.getInstance().deleteMeetingMember(2L);
+
+               //meetingMemberDao.updateMeetingMember(1l,"bbbbbb", "dir", "1", 
"2", 1L, 1L, "test", "");
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureUsersSearch.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureUsersSearch.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureUsersSearch.java
new file mode 100644
index 0000000..cb6d228
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureUsersSearch.java
@@ -0,0 +1,49 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import java.util.List;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureUsersSearch extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestDatabaseStructureUsersSearch.class, 
getWebAppRootKey());
+
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void testAddingGroup(){
+               try {
+                        List<User> users = userDao.get("first", 0, 10, 
"lastname", false, 1L);
+                        log.debug("[result]" + users.size());
+                        log.debug("[records]"+ users);
+               } catch (Exception err) {
+                       log.error("[testAddingGroup]",err);
+               }
+       }
+}
+

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
new file mode 100644
index 0000000..3b907f6
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
@@ -0,0 +1,60 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Calendar;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestGetAppointment extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestGetAppointment.class, getWebAppRootKey());
+
+       @Autowired
+       private AppointmentDao appointmentDao;
+
+       @Test
+       public void getAppoinment() {
+               log.debug("getAppoinment enter");
+               Long userId = 1L;
+
+               Calendar now = Calendar.getInstance();
+               Calendar a1End = Calendar.getInstance();
+               a1End.setTime(now.getTime());
+               a1End.add(Calendar.HOUR_OF_DAY, 1);
+               Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+               a1.setTitle("GetAppointment");
+
+               a1 = appointmentDao.update(a1, userId);
+
+               Appointment a = appointmentDao.get(a1.getId());
+               assertNotNull("Failed to get Appointment By id", a);
+               assertEquals("Inapropriate MeetingMembers count", 0, 
a.getMeetingMembers() == null ? 0 : a.getMeetingMembers().size());
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
new file mode 100644
index 0000000..dbaf91c
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
@@ -0,0 +1,58 @@
+/*
+ * 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.calendar;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.apache.openmeetings.db.entity.user.User;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestOmCalendar extends AbstractJUnitDefaults {
+       @Autowired
+       private OmCalendarDao calendarDao;
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void saveCalendar() {
+               OmCalendar calendar = new OmCalendar();
+               Long userId = 1L;
+               User owner = userDao.get(userId);
+               String title = "Calendar Title", href = 
"http://caldav.example.com/principals/user";;
+
+               calendar.setOwner(owner);
+               calendar.setTitle(title);
+               calendar.setHref(href);
+               calendar.setSyncType(OmCalendar.SyncType.ETAG);
+
+               calendar = calendarDao.update(calendar);
+
+               assertTrue("Saved calendar should have valid id: " + 
calendar.getId(),
+                               calendar.getId() != null && calendar.getId() > 
0);
+
+               OmCalendar c = calendarDao.get(calendar.getId());
+               assertNotNull("Failed to find Calendar by id", c);
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
new file mode 100644
index 0000000..6c3c81b
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
@@ -0,0 +1,235 @@
+/*
+ * 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.calendar;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.core.mail.MailHandler;
+import org.apache.openmeetings.util.mail.ByteArrayDataSource;
+import org.apache.openmeetings.util.mail.IcalHandler;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import net.fortuna.ical4j.data.CalendarOutputter;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+
+public class TestSendIcalMessage extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestSendIcalMessage.class, getWebAppRootKey());
+
+       @Autowired
+       private MailHandler mailHandler;
+
+       private byte[] iCalMimeBody;
+
+       String subject = "test iCal";
+       String recipients = "[email protected]";
+       String htmlBody = "test";
+
+
+       public void simpleInvitionIcalLink() {
+               // Create a TimeZone
+               TimeZoneRegistry registry = 
TimeZoneRegistryFactory.getInstance().createRegistry();
+               TimeZone timezone = registry.getTimeZone("America/Mexico_City");
+               VTimeZone tz = timezone.getVTimeZone();
+
+               // Start Date is on: April 1, 2008, 9:00 am
+               java.util.Calendar startDate = new GregorianCalendar();
+               startDate.setTimeZone(timezone);
+               startDate.set(java.util.Calendar.MONTH, 
java.util.Calendar.APRIL);
+               startDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+               startDate.set(java.util.Calendar.YEAR, 2008);
+               startDate.set(java.util.Calendar.HOUR_OF_DAY, 9);
+               startDate.set(java.util.Calendar.MINUTE, 0);
+               startDate.set(java.util.Calendar.SECOND, 0);
+
+               // End Date is on: April 1, 2008, 13:00
+               java.util.Calendar endDate = new GregorianCalendar();
+               endDate.setTimeZone(timezone);
+               endDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
+               endDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+               endDate.set(java.util.Calendar.YEAR, 2008);
+               endDate.set(java.util.Calendar.HOUR_OF_DAY, 13);
+               endDate.set(java.util.Calendar.MINUTE, 0);
+               endDate.set(java.util.Calendar.SECOND, 0);
+
+               // Create the event
+               String eventName = "Progress Meeting";
+               DateTime start = new DateTime(startDate.getTime());
+               DateTime end = new DateTime(endDate.getTime());
+               VEvent meeting = new VEvent(start, end, eventName);
+
+               // add timezone info..
+               meeting.getProperties().add(tz.getTimeZoneId());
+
+               // generate unique identifier..
+               Uid uid = new Uid(UUID.randomUUID().toString());
+               meeting.getProperties().add(uid);
+
+               // add attendees..
+               Attendee dev1 = new 
Attendee(URI.create("mailto:[email protected]";));
+               dev1.getParameters().add(Role.REQ_PARTICIPANT);
+               dev1.getParameters().add(new Cn("Developer 1"));
+               meeting.getProperties().add(dev1);
+
+               Attendee dev2 = new 
Attendee(URI.create("mailto:[email protected]";));
+               dev2.getParameters().add(Role.OPT_PARTICIPANT);
+               dev2.getParameters().add(new Cn("Developer 2"));
+               meeting.getProperties().add(dev2);
+
+               // Create a calendar
+               net.fortuna.ical4j.model.Calendar icsCalendar = new 
net.fortuna.ical4j.model.Calendar();
+               icsCalendar.getProperties().add(
+                               new ProdId("-//Events Calendar//iCal4j 
1.0//EN"));
+               icsCalendar.getProperties().add(CalScale.GREGORIAN);
+               icsCalendar.getProperties().add(Version.VERSION_2_0);
+
+               // Add the event and print
+               icsCalendar.getComponents().add(meeting);
+
+               Organizer orger = new 
Organizer(URI.create("[email protected]"));
+               orger.getParameters().add(new Cn("Sebastian Wagner"));
+               meeting.getProperties().add(orger);
+
+               icsCalendar.getProperties().add(Method.REQUEST);
+
+               log.debug(icsCalendar.toString());
+
+               ByteArrayOutputStream bout = new ByteArrayOutputStream();
+               CalendarOutputter outputter = new CalendarOutputter();
+               try {
+                       outputter.output(icsCalendar, bout);
+                       iCalMimeBody = bout.toByteArray();
+
+                       sendIcalMessage();
+               } catch (Exception e) {
+                       log.error("Error", e);
+               }
+       }
+
+       @Test
+       public void sendInvitionIcalLink() {
+               try {
+                       String email = "[email protected]";
+                       String username = "shans";
+                       boolean invitor = false;
+
+                       Calendar start = Calendar.getInstance();
+                       Calendar end = Calendar.getInstance();
+                       IcalHandler handler = new 
IcalHandler(IcalHandler.ICAL_METHOD_REQUEST);
+
+                       // Transforming Meeting Members
+
+                       Map<String, String> attendeeList = 
handler.getAttendeeData(email, username, invitor);
+                       Map<String, String> organizerAttendee = 
handler.getAttendeeData(recipients, "seba-test", true);
+
+                       List<Map<String, String>> atts = new ArrayList<>();
+                       atts.add(attendeeList);
+
+                       // Create ICal Message
+                       String meetingId = 
handler.addNewMeeting(start.getTime(), end.getTime(), "test event",
+                                       atts, 
"localhost:5080/link_openmeetings",
+                                       organizerAttendee, "", 
java.util.TimeZone.getDefault().getID());
+
+                       log.debug("meetingId " + meetingId);
+
+                       iCalMimeBody = handler.getIcalAsByteArray();
+
+                       sendIcalMessage();
+
+                       // return MailHandler.sendMail(email, subject, 
template);
+
+               } catch (Exception err) {
+                       log.error("sendInvitionIcalLink", err);
+               }
+       }
+
+       private void sendIcalMessage() throws Exception {
+               log.debug("sendIcalMessage");
+
+               // Building MimeMessage
+               MimeMessage mimeMessage = mailHandler.getBasicMimeMessage();
+               mimeMessage.setSubject(subject);
+               mimeMessage.addRecipients(Message.RecipientType.TO, 
InternetAddress.parse(recipients, false));
+
+               // -- Create a new message --
+               BodyPart msg = new MimeBodyPart();
+               msg.setDataHandler(new DataHandler(new 
ByteArrayDataSource(htmlBody,
+                               "text/html; charset=\"utf-8\"")));
+
+               Multipart multipart = new MimeMultipart();
+
+               BodyPart iCalAttachment = new MimeBodyPart();
+               iCalAttachment.setDataHandler(new DataHandler(
+                               new javax.mail.util.ByteArrayDataSource(
+                                               new 
ByteArrayInputStream(iCalMimeBody),
+                                               
"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
+               iCalAttachment.setFileName("invite.ics");
+
+               multipart.addBodyPart(iCalAttachment);
+               multipart.addBodyPart(msg);
+
+               mimeMessage.setSentDate(new Date());
+               mimeMessage.setContent(multipart);
+
+               // -- Set some other header information --
+               // mimeMessage.setHeader("X-Mailer", "XML-Mail");
+               // mimeMessage.setSentDate(new Date());
+
+               // Transport trans = session.getTransport("smtp");
+               Transport.send(mimeMessage);
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java 
b/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
new file mode 100644
index 0000000..ffcc28e
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
@@ -0,0 +1,74 @@
+/*
+ * 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.config;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SMTP_SERVER;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.List;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestConfig extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestConfig.class, getWebAppRootKey());
+
+       @Autowired
+       private ConfigurationDao configurationDao;
+
+       @Test
+       public void getConfigKey() {
+               System.err.println("THIS");
+
+               Configuration smtp_server = 
configurationDao.get(CONFIG_SMTP_SERVER);
+
+               System.err.println("smtp_server " + smtp_server.getUser());
+
+               assertNull(smtp_server.getUser());
+       }
+
+       @Test
+       public void getConfigs() {
+
+               try {
+                       List<Configuration> list = configurationDao.get(4, 6);
+
+                       for (Configuration conf : list) {
+                               log.error("conf.getKey() " + conf.getKey());
+                               log.error("conf.getUser() " + conf.getUser());
+                               if (conf.getUser() != null) {
+                                       log.error("conf.getUsers() " + 
conf.getUser().getLogin());
+                               }
+                       }
+
+                       assertEquals(list.size(), 6);
+
+               } catch (Exception err) {
+                       log.error("[startConversion]", err);
+               }
+
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
new file mode 100644
index 0000000..8a556c4
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
@@ -0,0 +1,58 @@
+/*
+ * 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.core.file;
+
+import static 
org.apache.openmeetings.util.OmFileHelper.getDefaultProfilePicture;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.UUID;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.core.data.file.FileProcessor;
+import org.apache.openmeetings.db.dto.file.FileItemDTO;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestFileProcessor extends AbstractJUnitDefaults {
+       private static final String FILE_NAME = "test_name";
+
+       @Autowired
+       protected FileProcessor processor;
+
+       @Test
+       public void testProcessJpeg() throws Exception {
+               for (String ext : new String[] {null, "txt", "png"}) {
+                       FileItem f = new FileItemDTO()
+                                       .setName(String.format("%s.%s", 
FILE_NAME, ext))
+                                       .setHash(UUID.randomUUID().toString())
+                                       
.setType(BaseFileItem.Type.Recording).get();
+                       try (InputStream is = new 
FileInputStream(getDefaultProfilePicture())) {
+                               ConverterProcessResultList result = 
processor.processFile(f, is);
+                               assertFalse("Conversion should be successful", 
result.hasError());
+                               assertEquals("Type should be image", 
BaseFileItem.Type.Image, f.getType());
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/derby/PrepareSystemFiles.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/derby/PrepareSystemFiles.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/derby/PrepareSystemFiles.java
new file mode 100644
index 0000000..6c142f0
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/derby/PrepareSystemFiles.java
@@ -0,0 +1,67 @@
+/*
+ * 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.derby;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+
+import java.io.File;
+
+import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.util.ConnectionProperties.DbType;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * This file is called from command line to patch the derby configuration
+ * during the automated run of Selenium
+ *
+ * @author swagner
+ *
+ */
+public class PrepareSystemFiles {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(PrepareSystemFiles.class, getWebAppRootKey());
+
+       public static void main(String... args) {
+               try {
+                       OmFileHelper.setOmHome(args[0]);
+
+                       String databaseHomeDirectory = args[1];
+
+                       String persistanceFileToPatch = args[2];
+
+                       File conf = new File(persistanceFileToPatch);
+
+                       if (conf.exists()) {
+                               conf.delete();
+                       }
+
+                       ConnectionPropertiesPatcher.patch(DbType.derby.name()
+                                       , "localhost"
+                                       , "1527"
+                                       , databaseHomeDirectory + "openmeetings"
+                                       , "user"
+                                       , "secret"
+                                       );
+               } catch (Exception err) {
+                       log.error("Error", err);
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
new file mode 100644
index 0000000..552b900
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
@@ -0,0 +1,60 @@
+/*
+ * 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.domain;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAddGroup extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestAddGroup.class, getWebAppRootKey());
+
+       @Autowired
+       private GroupDao groupDao;
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void testAddingGroup() {
+               Group o = new Group();
+               o.setName("default");
+               o = groupDao.update(o, null);
+               assertNotNull("Id of group created should not be null", 
o.getId());
+
+               User us = userDao.get(1L);
+               assertNotNull("User should exist", us);
+
+               assertNotNull("Group User list should exist", 
us.getGroupUsers());
+               us.getGroupUsers().add(new GroupUser(o, us));
+               us = userDao.update(us, null);
+
+               log.error(us.getLastname());
+               log.error(us.getAddress().getTown());
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
new file mode 100644
index 0000000..accdcd0
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
@@ -0,0 +1,51 @@
+/*
+ * 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.domain;
+
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserGroupAggregation extends AbstractJUnitDefaults {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(TestUserGroupAggregation.class, getWebAppRootKey());
+
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void testitNow() {
+               User u = userDao.get(1L);
+
+               assertNotNull("Group list for default user must not be null", 
u.getGroupUsers());
+               assertTrue("Default user must belong to at least one group", 
u.getGroupUsers().size() > 0);
+
+               for (GroupUser orgUserObj : u.getGroupUsers()) {
+                       log.error("testitNow: group Id: '" + 
orgUserObj.getGroup().getId() + "'; name: '" + orgUserObj.getGroup().getName() 
+ "'");
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/3dac8e2f/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
new file mode 100644
index 0000000..e0152b7
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
@@ -0,0 +1,57 @@
+/*
+ * 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.invitiation;
+
+import static org.apache.openmeetings.util.CalendarHelper.getDate;
+
+import java.time.LocalDateTime;
+
+import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.MessageType;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.service.room.InvitationManager;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestInvitation extends AbstractWicketTester {
+       @Autowired
+       private InvitationManager invitationManager;
+       @Autowired
+       private UserDao userDao;
+       @Autowired
+       private RoomDao roomDao;
+
+       @Test
+       public void testSendInvitationLink() throws Exception {
+               User us = userDao.getByLogin(username, User.Type.user, null);
+
+               LocalDateTime from = 
LocalDateTime.now().plusDays(1).withHour(12).withMinute(0).withSecond(0);
+               User invitee = userDao.getContact("[email protected]", 
"Testname", "Testlastname", us.getId());
+               Invitation i = invitationManager.getInvitation(invitee, 
roomDao.get(1L),
+                               false, "", Valid.OneTime
+                               , us, us.getLanguageId(),
+                               getDate(from, "GMT"), 
getDate(from.plusHours(2), "GMT"), null);
+
+               invitationManager.sendInvitationLink(i, MessageType.Create, 
"subject", "message", false);
+       }
+}

Reply via email to