/*
* 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.persistence.mappers.cache;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eurekastreams.server.domain.EntityTestHelper;
import org.eurekastreams.server.domain.Person;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.search.modelview.OrganizationModelView;
import org.eurekastreams.server.search.modelview.PersonModelView;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Test;
/**
* Test fixture for PopulatePeopleWithSkeletonRelatedOrgsCacheMapper.
*/
public class PopulatePeopleWithSkeletonRelatedOrgsCacheMapperTest
{
/**
* Context for building mock objects.
*/
private final Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* Mapper to get organization modelviews by ids.
*/
private DomainMapper<List<Long>, List<OrganizationModelView>> getOrgsByIdsMapper = context.mock(DomainMapper.class,
"getOrgsByIds");
/**
* Mapper to get person modelviews by ids.
*/
private DomainMapper<List<Long>, List<PersonModelView>> getPeopleByIdsMapper = context.mock(DomainMapper.class,
"getPeopleByIds");
/**
* Test the execute method.
*/
@Test
public void testExecute()
{
final Person person = new Person();
final Long personId = 8273L;
final String org1Name = "Org 1";
final String org2Name = "Org 2";
EntityTestHelper.setPersonId(person, personId);
final OrganizationModelView orgMv1 = new OrganizationModelView();
orgMv1.setName(org1Name);
final OrganizationModelView orgMv2 = new OrganizationModelView();
orgMv2.setName(org2Name);
final List<OrganizationModelView> relatedOrgMvs = new ArrayList<OrganizationModelView>();
relatedOrgMvs.add(orgMv1);
relatedOrgMvs.add(orgMv2);
final List<Long> relatedOrgIds = new ArrayList<Long>();
PersonModelView pmv = new PersonModelView();
pmv.setEntityId(personId);
pmv.setRelatedOrganizationIds(relatedOrgIds);
final List<PersonModelView> pmvs = new ArrayList<PersonModelView>();
pmvs.add(pmv);
context.checking(new Expectations()
{
{
oneOf(getPeopleByIdsMapper).execute(with(equal(Collections.singletonList(personId))));
will(returnValue(pmvs));
oneOf(getOrgsByIdsMapper).execute(relatedOrgIds);
will(returnValue(relatedOrgMvs));
}
});
// Perform SUT
PopulatePeopleWithSkeletonRelatedOrgsCacheMapper sut = new PopulatePeopleWithSkeletonRelatedOrgsCacheMapper(
getOrgsByIdsMapper, getPeopleByIdsMapper);
sut.execute(person);
// ASSERT
assertEquals(2, person.getRelatedOrganizations().size());
assertTrue((person.getRelatedOrganizations().get(0).getName().equals(org1Name)
&& person.getRelatedOrganizations().get(1).getName().equals(org2Name) || (person
.getRelatedOrganizations().get(1).getName().equals(org1Name) && person.getRelatedOrganizations().get(0)
.getName().equals(org2Name))));
context.assertIsSatisfied();
}
}