/*
* 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.HashMap;
import org.eurekastreams.commons.actions.context.ActionContext;
import org.eurekastreams.commons.exceptions.ValidationException;
import org.eurekastreams.server.persistence.mappers.stream.GetDomainGroupsByShortNames;
import org.eurekastreams.server.search.modelview.DomainGroupModelView;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
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 group by short name.
*/
private GetDomainGroupsByShortNames getGroupsByShortNamesMapper = context.mock(GetDomainGroupsByShortNames.class);
/**
* {@link ActionContext}.
*/
private ActionContext actionContext = context.mock(ActionContext.class);
/**
* {@link UpdateSystemSettingsValidation} system under test.
*/
private UpdateSystemSettingsValidation sut = new UpdateSystemSettingsValidation(getGroupsByShortNamesMapper);
/**
* Test validateParams() with valid inputs.
*/
@Test
public void validateParamsWithMap()
{
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("supportStreamGroupShortName", "abcdefg");
context.checking(new Expectations()
{
{
oneOf(getGroupsByShortNamesMapper).fetchUniqueResult("abcdefg");
will(returnValue(new DomainGroupModelView()));
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
sut.validate(actionContext);
context.assertIsSatisfied();
}
/**
* Test validateParams() with bad support group short name.
*/
@Test(expected = ValidationException.class)
public void validateParamsWithInvalidSupportGroupShortName()
{
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("supportStreamGroupShortName", "abcdefg");
context.checking(new Expectations()
{
{
oneOf(getGroupsByShortNamesMapper).fetchUniqueResult("abcdefg");
will(returnValue(null));
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("supportStreamGroupShortName"));
throw ve;
}
context.assertIsSatisfied();
}
/**
* Test validateParams() with empty support group short name (valid).
*/
@Test()
public void validateParamsWithEmptySupportGroupShortName()
{
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("supportStreamGroupShortName", "");
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
sut.validate(actionContext);
context.assertIsSatisfied();
}
/**
* Test validateParams() with null support group short name (valid).
*/
@Test()
public void validateParamsWithNullSupportGroupShortName()
{
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("supportStreamGroupShortName", null);
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
sut.validate(actionContext);
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("supportEmailAddress", "notvalid");
formData.put("contentExpiration", -1);
formData.put("tosPromptInterval", 0);
context.checking(new Expectations()
{
{
allowing(actionContext).getParams();
will(returnValue(formData));
}
});
try
{
sut.validate(actionContext);
}
catch (ValidationException ve)
{
context.assertIsSatisfied();
assertTrue(ve.getErrors().containsKey("supportEmailAddress"));
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", over255Chars);
formData.put("termsOfService", over1000Chars);
formData.put("supportPhoneNumber", over50Chars);
formData.put("supportEmailAddress", over50Chars);
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"));
assertTrue(ve.getErrors().containsKey("supportPhoneNumber"));
assertTrue(ve.getErrors().containsKey("supportEmailAddress"));
throw ve;
}
}
}