/**
* 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.message.boards.comment.internal;
import com.liferay.message.boards.kernel.model.MBMessage;
import com.liferay.message.boards.kernel.model.MBMessageDisplay;
import com.liferay.message.boards.kernel.model.MBThread;
import com.liferay.message.boards.kernel.service.MBMessageLocalService;
import com.liferay.portal.kernel.comment.DuplicateCommentException;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.ReflectionTestUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.util.Function;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import java.util.Collections;
import java.util.List;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/**
* @author André de Oliveira
*/
public class MBCommentManagerImplTest extends Mockito {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
setUpMBCommentManagerImpl();
setUpPortalUtil();
setUpServiceContext();
ReflectionTestUtil.setFieldValue(
_mbCommentManagerImpl, "_portal", _portal);
}
@Test
public void testAddComment() throws Exception {
_mbCommentManagerImpl.addComment(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _BODY,
_serviceContextFunction);
Mockito.verify(
_mbMessageLocalService
).addDiscussionMessage(
_USER_ID, StringPool.BLANK, _GROUP_ID, _CLASS_NAME, _ENTRY_ID,
_THREAD_ID, _ROOT_MESSAGE_ID, StringPool.BLANK, _BODY,
_serviceContext
);
Mockito.verify(
_mbMessageLocalService
).getThreadMessages(
_THREAD_ID, WorkflowConstants.STATUS_APPROVED
);
}
@Test
public void testAddCommentWithUserNameAndSubject() throws Exception {
when(
_mbMessage.getMessageId()
).thenReturn(
_MBMESSAGE_ID
);
Assert.assertEquals(
_MBMESSAGE_ID,
_mbCommentManagerImpl.addComment(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _USER_NAME,
_SUBJECT, _BODY, _serviceContextFunction));
Mockito.verify(
_mbMessageLocalService
).addDiscussionMessage(
_USER_ID, _USER_NAME, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _THREAD_ID,
_ROOT_MESSAGE_ID, _SUBJECT, _BODY, _serviceContext
);
Mockito.verify(
_mbMessageLocalService
).getDiscussionMessageDisplay(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID,
WorkflowConstants.STATUS_APPROVED
);
}
@Test
public void testAddDiscussion() throws Exception {
_mbCommentManagerImpl.addDiscussion(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _USER_NAME);
Mockito.verify(
_mbMessageLocalService
).addDiscussionMessage(
_USER_ID, _USER_NAME, _GROUP_ID, _CLASS_NAME, _ENTRY_ID,
WorkflowConstants.ACTION_PUBLISH
);
}
@Test(expected = DuplicateCommentException.class)
public void testAddDuplicateComment() throws Exception {
setUpExistingComment(_BODY);
_mbCommentManagerImpl.addComment(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _BODY,
_serviceContextFunction);
}
@Test
public void testAddUniqueComment() throws Exception {
setUpExistingComment(_BODY + RandomTestUtil.randomString());
_mbCommentManagerImpl.addComment(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID, _BODY,
_serviceContextFunction);
Mockito.verify(
_mbMessageLocalService
).addDiscussionMessage(
_USER_ID, StringPool.BLANK, _GROUP_ID, _CLASS_NAME, _ENTRY_ID,
_THREAD_ID, _ROOT_MESSAGE_ID, StringPool.BLANK, _BODY,
_serviceContext
);
}
@Test
public void testDeleteComment() throws Exception {
_mbCommentManagerImpl.deleteComment(_MBMESSAGE_ID);
Mockito.verify(
_mbMessageLocalService
).deleteDiscussionMessage(
_MBMESSAGE_ID
);
}
@Test
public void testDeleteDiscussion() throws Exception {
long classPK = RandomTestUtil.randomLong();
_mbCommentManagerImpl.deleteDiscussion(_CLASS_NAME, classPK);
Mockito.verify(
_mbMessageLocalService
).deleteDiscussionMessages(
_CLASS_NAME, classPK
);
}
@Test
public void testFetchComment() throws Exception {
long commentId = RandomTestUtil.randomLong();
_mbCommentManagerImpl.fetchComment(commentId);
Mockito.verify(
_mbMessageLocalService
).fetchMBMessage(
commentId
);
}
@Test
public void testGetCommentsCount() throws Exception {
long classPK = RandomTestUtil.randomLong();
long classNameId = RandomTestUtil.randomLong();
int commentsCount = RandomTestUtil.randomInt();
Mockito.when(
_mbMessageLocalService.getDiscussionMessagesCount(
classNameId, classPK, WorkflowConstants.STATUS_APPROVED)
).thenReturn(
commentsCount
);
Mockito.when(
_portal.getClassNameId(_CLASS_NAME)
).thenReturn(
classNameId
);
Assert.assertEquals(
commentsCount,
_mbCommentManagerImpl.getCommentsCount(_CLASS_NAME, classPK));
}
protected void setUpExistingComment(String body) {
when(
_mbMessage.getBody()
).thenReturn(
body
);
List<MBMessage> messages = Collections.singletonList(_mbMessage);
when(
_mbMessageLocalService.getThreadMessages(
_THREAD_ID, WorkflowConstants.STATUS_APPROVED)
).thenReturn(
messages
);
}
protected void setUpMBCommentManagerImpl() throws Exception {
_mbCommentManagerImpl.setMBMessageLocalService(_mbMessageLocalService);
when(
_mbMessageDisplay.getThread()
).thenReturn(
_mbThread
);
when(
_mbMessageLocalService.addDiscussionMessage(
Matchers.anyLong(), Matchers.anyString(), Matchers.anyLong(),
Matchers.anyString(), Matchers.anyLong(), Matchers.anyLong(),
Matchers.anyLong(), Matchers.anyString(), Matchers.anyString(),
Matchers.<ServiceContext>any())
).thenReturn(
_mbMessage
);
when(
_mbMessageLocalService.getDiscussionMessageDisplay(
_USER_ID, _GROUP_ID, _CLASS_NAME, _ENTRY_ID,
WorkflowConstants.STATUS_APPROVED)
).thenReturn(
_mbMessageDisplay
);
when(
_mbThread.getRootMessageId()
).thenReturn(
_ROOT_MESSAGE_ID
);
when(
_mbThread.getThreadId()
).thenReturn(
_THREAD_ID
);
}
protected void setUpPortalUtil() {
PortalUtil portalUtil = new PortalUtil();
portalUtil.setPortal(_portal);
}
protected void setUpServiceContext() {
when(
_serviceContextFunction.apply(MBMessage.class.getName())
).thenReturn(
_serviceContext
);
}
private static final String _BODY = RandomTestUtil.randomString();
private static final String _CLASS_NAME = RandomTestUtil.randomString();
private static final long _ENTRY_ID = RandomTestUtil.randomLong();
private static final long _GROUP_ID = RandomTestUtil.randomLong();
private static final long _MBMESSAGE_ID = RandomTestUtil.randomLong();
private static final long _ROOT_MESSAGE_ID = RandomTestUtil.randomLong();
private static final String _SUBJECT = RandomTestUtil.randomString();
private static final long _THREAD_ID = RandomTestUtil.randomLong();
private static final long _USER_ID = RandomTestUtil.randomLong();
private static final String _USER_NAME = RandomTestUtil.randomString();
private final MBCommentManagerImpl _mbCommentManagerImpl =
new MBCommentManagerImpl();
@Mock
private MBMessage _mbMessage;
@Mock
private MBMessageDisplay _mbMessageDisplay;
@Mock
private MBMessageLocalService _mbMessageLocalService;
@Mock
private MBThread _mbThread;
@Mock
private Portal _portal;
private final ServiceContext _serviceContext = new ServiceContext();
@Mock
private Function<String, ServiceContext> _serviceContextFunction;
}