/*
* 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.validation.settings;
import static org.junit.Assert.assertTrue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import org.eurekastreams.commons.actions.context.ActionContext;
import org.eurekastreams.commons.exceptions.ValidationException;
import org.eurekastreams.commons.test.IsEqualInternally;
import org.eurekastreams.server.domain.Person;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.search.modelview.PersonModelView;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* Test for UpdateSystemSettingsValidation class.
*
*/
public class UpdateSystemSettingsValidationTest
{
/** Used for mocking objects. */
private JUnit4Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* Mapper to get people by ids.
*/
private DomainMapper<List<Long>, List<PersonModelView>> peopleByIdsMapper = context.mock(DomainMapper.class,
"peopleByIdsMapper");
/**
* Admins set.
*/
private HashSet<Person> admins;
/**
* Mocked admin person.
*/
private final Person admin = context.mock(Person.class, "admin1");
/**
* Modelview for the admin.
*/
private PersonModelView adminModelView;
/**
* Admin ids.
*/
private ArrayList<Long> adminIds;
/**
* ID of the admin.
*/
private final Long adminId = 2828L;
/**
* Admin account id.
*/
private String adminAccountId = "adminaccountid";
/**
* List of person modelviews returned from peopleByIdsMapper.
*/
private ArrayList<PersonModelView> adminModelViews;
/**
* {@link ActionContext}.
*/
private ActionContext actionContext = context.mock(ActionContext.class);
/**
* {@link UpdateSystemSettingsValidation} system under test.
*/
private UpdateSystemSettingsValidation sut = new UpdateSystemSettingsValidation(peopleByIdsMapper);
/**
* Setup method.
*/
@Before
public void setup()
{
admins = new HashSet<Person>();
admins.add(admin);
adminIds = new ArrayList<Long>();
adminIds.add(adminId);
adminModelViews = new ArrayList<PersonModelView>();
adminModelView = new PersonModelView();
adminModelView.setEntityId(adminId);
adminModelView.setAccountId(adminAccountId);
adminModelViews.add(adminModelView);
context.checking(new Expectations()
{
{
allowing(admin).getId();
will(returnValue(adminId));
allowing(admin).getAccountId();
will(returnValue(adminAccountId));
}
});
}
/**
* Get a valid map of parameters.
*
* @return a valid map of parameters
*/
private HashMap<String, Serializable> getSuccessMap()
{
final HashMap<String, Serializable> formData = new HashMap<String, Serializable>();
formData.put("contentExpiration", 1);
formData.put("termsOfService", "tos");
formData.put("siteLabel", "sl");
formData.put("contentWarningText", "cw");
formData.put("streamViewId", 9L);
formData.put("admins", admins);
return formData;
}
/**
* Test validateParams() with valid inputs.
*/
@Test
public void validateParamsWithMap()
{
final HashMap<String, Serializable> formData = getSuccessMap();
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
oneOf(peopleByIdsMapper).execute(with(IsEqualInternally.equalInternally(adminIds)));
will(returnValue(adminModelViews));
}
});
sut.validate(actionContext);
context.assertIsSatisfied();
}
/**
* Test validateParams() with locked admin.
*/
@Test(expected = ValidationException.class)
public void validateParamsWithLockedAdmin()
{
final HashMap<String, Serializable> formData = getSuccessMap();
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
oneOf(peopleByIdsMapper).execute(with(IsEqualInternally.equalInternally(adminIds)));
will(returnValue(adminModelViews));
}
});
adminModelView.setAccountLocked(true);
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("admins"));
Assert.assertEquals(UpdateSystemSettingsValidation.SYSTEM_ADMINISTRATOR_LOCKED_OUT_ERROR_MESSAGE
+ adminAccountId, ve.getErrors().get("admins"));
throw ve;
}
context.assertIsSatisfied();
}
/**
* Test validateParams() with no admins listed.
*/
@Test(expected = ValidationException.class)
public void validateParamsWithNoAdmins()
{
final HashMap<String, Serializable> formData = getSuccessMap();
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
admins.clear();
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("admins"));
Assert.assertEquals(UpdateSystemSettingsValidation.SYSTEM_ADMINISTRATORS_EMPTY_ERROR_MESSAGE, ve
.getErrors().get("admins"));
throw ve;
}
context.assertIsSatisfied();
}
/**
* Test validateParams() with no admins listed.
*/
@Test(expected = ValidationException.class)
public void validateParamsWithAdminNotFound()
{
final HashMap<String, Serializable> formData = getSuccessMap();
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
oneOf(peopleByIdsMapper).execute(with(IsEqualInternally.equalInternally(adminIds)));
will(returnValue(new ArrayList<PersonModelView>()));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("admins"));
Assert.assertEquals(UpdateSystemSettingsValidation.SYSTEM_ADMINISTRATOR_NOTFOUND_ERROR_MESSAGE
+ adminAccountId, ve.getErrors().get("admins"));
throw ve;
}
context.assertIsSatisfied();
}
/**
* Test validateParams() with admins not found.
*/
@Test(expected = ValidationException.class)
public void validateParamsWithAdmins()
{
final HashMap<String, Serializable> formData = getSuccessMap();
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
oneOf(peopleByIdsMapper).execute(with(IsEqualInternally.equalInternally(adminIds)));
will(returnValue(adminModelViews));
}
});
adminModelViews.clear();
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("admins"));
Assert.assertEquals(UpdateSystemSettingsValidation.SYSTEM_ADMINISTRATOR_NOTFOUND_ERROR_MESSAGE
+ adminAccountId, ve.getErrors().get("admins"));
throw ve;
}
context.assertIsSatisfied();
}
/**
* Test validateParams() with valid inputs.
*/
@Test(expected = ValidationException.class)
public void validateParamsNoParams()
{
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(null));
}
});
sut.validate(actionContext);
context.assertIsSatisfied();
}
/**
* Test validateParams() with invalid data.
*/
@Test(expected = ValidationException.class)
public void validateParamsBadData()
{
final HashMap<String, Serializable> formData = new HashMap<String, Serializable>();
formData.put("termsOfService", null);
formData.put("siteLabel", null);
formData.put("contentWarningText", null);
formData.put("contentExpiration", false);
formData.put("tosPromptInterval", "notvalid");
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("termsOfService"));
assertTrue(ve.getErrors().containsKey("siteLabel"));
assertTrue(ve.getErrors().containsKey("contentWarningText"));
assertTrue(ve.getErrors().containsKey("contentExpiration"));
assertTrue(ve.getErrors().containsKey("tosPromptInterval"));
throw ve;
}
}
/**
* Test validateParams() with more invalid data.
*/
@Test(expected = ValidationException.class)
public void validateParamsMoreBadData()
{
final HashMap<String, Serializable> formData = new HashMap<String, Serializable>();
formData.put("contentExpiration", -1);
formData.put("tosPromptInterval", -1);
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("contentExpiration"));
assertTrue(ve.getErrors().containsKey("tosPromptInterval"));
throw ve;
}
}
/**
* Test validateParams() with data that is too large for the fields.
*/
@Test(expected = ValidationException.class)
public void validateParamsTooLargeData()
{
final HashMap<String, Serializable> formData = new HashMap<String, Serializable>();
String over50Chars = "Lorem ipsum dolor sit amet, consectetur massa nunc. ";
String over255Chars = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis quis sem a eros"
+ " consequat facilisis non quis justo. Etiam vel dolor lacus, id bibendum ante. Curabitur dapibus,"
+ " nunc a semper tristique, orci sapien feugiat nisi, sed pharetra metus ipsum metus. ";
String over1000Chars = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempor"
+ " feugiat diam vel elementum. Donec magna velit, molestie et vehicula at, vehicula congue"
+ " risus. Curabitur pulvinar convallis metus, sed laoreet augue dapibus non. Nullam pretium"
+ " congue ante id adipiscing. Proin quis consectetur lacus. Sed ac nisl nec tellus pretium"
+ " accumsan. Sed orci massa, volutpat nec tincidunt in, condimentum non ligula. Ut varius"
+ " egestas ullamcorper. Mauris commodo, lorem sed volutpat semper, sem nunc dapibus diam, vitae"
+ " auctor felis massa ac neque. Etiam tempor arcu eu mi aliquet ac scelerisque eros sollicitudin."
+ " Praesent sed est volutpat tellus porttitor suscipit. Suspendisse et quam nec magna porttitor"
+ " vulputate vitae id magna. Suspendisse vestibulum ipsum eget leo molestie imperdiet. Aenean"
+ " vel justo nisl. Donec felis justo, molestie eu dignissim faucibus, aliquam eu augue. Nullam"
+ " a arcu justo, consectetur tempor nulla. Curabitur elementum euismod neque, vel adipiscing"
+ " ligula dignissim vel metus. ";
String over2000Chars = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempor"
+ " feugiat diam vel elementum. Donec magna velit, molestie et vehicula at, vehicula congue"
+ " risus. Curabitur pulvinar convallis metus, sed laoreet augue dapibus non. Nullam pretium"
+ " congue ante id adipiscing. Proin quis consectetur lacus. Sed ac nisl nec tellus pretium"
+ " accumsan. Sed orci massa, volutpat nec tincidunt in, condimentum non ligula. Ut varius"
+ " egestas ullamcorper. Mauris commodo, lorem sed volutpat semper, sem nunc dapibus diam, vitae"
+ " auctor felis massa ac neque. Etiam tempor arcu eu mi aliquet ac scelerisque eros sollicitudin."
+ " Praesent sed est volutpat tellus porttitor suscipit. Suspendisse et quam nec magna porttitor"
+ " vulputate vitae id magna. Suspendisse vestibulum ipsum eget leo molestie imperdiet. Aenean"
+ " vel justo nisl. Donec felis justo, molestie eu dignissim faucibus, aliquam eu augue. Nullam"
+ " a arcu justo, consectetur tempor nulla. Curabitur elementum euismod neque, vel adipiscing"
+ " feugiat diam vel elementum. Donec magna velit, molestie et vehicula at, vehicula congue"
+ " risus. Curabitur pulvinar convallis metus, sed laoreet augue dapibus non. Nullam pretium"
+ " congue ante id adipiscing. Proin quis consectetur lacus. Sed ac nisl nec tellus pretium"
+ " accumsan. Sed orci massa, volutpat nec tincidunt in, condimentum non ligula. Ut varius"
+ " egestas ullamcorper. Mauris commodo, lorem sed volutpat semper, sem nunc dapibus diam, vitae"
+ " auctor felis massa ac neque. Etiam tempor arcu eu mi aliquet ac scelerisque eros sollicitudin."
+ " Praesent sed est volutpat tellus porttitor suscipit. Suspendisse et quam nec magna porttitor"
+ " vulputate vitae id magna. Suspendisse vestibulum ipsum eget leo molestie imperdiet. Aenean"
+ " vel justo nisl. Donec felis justo, molestie eu dignissim faucibus, aliquam eu augue. Nullam"
+ " accumsan. Sed orci massa, volutpat nec tincidunt in, condimentum non ligula. Ut varius"
+ " egestas ullamcorper. Mauris commodo, lorem sed volutpat semper, sem nunc dapibus diam, vitae"
+ " auctor felis massa ac neque. Etiam tempor arcu eu mi aliquet ac scelerisque eros sollicitudin."
+ " Praesent sed est volutpat tellus porttitor suscipit. Suspendisse et quam nec magna porttitor"
+ " vulputate vitae id magna. Suspendisse vestibulum ipsum eget leo molestie imperdiet. Aenean"
+ " vel justo nisl. Donec felis justo, molestie eu dignissim faucibus, aliquam eu augue. Nullam"
+ " a arcu justo, consectetur tempor nulla. Curabitur elementum euismod neque, vel adipiscing"
+ " feugiat diam vel elementum. Donec magna velit, molestie et vehicula at, vehicula congue"
+ " risus. Curabitur pulvinar convallis metus, sed laoreet augue dapibus non. Nullam pretium"
+ " congue ante id adipiscing. Proin quis consectetur lacus. Sed ac nisl nec tellus pretium"
+ " accumsan. Sed orci massa, volutpat nec tincidunt in, condimentum non ligula. Ut varius"
+ " egestas ullamcorper. Mauris commodo, lorem sed volutpat semper, sem nunc dapibus diam, vitae"
+ " auctor felis massa ac neque. Etiam tempor arcu eu mi aliquet ac scelerisque eros sollicitudin."
+ " Praesent sed est volutpat tellus porttitor suscipit. Suspendisse et quam nec magna porttitor"
+ " vulputate vitae id magna. Suspendisse vestibulum ipsum eget leo molestie imperdiet. Aenean"
+ " vel justo nisl. Donec felis justo, molestie eu dignissim faucibus, aliquam eu augue. Nullam"
+ " a arcu justo, consectetur tempor nulla. Curabitur elementum euismod neque, vel adipisci"
+ " ligula dignissim vel metus. ";
formData.put("siteLabel", over2000Chars);
formData.put("contentWarningText", over2000Chars);
formData.put("termsOfService", over1000Chars);
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("siteLabel"));
assertTrue(ve.getErrors().containsKey("contentWarningText"));
throw ve;
}
}
}