/** * 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.portal.workflow.kaleo.runtime.integration.impl.internal.util; import static com.liferay.portal.kernel.test.util.RandomTestUtil.randomLong; import static com.liferay.portal.kernel.util.StringUtil.randomString; import static com.liferay.portal.workflow.kaleo.runtime.integration.impl.internal.util.KaleoRuntimeTestUtil.assertWorkflowTaskAssignee; import static com.liferay.portal.workflow.kaleo.runtime.integration.impl.internal.util.KaleoRuntimeTestUtil.mockKaleoTaskAssignmentInstance; import static com.liferay.portal.workflow.kaleo.runtime.integration.impl.internal.util.KaleoRuntimeTestUtil.mockKaleoTaskInstanceToken; import com.liferay.portal.kernel.model.Role; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.test.util.RandomTestUtil; import com.liferay.portal.kernel.workflow.WorkflowTaskAssignee; import com.liferay.portal.workflow.kaleo.model.KaleoTaskAssignmentInstance; import com.liferay.portal.workflow.kaleo.model.KaleoTaskInstanceToken; import com.liferay.portal.workflow.kaleo.service.KaleoTaskAssignmentInstanceLocalService; import org.junit.Assert; import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.verification.VerificationMode; /** * @author Marcellus Tavares */ public class LazyWorkflowTaskAssigneeListTest { @Test public void testGetSizeWhenWorkflowTaskAssigneesIsLoaded() { KaleoTaskAssignmentInstance[] kaleoTaskAssignmentInstances = new KaleoTaskAssignmentInstance[] { mockKaleoTaskAssignmentInstance(Role.class.getName(), 1), mockKaleoTaskAssignmentInstance(User.class.getName(), 2) }; KaleoTaskInstanceToken kaleoTaskInstanceToken = mockKaleoTaskInstanceToken(kaleoTaskAssignmentInstances); KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService = Mockito.mock( KaleoTaskAssignmentInstanceLocalService.class); LazyWorkflowTaskAssigneeList lazyWorkflowTaskAssigneeList = new LazyWorkflowTaskAssigneeList( kaleoTaskInstanceToken, kaleoTaskAssignmentInstanceLocalService); lazyWorkflowTaskAssigneeList.initWorkflowTaskAssignees(); int actualSize = lazyWorkflowTaskAssigneeList.size(); verifyGetKaleoTaskAssignmentInstancesCountCall( kaleoTaskAssignmentInstanceLocalService, Mockito.never()); Assert.assertEquals(2, actualSize); } @Test public void testGetSizeWhenWorkflowTaskAssigneesIsNotLoaded() { KaleoTaskInstanceToken kaleoTaskInstanceToken = mockKaleoTaskInstanceToken(); long kaleoTaskInstanceTokenId = RandomTestUtil.randomLong(); Mockito.when( kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId() ).thenReturn( kaleoTaskInstanceTokenId ); KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService = Mockito.mock( KaleoTaskAssignmentInstanceLocalService.class); int expectedCount = RandomTestUtil.randomInt(); Mockito.when( kaleoTaskAssignmentInstanceLocalService. getKaleoTaskAssignmentInstancesCount( Matchers.eq(kaleoTaskInstanceTokenId)) ).thenReturn( expectedCount ); LazyWorkflowTaskAssigneeList lazyWorkflowTaskAssigneeList = new LazyWorkflowTaskAssigneeList( kaleoTaskInstanceToken, kaleoTaskAssignmentInstanceLocalService); int actualCount = lazyWorkflowTaskAssigneeList.size(); verifyGetKaleoTaskAssignmentInstancesCountCall( kaleoTaskAssignmentInstanceLocalService, Mockito.atLeastOnce()); Assert.assertEquals(expectedCount, actualCount); } @Test public void testGetWhenIndexIsGreaterThanZero() { KaleoTaskAssignmentInstance[] kaleoTaskAssignmentInstances = { mockKaleoTaskAssignmentInstance(Role.class.getName(), 1), mockKaleoTaskAssignmentInstance(User.class.getName(), 2) }; KaleoTaskInstanceToken kaleoTaskInstanceToken = mockKaleoTaskInstanceToken(kaleoTaskAssignmentInstances); KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService = Mockito.mock( KaleoTaskAssignmentInstanceLocalService.class); LazyWorkflowTaskAssigneeList lazyWorkflowTaskAssigneeList = new LazyWorkflowTaskAssigneeList( kaleoTaskInstanceToken, kaleoTaskAssignmentInstanceLocalService); WorkflowTaskAssignee workflowTaskAssignee = lazyWorkflowTaskAssigneeList.get(1); verifyGetKaleoTaskAssignmentInstancesCall( kaleoTaskInstanceToken, Mockito.atLeastOnce()); verifyGetFirstKaleoTaskAssignmentInstanceCall( kaleoTaskInstanceToken, Mockito.never()); assertWorkflowTaskAssignee( User.class.getName(), 2, workflowTaskAssignee); } @Test public void testGetWhenIndexIsZeroAndAssignmentIsNotNull() { String expectedAssigneeClassName = randomString(); long expectedAssigneeClassPK = randomLong(); KaleoTaskAssignmentInstance kaleoTaskAssignmentInstance = mockKaleoTaskAssignmentInstance( expectedAssigneeClassName, expectedAssigneeClassPK); KaleoTaskInstanceToken kaleoTaskInstanceToken = mockKaleoTaskInstanceToken(kaleoTaskAssignmentInstance); KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService = Mockito.mock( KaleoTaskAssignmentInstanceLocalService.class); LazyWorkflowTaskAssigneeList lazyWorkflowTaskAssigneeList = new LazyWorkflowTaskAssigneeList( kaleoTaskInstanceToken, kaleoTaskAssignmentInstanceLocalService); WorkflowTaskAssignee workflowTaskAssignee = lazyWorkflowTaskAssigneeList.get(0); verifyGetKaleoTaskAssignmentInstancesCall( kaleoTaskInstanceToken, Mockito.never()); verifyGetFirstKaleoTaskAssignmentInstanceCall( kaleoTaskInstanceToken, Mockito.atLeastOnce()); assertWorkflowTaskAssignee( expectedAssigneeClassName, expectedAssigneeClassPK, workflowTaskAssignee); } @Test(expected = IndexOutOfBoundsException.class) public void testGetWhenIndexIsZeroAndAssignmentIsNull() { KaleoTaskInstanceToken kaleoTaskInstanceToken = mockKaleoTaskInstanceToken(); KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService = Mockito.mock( KaleoTaskAssignmentInstanceLocalService.class); LazyWorkflowTaskAssigneeList lazyWorkflowTaskAssigneeList = new LazyWorkflowTaskAssigneeList( kaleoTaskInstanceToken, kaleoTaskAssignmentInstanceLocalService); lazyWorkflowTaskAssigneeList.get(0); } protected void verifyGetFirstKaleoTaskAssignmentInstanceCall( KaleoTaskInstanceToken kaleoTaskInstanceToken, VerificationMode verificationMode) { Mockito.verify( kaleoTaskInstanceToken, verificationMode ).getFirstKaleoTaskAssignmentInstance(); } protected void verifyGetKaleoTaskAssignmentInstancesCall( KaleoTaskInstanceToken kaleoTaskInstanceToken, VerificationMode verificationMode) { Mockito.verify( kaleoTaskInstanceToken, verificationMode ).getKaleoTaskAssignmentInstances(); } protected void verifyGetKaleoTaskAssignmentInstancesCountCall( KaleoTaskAssignmentInstanceLocalService kaleoTaskAssignmentInstanceLocalService, VerificationMode verificationMode) { Mockito.verify( kaleoTaskAssignmentInstanceLocalService, verificationMode ).getKaleoTaskAssignmentInstancesCount( Matchers.anyLong() ); } }