/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.calendar.service.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.calendar.exception.CalendarBookingRecurrenceException;
import com.liferay.calendar.model.Calendar;
import com.liferay.calendar.model.CalendarBooking;
import com.liferay.calendar.notification.NotificationType;
import com.liferay.calendar.recurrence.Frequency;
import com.liferay.calendar.recurrence.PositionalWeekday;
import com.liferay.calendar.recurrence.Recurrence;
import com.liferay.calendar.recurrence.RecurrenceSerializer;
import com.liferay.calendar.service.CalendarBookingLocalService;
import com.liferay.calendar.service.CalendarBookingLocalServiceUtil;
import com.liferay.calendar.test.util.CalendarBookingTestUtil;
import com.liferay.calendar.test.util.CalendarTestUtil;
import com.liferay.calendar.test.util.RecurrenceTestUtil;
import com.liferay.calendar.util.JCalendarUtil;
import com.liferay.calendar.workflow.CalendarBookingWorkflowConstants;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.ReflectionTestUtil;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun;
import com.liferay.portal.kernel.test.rule.Sync;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.test.util.UserTestUtil;
import com.liferay.portal.kernel.util.CalendarFactoryUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.LocalizationUtil;
import com.liferay.portal.kernel.util.ProxyUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Time;
import com.liferay.portal.kernel.util.TimeZoneUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.test.rule.SynchronousMailTestRule;
import com.liferay.portal.util.test.MailServiceTestUtil;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
/**
* @author Adam Brandizzi
*/
@RunWith(Arquillian.class)
@Sync
public class CalendarBookingLocalServiceTest {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(), SynchronousMailTestRule.INSTANCE);
@Before
public void setUp() throws Exception {
_user = UserTestUtil.addUser();
setUpCheckBookingMessageListener();
}
@After
public void tearDown() {
tearDownCheckBookingMessageListener();
}
@Test
public void testAddAllDayCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(
_user, _losAngelesTimeZone, serviceContext);
java.util.Calendar nowJCalendar = JCalendarUtil.getJCalendar(
2017, java.util.Calendar.JANUARY, 5, 22, 0, 0, 0, _utcTimeZone);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addAllDayCalendarBooking(
_user, calendar, nowJCalendar.getTimeInMillis(),
nowJCalendar.getTimeInMillis(), serviceContext);
java.util.Calendar startTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBooking.getStartTime(), calendarBooking.getTimeZone());
java.util.Calendar endTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBooking.getEndTime(), calendarBooking.getTimeZone());
assertSameDay(nowJCalendar, startTimeJCalendar);
assertSameDay(nowJCalendar, endTimeJCalendar);
assertEqualsTime(0, 0, startTimeJCalendar);
assertEqualsTime(23, 59, endTimeJCalendar);
}
@Test
public void testAddCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setLanguageId("fr_FR");
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
Assert.assertEquals(
"fr_FR",
LocalizationUtil.getDefaultLanguageId(calendarBooking.getTitle()));
}
@Test
public void testAddCalendarBookingDoesNotNotifyCreatorTwice()
throws Exception {
ServiceContext serviceContext = createServiceContext();
_invitingUser = UserTestUtil.addUser();
Calendar calendar = CalendarTestUtil.addCalendar(
_invitingUser, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
_user, serviceContext);
long startTime = System.currentTimeMillis() + Time.MINUTE;
long endTime = startTime + Time.HOUR;
long firstReminder = Time.MINUTE;
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addCalendarBooking(
_invitingUser, calendar,
new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(), startTime, endTime,
null, (int)firstReminder, NotificationType.EMAIL, 0,
NotificationType.EMAIL, serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
CalendarBookingLocalServiceUtil.updateStatus(
_user.getUserId(), childCalendarBooking,
CalendarBookingWorkflowConstants.STATUS_APPROVED, serviceContext);
CalendarBookingLocalServiceUtil.checkCalendarBookings();
String mailMessageSubject =
"Calendar: Event Reminder for " + StringPool.QUOTE +
calendarBooking.getTitle(LocaleUtil.getDefault()) +
StringPool.QUOTE;
List<com.dumbster.smtp.MailMessage> mailMessages =
MailServiceTestUtil.getMailMessages("Subject", mailMessageSubject);
Assert.assertEquals(mailMessages.toString(), 2, mailMessages.size());
}
@Test
public void testAddRecurringCalendarBookingUntilStartTime()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(
_user, _losAngelesTimeZone, serviceContext);
java.util.Calendar startTimeJCalendar = CalendarFactoryUtil.getCalendar(
2017, java.util.Calendar.JANUARY, 1, 20, 0, 0, 0,
_losAngelesTimeZone);
java.util.Calendar untilJCalendar =
(java.util.Calendar)startTimeJCalendar.clone();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence(
_losAngelesTimeZone, untilJCalendar);
long startTime = startTimeJCalendar.getTimeInMillis();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long calendarBookingId = calendarBooking.getCalendarBookingId();
assertCalendarBookingInstancesCount(calendarBookingId, 1);
}
@Test
public void testDeleteCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long instanceStartTime = startTime + Time.DAY * 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), titleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
CalendarBookingLocalServiceUtil.deleteCalendarBooking(calendarBooking);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertEquals(titleMap, calendarBookingInstance.getTitleMap());
}
@Test
public void testDeleteCalendarBookingWithAllFollowingInstances()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long instanceStartTime = startTime + Time.DAY * 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), titleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
CalendarBookingLocalServiceUtil.deleteCalendarBookingInstance(
calendarBooking, 1, true, true);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertNull(calendarBookingInstance);
assertCalendarBookingInstancesCount(
calendarBooking.getCalendarBookingId(), 1);
}
@Test
public void testDeleteCalendarBookingWithAllRecurringInstances()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long instanceStartTime = startTime + Time.DAY * 2;
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(),
RandomTestUtil.randomLocaleStringMap(),
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
CalendarBookingLocalServiceUtil.deleteCalendarBooking(
calendarBooking, true);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertNull(calendarBookingInstance);
}
@Test
public void testDeleteCalendarBookingWithoutAllRecurringInstances()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long instanceStartTime = startTime + Time.DAY * 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), titleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
CalendarBookingLocalServiceUtil.deleteCalendarBooking(
calendarBooking, false);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertEquals(titleMap, calendarBookingInstance.getTitleMap());
}
@Test
public void testDeleteLastCalendarBookingInstanceDeletesCalendarBooking()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence(2);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
long calendarBookingId = calendarBooking.getCalendarBookingId();
CalendarBookingLocalServiceUtil.deleteCalendarBookingInstance(
calendarBooking, 0, false);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingId);
Assert.assertNotNull(calendarBooking);
CalendarBookingLocalServiceUtil.deleteCalendarBookingInstance(
calendarBooking, 0, false);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingId);
Assert.assertNull(calendarBooking);
}
@Test
public void testGetRecurringCalendarBookings() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
Map<Locale, String> instanceTitleMap =
RandomTestUtil.randomLocaleStringMap();
int instanceIndex = 2;
long instanceStartTime = startTime + Time.DAY * instanceIndex;
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
instanceIndex, calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
instanceStartTime, instanceStartTime + (Time.HOUR * 10), false,
null, false, 0, null, 0, null, serviceContext);
instanceIndex = 4;
instanceStartTime = instanceStartTime + Time.DAY * instanceStartTime;
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
instanceIndex, calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
instanceStartTime, instanceStartTime + (Time.HOUR * 10), false,
null, false, 0, null, 0, null, serviceContext);
List<CalendarBooking> instances =
CalendarBookingLocalServiceUtil.getRecurringCalendarBookings(
calendarBooking);
Assert.assertEquals(instances.toString(), 3, instances.size());
for (CalendarBooking instance : instances) {
if (instance.getCalendarBookingId() ==
calendarBooking.getCalendarBookingId()) {
continue;
}
Assert.assertEquals(instanceTitleMap, instance.getTitleMap());
}
}
@Test
public void testGetRecurringCalendarBookingsSkipPastEvents()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
Map<Locale, String> instanceTitleMap =
RandomTestUtil.randomLocaleStringMap();
int instanceIndex = 2;
long firstInstancStartTime = startTime + Time.DAY * instanceIndex;
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
instanceIndex, calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
firstInstancStartTime, firstInstancStartTime + (Time.HOUR * 10),
false, null, false, 0, null, 0, null, serviceContext);
instanceIndex = 4;
long secondInstancStartTime =
firstInstancStartTime + Time.DAY * instanceIndex;
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
instanceIndex, calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
secondInstancStartTime, secondInstancStartTime + (Time.HOUR * 10),
false, null, false, 0, null, 0, null, serviceContext);
List<CalendarBooking> instances =
CalendarBookingLocalServiceUtil.getRecurringCalendarBookings(
calendarBooking, firstInstancStartTime + 1);
Assert.assertEquals(instances.toString(), 1, instances.size());
CalendarBooking instance = instances.get(0);
Assert.assertEquals(secondInstancStartTime, instance.getStartTime());
}
@Test
public void testInviteToDraftCalendarBookingResultsInMasterPendingChild()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_MASTER_PENDING,
childCalendarBooking.getStatus());
}
@Test
public void testInviteToPublishedCalendarBookingResultsInPendingChild()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
}
@Test
public void testMoveToTrashCalendarBookingShouldMoveItsChildrenToTrash()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
CalendarBookingLocalServiceUtil.moveCalendarBookingToTrash(
_user.getUserId(), calendarBooking);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_IN_TRASH,
childCalendarBooking.getStatus());
}
@Test
public void testPublishCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
WorkflowConstants.STATUS_APPROVED, calendarBooking.getStatus());
}
@Test
public void testPublishDraftCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0],
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
WorkflowConstants.STATUS_APPROVED, calendarBooking.getStatus());
}
@Test
public void testPublishDraftCalendarBookingResultsInPendingChild()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_MASTER_PENDING,
childCalendarBooking.getStatus());
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(),
new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_PENDING,
childCalendarBooking.getStatus());
}
@Test
public void testRestoredFromTrashEventResultsInRestoredFromTrashChildren()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
CalendarBookingLocalServiceUtil.moveCalendarBookingToTrash(
_user.getUserId(), calendarBooking);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_IN_TRASH,
childCalendarBooking.getStatus());
CalendarBookingLocalServiceUtil.restoreCalendarBookingFromTrash(
_user.getUserId(), calendarBooking.getCalendarBookingId());
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
}
@Test
public void testSaveAsDraftCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, calendarBooking.getStatus());
}
@Test
public void testSaveAsDraftDraftCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0],
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, calendarBooking.getStatus());
}
@Test
public void testSaveAsDraftPublishedCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRegularCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
serviceContext);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0],
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
WorkflowConstants.STATUS_DRAFT, calendarBooking.getStatus());
}
@Test(expected = CalendarBookingRecurrenceException.class)
public void testStartDateBeforeUntilDateThrowsRecurrenceException()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
java.util.Calendar untilJCalendar = CalendarFactoryUtil.getCalendar(
startTime);
untilJCalendar.add(java.util.Calendar.DAY_OF_MONTH, -2);
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence(
untilJCalendar);
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
}
@Test
public void testUpdateAllFollowingFromSingleInstance() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
long endTime = startTime + (Time.HOUR * 10);
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, endTime, recurrence,
serviceContext);
Map<Locale, String> earlierDescriptionMap = new HashMap<>(
calendarBooking.getDescriptionMap());
int instanceIndex = 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
long instanceStartTime = startTime + Time.DAY * 2;
long instanceEndTime = instanceStartTime + (Time.HOUR * 10);
CalendarBooking calendarBookingInstance =
CalendarBookingTestUtil.updateCalendarBookingInstance(
_user, calendarBooking, instanceIndex, titleMap,
calendarBooking.getDescriptionMap(), instanceStartTime,
instanceEndTime, serviceContext);
instanceIndex = 0;
Map<Locale, String> laterDescriptionMap =
RandomTestUtil.randomLocaleStringMap();
CalendarBookingTestUtil.updateCalendarBookingInstanceAndAllFollowing(
_user, calendarBookingInstance, instanceIndex, titleMap,
laterDescriptionMap, instanceStartTime, instanceEndTime,
serviceContext);
List<CalendarBooking> earlierCalendarBookings = new ArrayList<>();
List<CalendarBooking> laterCalendarBookings = new ArrayList<>();
List<CalendarBooking> recurringCalendarBookings =
CalendarBookingLocalServiceUtil.getRecurringCalendarBookings(
calendarBooking);
for (CalendarBooking recurringCalendarBooking :
recurringCalendarBookings) {
if (recurringCalendarBooking.getStartTime() >= instanceStartTime) {
laterCalendarBookings.add(recurringCalendarBooking);
}
else {
earlierCalendarBookings.add(recurringCalendarBooking);
}
}
Assert.assertEquals(
earlierCalendarBookings.toString(), 1,
earlierCalendarBookings.size());
Assert.assertEquals(
laterCalendarBookings.toString(), 2, laterCalendarBookings.size());
for (CalendarBooking earlierCalendarBooking : earlierCalendarBookings) {
Assert.assertEquals(
earlierDescriptionMap,
earlierCalendarBooking.getDescriptionMap());
}
for (CalendarBooking laterCalendarBooking : laterCalendarBookings) {
Assert.assertEquals(
laterDescriptionMap, laterCalendarBooking.getDescriptionMap());
}
}
@Test
public void testUpdateAllFollowingFromSingleInstancePreservesDayTime()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
long endTime = startTime + (Time.HOUR * 10);
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, endTime, recurrence,
serviceContext);
int instanceIndex = 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
long instanceStartTime = startTime + Time.DAY * 2;
long instanceEndTime = instanceStartTime + (Time.HOUR * 10);
CalendarBooking calendarBookingInstance =
CalendarBookingTestUtil.updateCalendarBookingInstance(
_user, calendarBooking, instanceIndex, titleMap,
calendarBooking.getDescriptionMap(), instanceStartTime,
instanceEndTime, serviceContext);
instanceIndex = 0;
Map<Locale, String> laterDescriptionMap =
RandomTestUtil.randomLocaleStringMap();
CalendarBookingTestUtil.updateCalendarBookingInstanceAndAllFollowing(
_user, calendarBookingInstance, instanceIndex, titleMap,
laterDescriptionMap, instanceStartTime, instanceEndTime,
serviceContext);
List<CalendarBooking> recurringCalendarBookings =
CalendarBookingLocalServiceUtil.getRecurringCalendarBookings(
calendarBooking, endTime);
Assert.assertEquals(
recurringCalendarBookings.toString(), 2,
recurringCalendarBookings.size());
calendarBookingInstance = recurringCalendarBookings.get(0);
java.util.Calendar expectedStartTimeJCalendar =
JCalendarUtil.getJCalendar(
instanceStartTime, calendarBookingInstance.getTimeZone());
java.util.Calendar instanceStartTimeJCalendar =
JCalendarUtil.getJCalendar(
calendarBookingInstance.getStartTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
assertSameTime(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
java.util.Calendar expectedEndTimeJCalendar =
JCalendarUtil.getJCalendar(
instanceEndTime, calendarBookingInstance.getTimeZone());
java.util.Calendar instanceEndTimeJCalendar =
JCalendarUtil.getJCalendar(
calendarBookingInstance.getEndTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
assertSameTime(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
calendarBookingInstance = recurringCalendarBookings.get(1);
expectedStartTimeJCalendar = JCalendarUtil.getJCalendar(
instanceStartTime, calendarBookingInstance.getTimeZone());
expectedStartTimeJCalendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
instanceStartTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBookingInstance.getStartTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
assertSameTime(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
expectedEndTimeJCalendar = JCalendarUtil.getJCalendar(
instanceEndTime, calendarBookingInstance.getTimeZone());
expectedEndTimeJCalendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
instanceEndTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBookingInstance.getEndTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
assertSameTime(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
}
@Test
public void testUpdateAllFollowingFromSingleInstancePreservesDayTimeAcrossDays()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
long endTime = startTime + Time.DAY;
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, endTime, recurrence,
serviceContext);
int instanceIndex = 2;
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
long instanceStartTime = startTime + Time.DAY * 2;
long instanceEndTime = instanceStartTime + Time.DAY;
CalendarBooking calendarBookingInstance =
CalendarBookingTestUtil.updateCalendarBookingInstance(
_user, calendarBooking, instanceIndex, titleMap,
calendarBooking.getDescriptionMap(), instanceStartTime,
instanceEndTime, serviceContext);
instanceIndex = 0;
Map<Locale, String> laterDescriptionMap =
RandomTestUtil.randomLocaleStringMap();
CalendarBookingTestUtil.updateCalendarBookingInstanceAndAllFollowing(
_user, calendarBookingInstance, instanceIndex, titleMap,
laterDescriptionMap, instanceStartTime, instanceEndTime,
serviceContext);
List<CalendarBooking> recurringCalendarBookings =
CalendarBookingLocalServiceUtil.getRecurringCalendarBookings(
calendarBooking, endTime);
Assert.assertEquals(
recurringCalendarBookings.toString(), 2,
recurringCalendarBookings.size());
calendarBookingInstance = recurringCalendarBookings.get(0);
java.util.Calendar expectedStartTimeJCalendar =
JCalendarUtil.getJCalendar(
instanceStartTime, calendarBookingInstance.getTimeZone());
java.util.Calendar instanceStartTimeJCalendar =
JCalendarUtil.getJCalendar(
calendarBookingInstance.getStartTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
assertSameTime(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
java.util.Calendar expectedEndTimeJCalendar =
JCalendarUtil.getJCalendar(
instanceEndTime, calendarBookingInstance.getTimeZone());
java.util.Calendar instanceEndTimeJCalendar =
JCalendarUtil.getJCalendar(
calendarBookingInstance.getEndTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
assertSameTime(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
calendarBookingInstance = recurringCalendarBookings.get(1);
expectedStartTimeJCalendar = JCalendarUtil.getJCalendar(
instanceStartTime, calendarBookingInstance.getTimeZone());
expectedStartTimeJCalendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
instanceStartTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBookingInstance.getStartTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
assertSameTime(expectedStartTimeJCalendar, instanceStartTimeJCalendar);
expectedEndTimeJCalendar = JCalendarUtil.getJCalendar(
instanceEndTime, calendarBookingInstance.getTimeZone());
expectedEndTimeJCalendar.add(java.util.Calendar.DAY_OF_MONTH, 1);
instanceEndTimeJCalendar = JCalendarUtil.getJCalendar(
calendarBookingInstance.getEndTime(),
calendarBookingInstance.getTimeZone());
assertSameDay(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
assertSameTime(expectedEndTimeJCalendar, instanceEndTimeJCalendar);
}
@Test
public void testUpdateCalendarBookingAndAllRecurringInstancesStatus()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
long endTime = startTime + (Time.HOUR * 10);
Recurrence recurrence = new Recurrence();
recurrence.setFrequency(Frequency.DAILY);
recurrence.setPositionalWeekdays(new ArrayList<PositionalWeekday>());
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, endTime, recurrence,
serviceContext);
long instanceStartTime = startTime + Time.DAY * 2;
long instanceEndTime = instanceStartTime + (Time.HOUR * 10);
Map<Locale, String> titleMap = RandomTestUtil.randomLocaleStringMap();
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), titleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceEndTime, false, null, false, 0, null, 0, null,
serviceContext);
CalendarBookingLocalServiceUtil.invokeTransition(
_user.getUserId(), calendarBooking, startTime + Time.DAY,
CalendarBookingWorkflowConstants.STATUS_MAYBE, true, true,
serviceContext);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_MAYBE,
calendarBookingInstance.getStatus());
}
@Test
public void testUpdateCalendarBookingInstance() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
Map<Locale, String> instanceTitleMap =
RandomTestUtil.randomLocaleStringMap();
long instanceStartTime = startTime + Time.DAY * 2;
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
Assert.assertEquals(
instanceTitleMap, calendarBookingInstance.getTitleMap());
Map<Locale, String> newTitleMap =
RandomTestUtil.randomLocaleStringMap();
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 1,
calendar.getCalendarId(), newTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
startTime, startTime + (Time.HOUR * 10), false,
calendarBooking.getRecurrence(), true, 0, null, 0, null,
serviceContext);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertEquals(newTitleMap, calendarBookingInstance.getTitleMap());
}
@Test
public void testUpdateCalendarBookingPreservesChildReminders()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(), startTime,
startTime + (Time.HOUR * 10), null, RandomTestUtil.randomInt(),
NotificationType.EMAIL, RandomTestUtil.randomInt(),
NotificationType.EMAIL, serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
childCalendarBooking = CalendarBookingLocalServiceUtil.updateStatus(
_user.getUserId(), childCalendarBooking,
CalendarBookingWorkflowConstants.STATUS_MAYBE, serviceContext);
int firstReminder = RandomTestUtil.randomInt();
int secondReminder = RandomTestUtil.randomInt(1, firstReminder);
childCalendarBooking =
CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), childCalendarBooking.getCalendarBookingId(),
childCalendarBooking.getCalendarId(), new long[0],
childCalendarBooking.getTitleMap(),
childCalendarBooking.getDescriptionMap(),
childCalendarBooking.getLocation(), startTime,
startTime + (Time.HOUR * 10), childCalendarBooking.getAllDay(),
childCalendarBooking.getRecurrence(), firstReminder,
NotificationType.EMAIL.getValue(), secondReminder,
NotificationType.EMAIL.getValue(), serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendarBooking.getCalendarId(),
new long[] {invitedCalendar.getCalendarId()},
calendarBooking.getTitleMap(), calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), startTime,
startTime + (Time.HOUR * 11), calendarBooking.getAllDay(),
calendarBooking.getRecurrence(), RandomTestUtil.randomInt(),
calendarBooking.getFirstReminderType(), RandomTestUtil.randomInt(),
calendarBooking.getSecondReminderType(), serviceContext);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertNotEquals(
calendarBooking.getFirstReminder(),
childCalendarBooking.getFirstReminder());
Assert.assertNotEquals(
calendarBooking.getSecondReminder(),
childCalendarBooking.getSecondReminder());
Assert.assertEquals(
firstReminder, childCalendarBooking.getFirstReminder());
Assert.assertEquals(
secondReminder, childCalendarBooking.getSecondReminder());
}
@Test
public void testUpdateCalendarBookingPreservesChildStatus()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
long endTime = startTime + (Time.HOUR * 10);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, endTime, serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
CalendarBookingLocalServiceUtil.updateStatus(
_user.getUserId(), childCalendarBooking,
CalendarBookingWorkflowConstants.STATUS_MAYBE, serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendarBooking.getCalendarId(),
new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime, endTime,
calendarBooking.getAllDay(), calendarBooking.getRecurrence(),
calendarBooking.getFirstReminder(),
calendarBooking.getFirstReminderType(),
calendarBooking.getSecondReminder(),
calendarBooking.getSecondReminderType(), serviceContext);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_MAYBE,
childCalendarBooking.getStatus());
long newEndTime = endTime + 1000000;
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendarBooking.getCalendarId(),
new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime, newEndTime,
calendarBooking.getAllDay(), calendarBooking.getRecurrence(),
calendarBooking.getFirstReminder(),
calendarBooking.getFirstReminderType(),
calendarBooking.getSecondReminder(),
calendarBooking.getSecondReminderType(), serviceContext);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertNotEquals(
CalendarBookingWorkflowConstants.STATUS_MAYBE,
childCalendarBooking.getStatus());
}
@Test
public void testUpdateCalendarBookingPreservesDescriptionTranslations()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Map<Locale, String> oldDescriptionMap = new HashMap<>();
oldDescriptionMap.put(LocaleUtil.BRAZIL, RandomTestUtil.randomString());
oldDescriptionMap.put(
LocaleUtil.GERMANY, RandomTestUtil.randomString());
oldDescriptionMap.put(LocaleUtil.SPAIN, RandomTestUtil.randomString());
oldDescriptionMap.put(LocaleUtil.US, RandomTestUtil.randomString());
long startTime = System.currentTimeMillis();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.
addRegularCalendarBookingWithTitleAndDescription(
_user, calendar, RandomTestUtil.randomLocaleStringMap(),
oldDescriptionMap, startTime, startTime + (Time.HOUR * 10),
serviceContext);
Map<Locale, String> newDescriptionMap = new HashMap<>();
newDescriptionMap.put(LocaleUtil.GERMANY, "");
newDescriptionMap.put(LocaleUtil.SPAIN, RandomTestUtil.randomString());
newDescriptionMap.put(
LocaleUtil.US, oldDescriptionMap.get(LocaleUtil.US));
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0],
RandomTestUtil.randomLocaleStringMap(), newDescriptionMap,
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
oldDescriptionMap.get(LocaleUtil.BRAZIL),
calendarBooking.getDescription(LocaleUtil.BRAZIL));
Assert.assertEquals(
newDescriptionMap.get(LocaleUtil.SPAIN),
calendarBooking.getDescription(LocaleUtil.SPAIN));
Assert.assertEquals(
newDescriptionMap.get(LocaleUtil.US),
calendarBooking.getDescription(LocaleUtil.US));
Map<Locale, String> descriptionMap =
calendarBooking.getDescriptionMap();
Assert.assertFalse(descriptionMap.containsKey(LocaleUtil.GERMANY));
}
@Test
public void testUpdateCalendarBookingPreservesTitleTranslations()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Map<Locale, String> oldTitleMap = new HashMap<>();
oldTitleMap.put(LocaleUtil.BRAZIL, RandomTestUtil.randomString());
oldTitleMap.put(LocaleUtil.GERMANY, RandomTestUtil.randomString());
oldTitleMap.put(LocaleUtil.SPAIN, RandomTestUtil.randomString());
oldTitleMap.put(LocaleUtil.US, RandomTestUtil.randomString());
long startTime = System.currentTimeMillis();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.
addRegularCalendarBookingWithTitleAndDescription(
_user, calendar, oldTitleMap,
RandomTestUtil.randomLocaleStringMap(), startTime,
startTime + (Time.HOUR * 10), serviceContext);
Map<Locale, String> newTitleMap = new HashMap<>();
newTitleMap.put(LocaleUtil.GERMANY, "");
newTitleMap.put(LocaleUtil.SPAIN, RandomTestUtil.randomString());
newTitleMap.put(LocaleUtil.US, oldTitleMap.get(LocaleUtil.US));
calendarBooking = CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0], newTitleMap,
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), false, null, 0, null, 0, null,
serviceContext);
calendarBooking = CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBooking.getCalendarBookingId());
Assert.assertEquals(
oldTitleMap.get(LocaleUtil.BRAZIL),
calendarBooking.getTitle(LocaleUtil.BRAZIL));
Assert.assertEquals(
newTitleMap.get(LocaleUtil.SPAIN),
calendarBooking.getTitle(LocaleUtil.SPAIN));
Assert.assertEquals(
oldTitleMap.get(LocaleUtil.US),
calendarBooking.getTitle(LocaleUtil.US));
Map<Locale, String> titleMap = calendarBooking.getTitleMap();
Assert.assertFalse(titleMap.containsKey(LocaleUtil.GERMANY));
}
@Test
public void testUpdateChildCalendarBookingPreservesStatus()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
Calendar invitedCalendar = CalendarTestUtil.addCalendar(
calendar.getCalendarResource(), serviceContext);
long startTime = System.currentTimeMillis();
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addMasterCalendarBooking(
_user, calendar, new long[] {invitedCalendar.getCalendarId()},
startTime, startTime + (Time.HOUR * 10), serviceContext);
CalendarBooking childCalendarBooking = getChildCalendarBooking(
calendarBooking);
Assert.assertEquals(
WorkflowConstants.STATUS_PENDING, childCalendarBooking.getStatus());
childCalendarBooking = CalendarBookingLocalServiceUtil.updateStatus(
_user.getUserId(), childCalendarBooking,
CalendarBookingWorkflowConstants.STATUS_MAYBE, serviceContext);
CalendarBookingLocalServiceUtil.updateCalendarBooking(
_user.getUserId(), childCalendarBooking.getCalendarBookingId(),
childCalendarBooking.getCalendarId(),
new long[] {invitedCalendar.getCalendarId()},
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomLocaleStringMap(),
RandomTestUtil.randomString(), startTime,
startTime + (Time.HOUR * 10), childCalendarBooking.getAllDay(),
childCalendarBooking.getRecurrence(),
childCalendarBooking.getFirstReminder(),
childCalendarBooking.getFirstReminderType(),
childCalendarBooking.getSecondReminder(),
childCalendarBooking.getSecondReminderType(), serviceContext);
childCalendarBooking = getChildCalendarBooking(calendarBooking);
Assert.assertEquals(
CalendarBookingWorkflowConstants.STATUS_MAYBE,
childCalendarBooking.getStatus());
}
@Test
public void testUpdateRecurringCalendarBooking() throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(_user, serviceContext);
long startTime = System.currentTimeMillis();
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence();
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, startTime + (Time.HOUR * 10),
recurrence, serviceContext);
Map<Locale, String> instanceTitleMap =
RandomTestUtil.randomLocaleStringMap();
long instanceStartTime = startTime + Time.DAY * 2;
CalendarBooking calendarBookingInstance =
CalendarBookingLocalServiceUtil.updateCalendarBookingInstance(
_user.getUserId(), calendarBooking.getCalendarBookingId(), 2,
calendar.getCalendarId(), instanceTitleMap,
calendarBooking.getDescriptionMap(),
calendarBooking.getLocation(), instanceStartTime,
instanceStartTime + (Time.HOUR * 10), false, null, false, 0,
null, 0, null, serviceContext);
Assert.assertEquals(
instanceTitleMap, calendarBookingInstance.getTitleMap());
Map<Locale, String> newTitleMap =
RandomTestUtil.randomLocaleStringMap();
CalendarBookingLocalServiceUtil.updateRecurringCalendarBooking(
_user.getUserId(), calendarBooking.getCalendarBookingId(),
calendar.getCalendarId(), new long[0], newTitleMap,
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
startTime, startTime + (Time.HOUR * 10), false, 0, null, 0, null,
serviceContext);
calendarBookingInstance =
CalendarBookingLocalServiceUtil.fetchCalendarBooking(
calendarBookingInstance.getCalendarBookingId());
Assert.assertEquals(newTitleMap, calendarBookingInstance.getTitleMap());
}
@Test
public void testUpdateRecurringCalendarBookingLastInstance()
throws Exception {
ServiceContext serviceContext = createServiceContext();
Calendar calendar = CalendarTestUtil.addCalendar(
_user, _losAngelesTimeZone, serviceContext);
java.util.Calendar startTimeJCalendar = CalendarFactoryUtil.getCalendar(
2017, java.util.Calendar.JANUARY, 1, 20, 0, 0, 0,
_losAngelesTimeZone);
Recurrence recurrence = RecurrenceTestUtil.getDailyRecurrence(
3, _losAngelesTimeZone);
long startTime = startTimeJCalendar.getTimeInMillis();
long endTime = startTime + (Time.HOUR * 10);
CalendarBooking calendarBooking =
CalendarBookingTestUtil.addRecurringCalendarBooking(
_user, calendar, startTime, endTime, recurrence,
serviceContext);
long calendarBookingId = calendarBooking.getCalendarBookingId();
assertCalendarBookingInstancesCount(calendarBookingId, 3);
recurrence = RecurrenceTestUtil.getDailyRecurrence(
_losAngelesTimeZone, startTimeJCalendar);
CalendarBookingLocalServiceUtil.updateCalendarBooking(
calendarBooking.getUserId(), calendarBookingId,
calendar.getCalendarId(), calendarBooking.getTitleMap(),
calendarBooking.getDescriptionMap(), calendarBooking.getLocation(),
startTime, endTime, false,
RecurrenceSerializer.serialize(recurrence),
calendarBooking.getFirstReminder(),
calendarBooking.getFirstReminderType(),
calendarBooking.getSecondReminder(),
calendarBooking.getSecondReminderType(), serviceContext);
assertCalendarBookingInstancesCount(calendarBookingId, 1);
}
protected void assertCalendarBookingInstancesCount(
long calendarBookingId, int count)
throws PortalException {
CalendarBooking calendarBookingInstance = null;
for (int i = 0; i < count; i++) {
calendarBookingInstance =
CalendarBookingLocalServiceUtil.getCalendarBookingInstance(
calendarBookingId, i);
Assert.assertNotNull(calendarBookingInstance);
}
calendarBookingInstance =
CalendarBookingLocalServiceUtil.getCalendarBookingInstance(
calendarBookingId, count);
Assert.assertNull(calendarBookingInstance);
}
protected void assertEqualsTime(
int hour, int minute, java.util.Calendar jCalendar) {
Assert.assertEquals(
hour, jCalendar.get(java.util.Calendar.HOUR_OF_DAY));
Assert.assertEquals(minute, jCalendar.get(java.util.Calendar.MINUTE));
}
protected void assertSameDay(
java.util.Calendar expectedJCalendar,
java.util.Calendar actualJCalendar) {
Assert.assertEquals(
expectedJCalendar.get(java.util.Calendar.YEAR),
actualJCalendar.get(java.util.Calendar.YEAR));
Assert.assertEquals(
expectedJCalendar.get(java.util.Calendar.MONTH),
actualJCalendar.get(java.util.Calendar.MONTH));
Assert.assertEquals(
expectedJCalendar.get(java.util.Calendar.DAY_OF_MONTH),
actualJCalendar.get(java.util.Calendar.DAY_OF_MONTH));
}
protected void assertSameTime(
java.util.Calendar expectedJCalendar,
java.util.Calendar actualJCalendar) {
Assert.assertEquals(
expectedJCalendar.get(java.util.Calendar.HOUR),
actualJCalendar.get(java.util.Calendar.HOUR));
Assert.assertEquals(
expectedJCalendar.get(java.util.Calendar.MINUTE),
actualJCalendar.get(java.util.Calendar.MINUTE));
}
protected ServiceContext createServiceContext() {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(_user.getCompanyId());
return serviceContext;
}
protected CalendarBooking getChildCalendarBooking(
CalendarBooking calendarBooking) {
List<CalendarBooking> childCalendarBookings =
calendarBooking.getChildCalendarBookings();
CalendarBooking childCalendarBooking = childCalendarBookings.get(0);
if (childCalendarBooking.isMasterBooking()) {
childCalendarBooking = childCalendarBookings.get(1);
}
return childCalendarBooking;
}
protected void setUpCheckBookingMessageListener() {
Bundle bundle = FrameworkUtil.getBundle(
CalendarBookingLocalServiceTest.class);
BundleContext bundleContext = bundle.getBundleContext();
ServiceReference<?> serviceReference =
bundleContext.getServiceReference(
"com.liferay.calendar.web.internal.messaging." +
"CheckBookingsMessageListener");
_checkBookingMessageListener = bundleContext.getService(
serviceReference);
ReflectionTestUtil.setFieldValue(
_checkBookingMessageListener, "_calendarBookingLocalService",
ProxyUtil.newProxyInstance(
CalendarBookingLocalService.class.getClassLoader(),
new Class<?>[] {CalendarBookingLocalService.class},
new InvocationHandler() {
@Override
public Object invoke(
Object proxy, Method method, Object[] args)
throws Throwable {
if ("checkCalendarBookings".equals(method.getName())) {
return null;
}
return method.invoke(
CalendarBookingLocalServiceUtil.getService(), args);
}
}));
}
protected void tearDownCheckBookingMessageListener() {
ReflectionTestUtil.setFieldValue(
_checkBookingMessageListener, "_calendarBookingLocalService",
CalendarBookingLocalServiceUtil.getService());
}
private static final TimeZone _losAngelesTimeZone = TimeZone.getTimeZone(
"America/Los_Angeles");
private static final TimeZone _utcTimeZone = TimeZoneUtil.getTimeZone(
StringPool.UTC);
private Object _checkBookingMessageListener;
@DeleteAfterTestRun
private User _invitingUser;
@DeleteAfterTestRun
private User _user;
}