/*
* 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 static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collection;
import org.eurekastreams.commons.actions.context.PrincipalActionContext;
import org.eurekastreams.server.action.request.profile.GetFollowersFollowingRequest;
import org.eurekastreams.server.domain.EntityType;
import org.eurekastreams.server.domain.PagedSet;
import org.eurekastreams.server.domain.Person;
import org.eurekastreams.server.persistence.DomainGroupMapper;
import org.eurekastreams.server.persistence.PersonMapper;
import org.eurekastreams.server.persistence.mappers.cache.PopulateOrgChildWithSkeletonParentOrgsCacheMapper;
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 for GetCurrentUserFollowingStatusExecution.
*/
@SuppressWarnings("unchecked")
public class GetFollowersExecutionTest
{
/**
* Context for building mock objects.
*/
private final Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* ActionContext mock.
*/
private PrincipalActionContext actionContext = context.mock(PrincipalActionContext.class);
/**
* PersonMapper used to retrieve person from the db.
*/
private PersonMapper personMapper = context.mock(PersonMapper.class);
/**
* GroupMapper used to retrieve a group if that's the target type.
*/
private DomainGroupMapper groupMapper = context.mock(DomainGroupMapper.class);
/**
* Mapper to populate OrganizationChildren's parentOrganization with skeleton orgs from cache.
*/
private PopulateOrgChildWithSkeletonParentOrgsCacheMapper orgChildrenSkeletonParentOrgPopulatorCacheMapper = context
.mock(PopulateOrgChildWithSkeletonParentOrgsCacheMapper.class);
/**
* Mocked request object.
*/
private GetFollowersFollowingRequest getFollowersFollowingRequest = context
.mock(GetFollowersFollowingRequest.class);
/**
* Subject under test.
*/
private GetFollowersExecution sut;
/**
* Account Id for the user whose profile is being viewed.
*/
private static final String TARGET_USER = "targetuser";
/**
* Account Id for the org whose profile is being viewed.
*/
private static final String TARGET_GROUP = "targetgroup";
/**
* Start value.
*/
private static final Integer START_VALUE = 40;
/**
* End value.
*/
private static final Integer END_VALUE = 100;
/**
* Setup method.
*/
@Before
public void setup()
{
sut = new GetFollowersExecution(personMapper, groupMapper, orgChildrenSkeletonParentOrgPopulatorCacheMapper);
}
/**
*
* @throws Exception
* exception.
*/
@Test
public void executePersonFollowers() throws Exception
{
// for now, manually update until the back end is ready
// this simulates a successful callback
ArrayList<Person> list = new ArrayList<Person>();
for (int i = 0; i < 8; i++)
{
Person p = new Person("secon" + i, "Stephen", "X", "Economopolus", "Steve");
p.setTitle("Chief Strategist");
list.add(p);
}
final PagedSet<Person> connections = new PagedSet<Person>(0, 7, 8, list);
context.checking(new Expectations()
{
{
oneOf(actionContext).getParams();
will(returnValue(getFollowersFollowingRequest));
oneOf(getFollowersFollowingRequest).getEntityId();
will(returnValue(TARGET_USER));
oneOf(getFollowersFollowingRequest).getEntityType();
will(returnValue(EntityType.PERSON));
oneOf(getFollowersFollowingRequest).getStartIndex();
will(returnValue(START_VALUE));
oneOf(getFollowersFollowingRequest).getEndIndex();
will(returnValue(END_VALUE));
oneOf(personMapper).getFollowers(TARGET_USER, START_VALUE, END_VALUE);
will(returnValue(connections));
oneOf(orgChildrenSkeletonParentOrgPopulatorCacheMapper).populateParentOrgSkeletons(
with(any(Collection.class)));
}
});
assertEquals((PagedSet<Person>) sut.execute(actionContext), connections);
context.assertIsSatisfied();
}
/**
*
* @throws Exception
* exception.
*/
@Test
public void executeGroupFollowers() throws Exception
{
// for now, manually update until the back end is ready
// this simulates a successful callback.
ArrayList<Person> list = new ArrayList<Person>();
for (int i = 0; i < 8; i++)
{
Person p = new Person("secon" + i, "Stephen", "X", "Economopolus", "Steve");
p.setTitle("Chief Strategist");
list.add(p);
}
final PagedSet<Person> connections = new PagedSet<Person>(0, 7, 8, list);
context.checking(new Expectations()
{
{
oneOf(actionContext).getParams();
will(returnValue(getFollowersFollowingRequest));
oneOf(getFollowersFollowingRequest).getEntityId();
will(returnValue(TARGET_GROUP));
oneOf(getFollowersFollowingRequest).getEntityType();
will(returnValue(EntityType.GROUP));
oneOf(getFollowersFollowingRequest).getStartIndex();
will(returnValue(START_VALUE));
oneOf(getFollowersFollowingRequest).getEndIndex();
will(returnValue(END_VALUE));
oneOf(groupMapper).getFollowers(TARGET_GROUP, START_VALUE, END_VALUE);
will(returnValue(connections));
oneOf(orgChildrenSkeletonParentOrgPopulatorCacheMapper).populateParentOrgSkeletons(
with(any(Collection.class)));
}
});
assertEquals((PagedSet<Person>) sut.execute(actionContext), connections);
context.assertIsSatisfied();
}
/**
*
* @throws Exception
* exception.
*/
@Test(expected = IllegalArgumentException.class)
public void executeWithBadTargetType() throws Exception
{
// for now, manually update until the back end is ready
// this simulates a successful callback.
ArrayList<Person> list = new ArrayList<Person>();
for (int i = 0; i < 8; i++)
{
Person p = new Person("secon" + i, "Stephen", "X", "Economopolus", "Steve");
p.setTitle("Chief Strategist");
list.add(p);
}
final PagedSet<Person> connections = new PagedSet<Person>(0, 7, 8, list);
context.checking(new Expectations()
{
{
oneOf(actionContext).getParams();
will(returnValue(getFollowersFollowingRequest));
oneOf(getFollowersFollowingRequest).getEntityId();
will(returnValue(TARGET_USER));
oneOf(getFollowersFollowingRequest).getEntityType();
will(returnValue(EntityType.NOTSET));
oneOf(getFollowersFollowingRequest).getStartIndex();
will(returnValue(START_VALUE));
oneOf(getFollowersFollowingRequest).getEndIndex();
will(returnValue(END_VALUE));
}
});
assertEquals((PagedSet<Person>) sut.execute(actionContext), connections);
context.assertIsSatisfied();
}
}