/* * Copyright (c) 2010 Lockheed Martin Corporation * * Licensed 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.eurekastreams.server.action.execution.profile; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eurekastreams.commons.actions.context.ActionContext; import org.eurekastreams.server.domain.EntityType; import org.eurekastreams.server.domain.Person; import org.eurekastreams.server.persistence.PersonMapper; import org.eurekastreams.server.persistence.mappers.cache.UpdateAuthorInfoInActivityEmbeddedCachedComments; import org.eurekastreams.server.persistence.mappers.cache.UpdateAuthorInfoInCachedActivities; import org.eurekastreams.server.persistence.mappers.cache.UpdateAuthorInfoInCachedComments; import org.eurekastreams.server.persistence.mappers.db.GetActivityCommentIdsAuthoredByPersonId; import org.eurekastreams.server.persistence.mappers.db.GetActivityIdsAuthoredByOrOriginallyAuthoredByEntity; import org.eurekastreams.server.persistence.mappers.db.GetActivityIdsWithFirstOrLastCommentsAuthoredByPersonId; import org.eurekastreams.server.service.security.userdetails.ExtendedUserDetails; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JUnit4Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.junit.Before; import org.junit.Test; /** * Test fixture for PersonActivityAvatarUpdaterExecution. */ public class PersonActivityAvatarUpdaterExecutionTest { /** * Context for building mock objects. */ private final Mockery context = new JUnit4Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; /** * Mocked GetActivityIdsAuthoredByEntity mapper. */ private final GetActivityIdsAuthoredByOrOriginallyAuthoredByEntity getActivityIdsAuthordedByEntityDbMapper = context .mock(GetActivityIdsAuthoredByOrOriginallyAuthoredByEntity.class); /** * Mocked GetActivityCommentIdsAuthoredByPersonId mapper. */ private final GetActivityCommentIdsAuthoredByPersonId getActivityCommentIdsAuthoredByPersonIdDbMapper = context .mock(GetActivityCommentIdsAuthoredByPersonId.class); /** * DB Mapper to get all the activity ids where the current user authored either their first or last comment. */ private final GetActivityIdsWithFirstOrLastCommentsAuthoredByPersonId // line break getActivityIdsWithFirstOrLastCommentsAuthoredByPersonIdDbMapper = context .mock(GetActivityIdsWithFirstOrLastCommentsAuthoredByPersonId.class); /** * Mocked UpdateAuthorAvatarInCachedActivities mapper. */ private final UpdateAuthorInfoInCachedActivities updateAuthorAvatarInCachedActivitiesCacheMapper = context .mock(UpdateAuthorInfoInCachedActivities.class); /** * Mocked UpdateAuthorAvatarInCachedComments mapper. */ private final UpdateAuthorInfoInCachedComments updateAuthorAvatarInCachedCommentsCacheMapper = context .mock(UpdateAuthorInfoInCachedComments.class); /** * Cache mapper that updates cached activity dtos by making the embedded comment dtos' author avatar ids current if * the input user authored either of them. */ private final UpdateAuthorInfoInActivityEmbeddedCachedComments // line break updateAuthorAvatarInActivityEmbeddedCachedCommentsCacheMapper = context .mock(UpdateAuthorInfoInActivityEmbeddedCachedComments.class); /** * Mocked PersonMapper mapper. */ private final PersonMapper personMapper = context.mock(PersonMapper.class); /** * Mocked user details. */ private final ExtendedUserDetails userMock = context.mock(ExtendedUserDetails.class); /** * Mocked person. */ private final Person personMock = context.mock(Person.class); /** * Person id. */ private final Long personId = 928372L; /** * System under test. */ private PersonAuthoredActivitiesAndCommentsCacheUpdater sut; /** * Setup method. */ @Before public void setup() { sut = new PersonAuthoredActivitiesAndCommentsCacheUpdater(getActivityIdsAuthordedByEntityDbMapper, getActivityCommentIdsAuthoredByPersonIdDbMapper, getActivityIdsWithFirstOrLastCommentsAuthoredByPersonIdDbMapper, updateAuthorAvatarInCachedActivitiesCacheMapper, updateAuthorAvatarInCachedCommentsCacheMapper, updateAuthorAvatarInActivityEmbeddedCachedCommentsCacheMapper, personMapper); } /** * Test performAction. */ @Test public void testPerformAction() { final String userAccountId = "lskdfj"; final String avatarId = "someAvatarId"; final Person p = new Person(); p.setAvatarId(avatarId); final List<Long> activityIds = new ArrayList<Long>(); activityIds.add(1L); final List<Long> commentIds = new ArrayList<Long>(); commentIds.add(2L); final List<Long> activitiesWithEmbeddedComments = new ArrayList<Long>(); activitiesWithEmbeddedComments.add(3L); context.checking(new Expectations() { { // setup the user details allowing(userMock).getPerson(); will(returnValue(personMock)); allowing(personMock).getAccountId(); will(returnValue(userAccountId)); allowing(personMock).getId(); will(returnValue(personId)); // when the person mapper is asked for the user, return the mock oneOf(personMapper).findById(with(personId)); will(returnValue(personMock)); // ... and will need to get the avatar from the person allowing(personMock).getAvatarId(); will(returnValue(avatarId)); // --- // action must ask for the activity ids for this person oneOf(getActivityIdsAuthordedByEntityDbMapper).execute(with(userAccountId), with(EntityType.PERSON)); will(returnValue(activityIds)); // those activity ids should be passed into the activity updater oneOf(updateAuthorAvatarInCachedActivitiesCacheMapper).execute(with(activityIds), with(personMock)); // --- // action must ask for the comment ids for this person oneOf(getActivityCommentIdsAuthoredByPersonIdDbMapper).execute(with(personId)); will(returnValue(commentIds)); // action must pass those ids to the comment updater oneOf(updateAuthorAvatarInCachedCommentsCacheMapper).execute(with(commentIds), with(personMock)); // --- // action must ask for the activity ids with embedded comments // authored by the current user oneOf(getActivityIdsWithFirstOrLastCommentsAuthoredByPersonIdDbMapper).execute(with(personId)); will(returnValue(activitiesWithEmbeddedComments)); // action must pass those ids into the embedded commment updater oneOf(updateAuthorAvatarInActivityEmbeddedCachedCommentsCacheMapper).execute( activitiesWithEmbeddedComments, personMock); } }); // perform sut sut.execute(new ActionContext() { @Override public Serializable getParams() { return personId; } @Override public Map<String, Object> getState() { return null; } @Override public String getActionId() { return null; } @Override public void setActionId(final String inActionId) { } }); context.assertIsSatisfied(); } }