/*
* Copyright (c) 2009-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.domain;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
import org.eurekastreams.server.domain.stream.StreamScope;
import org.eurekastreams.server.search.modelview.OrganizationModelView;
import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Before;
import org.junit.Test;
/**
* Organization test class.
*
*/
public class OrganizationTest
{
/**
* Context for building mock objects.
*/
private final Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* Subject under test.
*/
private Organization sut;
/**
* Org name.
*/
private static final String ORG_NAME = "Organization Name";
/**
* Short org name.
*/
private static final String SHORT_ORG_NAME = "OrgName";
/**
* Mission statement.
*/
private static final String MISSION_STATEMENT = "Mission statement goes here";
/**
* Overview.
*/
private static final String OVERVIEW = "This is the organization overview";
/**
* Set up the SUT.
*/
@Before
public void setup()
{
sut = new Organization(ORG_NAME, SHORT_ORG_NAME);
sut.setDescription(MISSION_STATEMENT);
}
/**
* Test the name getter.
*/
@Test
public void testConstructor()
{
assertEquals(ORG_NAME, sut.getName());
assertEquals(SHORT_ORG_NAME.toLowerCase(), sut.getShortName());
assertEquals(MISSION_STATEMENT, sut.getDescription());
}
/**
* Test the constructor that takes an OrganizationModelView.
*/
@Test
public void testModelViewConstructor()
{
final long orgId = 832L;
String shortName = "My ShortName";
String name = "My Name";
String bannerId = "mybannerid";
OrganizationModelView orgMv = new OrganizationModelView();
orgMv.setEntityId(orgId);
orgMv.setShortName(shortName);
orgMv.setName(name);
orgMv.setBannerId(bannerId);
Organization o = new Organization(orgMv);
assertEquals(orgId, o.getId());
assertEquals(shortName.toLowerCase(), o.getShortName().toLowerCase());
assertEquals(name, o.getName());
assertEquals(bannerId, o.getBannerId());
}
/**
* Test name.
*/
@Test
public void testName()
{
String message;
message = "property should be set";
String name = "org name here";
sut.setName(name);
assertEquals(message, name, sut.getName());
String newShortName = "newShortName";
sut.setShortName(newShortName);
assertEquals(message, newShortName.toLowerCase(), sut.getShortName());
// too long
message = "validation on properties";
char[] chars = new char[Organization.MAX_NAME_LENGTH + 1];
Arrays.fill(chars, 'a');
StringBuffer buffer = new StringBuffer();
buffer.append(chars);
sut.setName(buffer.toString());
ClassValidator<Organization> validator = new ClassValidator<Organization>(Organization.class);
InvalidValue[] invalidValues = validator.getInvalidValues(sut);
assertEquals(message, 1, invalidValues.length);
assertEquals(message, Organization.NAME_LENGTH_MESSAGE, invalidValues[0].getMessage());
}
/**
* Test setName().
*/
@Test
public void testSetName()
{
sut.setName("Foo");
assertEquals("Foo", sut.getName());
sut.setName(null);
assertEquals("", sut.getName());
}
/**
* Test updatesCount.
*/
@Test
public void testUpdatesCount()
{
sut.setUpdatesCount(3);
assertEquals(3, sut.getUpdatesCount());
}
/**
* Test get/set for StreamScope.
*/
@Test
public void testGetSetStreamScope()
{
StreamScope streamScopeMock = context.mock(StreamScope.class);
sut.setStreamScope(streamScopeMock);
assertEquals(streamScopeMock, sut.getStreamScope());
}
/**
* Test the parentOrgId property.
*/
@Test
public void testParentOrgId()
{
sut.setParentOrgId(4L);
assertEquals(new Long(4L), sut.getParentOrgId());
}
/**
* Test setMembershipCriteria.
*/
@Test
public void testSetMembershipCriteria()
{
sut.setAllUsersCanCreateGroups(true);
assertEquals(Boolean.TRUE, sut.getAllUsersCanCreateGroups());
sut.setAllUsersCanCreateGroups(false);
assertEquals(Boolean.FALSE, sut.getAllUsersCanCreateGroups());
}
/**
* Test the avatarId.
*/
@Test
public void testAvatarId()
{
sut.setAvatarId("IDABC");
assertEquals("IDABC", sut.getAvatarId());
}
/**
* Test setName().
*/
@Test
public void testSetShortName()
{
sut.setShortName("Fo");
assertEquals("fo", sut.getShortName());
sut.setShortName(null);
assertEquals("", sut.getShortName());
}
/**
* Test equals().
*/
@Test
public void testEquals()
{
final long id = 12342L;
Organization o1 = new Organization();
o1.setId(id);
Organization o2 = new Organization();
o2.setId(id);
assertTrue(o2.equals(o1));
assertFalse(o2.equals(id));
}
/**
* Test theme getter & setter.
*/
@Test
public void testUrl()
{
String value = "url here";
sut.setUrl(value);
assertEquals("property should be set", value, sut.getUrl());
}
/**
* Test url validation.
*/
@Test
public void testUrlInvalid()
{
String value = "httpx://www.google.com";
sut.setUrl(value);
ClassValidator<Organization> validator = new ClassValidator<Organization>(Organization.class);
InvalidValue[] invalidValues = validator.getInvalidValues(sut);
assertEquals("incorrect # of validation errors.", 1, invalidValues.length);
assertEquals("incorrect url message.", Organization.WEBSITE_MESSAGE, invalidValues[0].getMessage());
}
/**
* Test url validation.
*/
@Test
public void testUrlValid()
{
sut.setUrl("https://www.gOOgle_is_Nice.com/blah#anchor");
ClassValidator<Organization> validator = new ClassValidator<Organization>(Organization.class);
InvalidValue[] invalidValues = validator.getInvalidValues(sut);
assertEquals("incorrect # of validation errors.", 0, invalidValues.length);
}
/**
* test isCoordinator.
*/
@Test
public void testCoordinators()
{
Person a = new Person("a", "a", "a", "a", "a");
Person b = new Person("b", "b", "b", "b", "b");
sut.addCoordinator(a);
assertTrue(sut.isCoordinator(a.getAccountId()));
assertFalse(sut.isCoordinator(b.getAccountId()));
}
/**
* Test theme getter & setter.
*/
@Test
public void testMission()
{
String value = "missionhere";
sut.setDescription(value);
assertEquals("property should be set", value, sut.getDescription());
// too long
String message = "validation on properties";
char[] chars = new char[Organization.MAX_DESCRIPTION_LENGTH + 1];
Arrays.fill(chars, 'a');
StringBuffer buffer = new StringBuffer();
buffer.append(chars);
sut.setDescription(buffer.toString());
ClassValidator<Organization> validator = new ClassValidator<Organization>(Organization.class);
InvalidValue[] invalidValues = validator.getInvalidValues(sut);
assertEquals(message, 1, invalidValues.length);
assertEquals(message, Organization.DESCRIPTION_LENGTH_MESSAGE, invalidValues[0].getMessage());
}
/**
* Test overview.
*/
@Test
public void overview()
{
sut.setOverview(OVERVIEW);
assertEquals("Overview does not match", OVERVIEW, sut.getOverview());
}
/**
* Test theme getter & setter.
*/
@Test
public void testValidateMinCoordinators()
{
String message = "validation on coordinator properties";
sut = new Organization("org", "org");
sut.setDescription("statement");
Set<Person> coordinators = new TreeSet<Person>();
sut.setCoordinators(coordinators);
ClassValidator<Organization> validator = new ClassValidator<Organization>(Organization.class);
InvalidValue[] invalidValues = validator.getInvalidValues(sut);
// should be invalid when empty
assertEquals(message, 0, sut.getCoordinators().size());
assertEquals(message, 1, invalidValues.length);
assertEquals(message, Organization.MIN_COORDINATORS_MESSAGE, invalidValues[0].getMessage());
// should be valid when not empty
coordinators.add(new Person("a", "b", "c", "d", "e"));
assertEquals(message, 1, sut.getCoordinators().size());
invalidValues = validator.getInvalidValues(sut);
assertEquals(message, 0, invalidValues.length);
}
/**
* Test getter/setter for parent org - only used in serialization.
*/
@Test
public void testParentOrganization()
{
Organization parentOrg = new Organization("ParentOrganization", "parent org.");
sut.setParentOrganization(parentOrg);
assertEquals("ParentOrganization", sut.getParentOrganization().getName());
}
/**
* Test get/set of capabilities.
*/
@Test
public void testGetSetCapabilities()
{
final BackgroundItem backgroundItemMock = context.mock(BackgroundItem.class);
// verify that get on null collection returns empty list, not null;
assertNotNull(sut.getCapabilities());
// verify that get returns what set sets.
ArrayList<BackgroundItem> testList = new ArrayList<BackgroundItem>(1);
testList.add(backgroundItemMock);
sut.setCapabilities(testList);
assertEquals("get not returning same list as set assigned", 1, sut.getCapabilities().size());
}
/**
* Test the denormalization columns.
*/
@Test
public void testDenormalizedTotals()
{
final int descEmpCount = 38382;
final int descOrgCount = 28846;
final int descGroupCount = 84843;
final int followerCount = 38282;
Organization org = new Organization("foo", "Bar");
org.setDescendantEmployeeCount(descEmpCount);
org.setDescendantGroupCount(descGroupCount);
org.setChildOrganizationCount(descOrgCount);
org.setEmployeeFollowerCount(followerCount);
assertEquals(descEmpCount, org.getDescendantEmployeeCount());
assertEquals(descOrgCount, org.getChildOrganizationCount());
assertEquals(descGroupCount, org.getDescendantGroupCount());
assertEquals(followerCount, org.getEmployeeFollowerCount());
}
/**
* Test banner id getter & setter.
*/
@Test
public void testImages()
{
String avatar = "avatar";
String value = "id here";
Integer avatarCropX = 1;
Integer avatarCropY = 2;
Integer avatarCropSize = 3;
sut.setBannerId(value);
sut.setAvatarCropSize(avatarCropSize);
sut.setAvatarCropX(avatarCropX);
sut.setAvatarCropY(avatarCropY);
sut.setAvatarId(avatar);
assertEquals("property should be set", value, sut.getBannerId());
assertEquals(3, (int) sut.getAvatarCropSize());
assertEquals(1, (int) sut.getAvatarCropX());
assertEquals(2, (int) sut.getAvatarCropY());
assertEquals("property should be set", avatar, sut.getAvatarId());
}
/**
* Test root org predicate.
*/
@Test
public void testIsRootOrg()
{
Organization org1 = new Organization(ORG_NAME, SHORT_ORG_NAME);
org1.setId(1L);
Organization org7 = new Organization(ORG_NAME, SHORT_ORG_NAME);
org7.setId(7L);
sut.setId(7L);
// no parent set
assertFalse("Should be false if parent org is not set (hence unknown).", sut.isRootOrganization());
// set to self
sut.setParentOrganization(sut);
assertTrue("Should be true if parent org is set to self.", sut.isRootOrganization());
// set to another with same id
sut.setParentOrganization(org7);
assertTrue("Should be true if parent org has same id.", sut.isRootOrganization());
// set to another with different id
sut.setParentOrganization(org1);
assertFalse("Should be false if parent org has different id.", sut.isRootOrganization());
}
}