/*
* Copyright (c) 2009-2011 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.search.modelview;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import org.eurekastreams.commons.search.modelview.ModelView;
import org.eurekastreams.server.search.modelview.PersonModelView.Role;
import org.junit.Before;
import org.junit.Test;
/**
* Test fixture for PersonModelView.
*/
public class PersonModelViewTest
{
/**
* Test data.
*/
private final Date dateAdded = new Date();
/**
* Test data.
*/
private final String accountId = "sdlkfj23kjsd";
/**
* Test data.
*/
private final String title = "ljksd flksdj ld";
/**
* Test data.
*/
private final String parentOrganizationShortName = "heynow";
/**
* Test data.
*/
private final String parentOrganizationName = "hey now, whoa there";
/**
* Test data.
*/
private final String jobDescription = "Here ya have a guy...";
/**
* Test data.
*/
private final int followersCount = 3838;
/** Test data. */
private static final String LAST_NAME = "McNow";
/** Test data. */
private static final String PREFERRED_NAME = "Hey";
/** Test data. */
private final String displayName = PREFERRED_NAME + " " + LAST_NAME;
/**
* The person id.
*/
private final long personId = 38447L;
/**
* Search score.
*/
private final float searchScore = 775759L;
/**
* Person's avatar id.
*/
private final String avatarId = "lksdlkj23lkjsdfgkh";
/**
* The number of updates for this person.
*/
private final int updatesCount = 28382;
/**
* Stream id.
*/
private final long streamId = 1L;
/**
* CompositeStream id.
*/
private final long compositeStreamId = 2L;
/**
* ToS acceptance flag.
*/
private final boolean tosAcceptance = true;
/**
* Flag to determine if person's activities can be commented on.
*/
private final boolean commentable = false;
/**
* Flag to determine if person's stream can be posted on.
*/
private final boolean streamPostable = false;
/**
* Authentication type.
*/
private final AuthenticationType authenticationType = AuthenticationType.FORM;
/**
* IDs of related organizations.
*/
private List<Long> relatedOrganizationIds;
/**
* One of two related org ids for relatedOrganizationIds.
*/
private final Long relatedOrgId1 = 847L;
/**
* One of two related org ids for relatedOrganizationIds.
*/
private final Long relatedOrgId2 = 999L;
/** Test data: email address. */
private static final String EMAIL = "somebody@somewhere.com";
/**
* The date the user last accepted terms of service.
*/
private static Date lastAcceptedTermsOfService = new Date();
/**
* Setup method.
*/
@Before
public void setup()
{
relatedOrganizationIds = new ArrayList<Long>();
relatedOrganizationIds.add(relatedOrgId1);
relatedOrganizationIds.add(relatedOrgId2);
}
/**
* Test getEntityName().
*/
@Test
public void testGetEntityName()
{
assertEquals("Person", new PersonModelView().getEntityName());
}
/**
* Test the properties.
*/
@Test
public void testProperties()
{
PersonModelView sut = new PersonModelView();
// check initial state
assertDefaultValues(sut);
// set properties
sut.setDateAdded(dateAdded);
sut.setAccountId(accountId);
sut.setTitle(title);
sut.setParentOrganizationName(parentOrganizationName);
sut.setParentOrganizationShortName(parentOrganizationShortName);
sut.setDescription(jobDescription);
sut.setFollowersCount(followersCount);
sut.setLastName(LAST_NAME);
sut.setPreferredName(PREFERRED_NAME);
sut.setDisplayName(displayName);
sut.setAvatarId(avatarId);
sut.setUpdatesCount(updatesCount);
sut.setStreamId(streamId);
sut.setTosAcceptance(tosAcceptance);
sut.setAuthenticationType(authenticationType);
sut.setEmail(EMAIL);
sut.setCommentable(commentable);
sut.setStreamPostable(streamPostable);
sut.setRelatedOrganizationIds(relatedOrganizationIds);
sut.setLastAcceptedTermsOfService(lastAcceptedTermsOfService);
sut.setAccountLocked(true);
// check new state
assertAll(sut);
}
/**
* Test loading an empty property map keeps default values.
*/
@Test
public void testLoadEmptyProperties()
{
HashMap<String, Object> p = new HashMap<String, Object>();
PersonModelView sut = new PersonModelView();
sut.loadProperties(p);
assertDefaultValues(sut);
}
/**
* Test loading all properties.
*/
@Test
public void testLoadProperties()
{
HashMap<String, Object> p = new HashMap<String, Object>();
p.put("__HSearch_id", personId);
p.put("__HSearch_Score", searchScore);
p.put("dateAdded", dateAdded);
p.put("accountId", accountId);
p.put("title", title);
p.put("parentOrganizationName", parentOrganizationName);
p.put("parentOrganizationShortName", parentOrganizationShortName);
p.put("jobDescription", jobDescription);
p.put("preferredName", "Hey");
p.put("lastName", "McNow");
p.put("followersCount", followersCount);
p.put("updatesCount", updatesCount);
p.put("avatarId", avatarId);
p.put("updatesCount", updatesCount);
p.put("streamId", streamId);
p.put("compositeStreamId", compositeStreamId);
p.put("tosAcceptance", tosAcceptance);
p.put("authenticationType", authenticationType);
p.put("email", EMAIL);
p.put("commentable", commentable);
p.put("streamPostable", streamPostable);
p.put("relatedOrganizationIds", relatedOrganizationIds);
p.put("lastAcceptedTermsOfService", lastAcceptedTermsOfService);
p.put("accountLocked", Boolean.TRUE);
PersonModelView sut = new PersonModelView();
// test default
assertDefaultValues(sut);
// load the properties
sut.loadProperties(p);
HashSet<Role> roles = new HashSet<Role>();
sut.setRoles(roles);
assertEquals(roles, sut.getRoles());
// assert the properties
assertAll(sut);
// check search score as well
assertEquals(searchScore, sut.getSearchIndexScore(), 0);
}
/**
* Test helper method to assert the default values.
*
* @param sut
* the SUT
*/
private void assertDefaultValues(final PersonModelView sut)
{
assertEquals(null, sut.getDateAdded());
assertEquals(null, sut.getAccountId());
assertEquals(null, sut.getTitle());
assertEquals(null, sut.getParentOrganizationName());
assertEquals(null, sut.getParentOrganizationShortName());
assertEquals(null, sut.getDescription());
assertEquals(-1, sut.getFollowersCount());
assertEquals(ModelView.UNINITIALIZED_FLOAT_VALUE, sut.getSearchIndexScore(), 0);
assertEquals(null, sut.getLastName());
assertEquals(null, sut.getPreferredName());
assertEquals(null, sut.getDisplayName());
assertEquals(null, sut.getAvatarId());
assertEquals(-1, sut.getUpdatesCount());
assertEquals(-1, sut.getStreamId());
assertEquals(null, sut.getLastAcceptedTermsOfService());
assertEquals(false, sut.getTosAcceptance());
assertEquals(AuthenticationType.NOTSET, sut.getAuthenticationType());
assertEquals(null, sut.getEmail());
assertEquals(true, sut.isCommentable());
assertEquals(true, sut.isStreamPostable());
assertNull(sut.getRelatedOrganizationIds());
assertFalse(sut.isAccountLocked());
}
/**
* Test helper method to assert all properties.
*
* @param sut
* the SUT
*/
private void assertAll(final PersonModelView sut)
{
assertEquals(dateAdded, sut.getDateAdded());
assertEquals(accountId, sut.getAccountId());
assertEquals(title, sut.getTitle());
assertEquals(parentOrganizationName, sut.getParentOrganizationName());
assertEquals(parentOrganizationShortName, sut.getParentOrganizationShortName());
assertEquals(jobDescription, sut.getDescription());
assertEquals(followersCount, sut.getFollowersCount());
assertEquals(LAST_NAME, sut.getLastName());
assertEquals(PREFERRED_NAME, sut.getPreferredName());
assertEquals(displayName, sut.getDisplayName());
assertEquals(avatarId, sut.getAvatarId());
assertEquals(updatesCount, sut.getUpdatesCount());
assertEquals(streamId, sut.getStreamId());
assertEquals(tosAcceptance, sut.getTosAcceptance());
assertEquals(authenticationType, sut.getAuthenticationType());
assertEquals(EMAIL, sut.getEmail());
assertEquals(commentable, sut.isCommentable());
assertEquals(streamPostable, sut.isStreamPostable());
assertEquals(lastAcceptedTermsOfService, sut.getLastAcceptedTermsOfService());
assertArrayEquals(relatedOrganizationIds.toArray(), sut.getRelatedOrganizationIds().toArray());
assertEquals(sut.getEntityId(), sut.getId());
assertEquals(sut.getAccountId(), sut.getUniqueId());
assertTrue(sut.isAccountLocked());
}
}