package com.pugh.sockso.web; import com.pugh.sockso.resources.Locale; import junit.framework.TestCase; import static org.easymock.EasyMock.*; public class SubmissionTest extends TestCase { private Locale locale; public void setUp() { locale = createNiceMock( Locale.class ); } public void testConstructor() { final Request req = createMock( Request.class ); replay( req ); final Submission s = new Submission( req, locale ); verify( req ); } public void testAddField() { final Request req = createMock( Request.class ); expect( req.getArgument("name") ).andReturn( "" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "name", Submission.FIELD_EMAIL ); verify( req ); } public void testAddFieldWithRequired() { final Request req = createMock( Request.class ); expect( req.getArgument("name") ).andReturn( "" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "name", Submission.FIELD_DATE, false ); verify( req ); } public void testAddFieldWithLocale() { final Request req = createMock( Request.class ); expect( req.getArgument("name") ).andReturn( "" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "name", Submission.FIELD_DATE, "errNoName" ); verify( req ); } public void testIsValid() { final Request req = createMock( Request.class ); expect( req.getArgument("name") ).andReturn( "foo" ).times( 1 ); expect( req.getArgument("myId") ).andReturn( "123" ).times( 1 ); expect( req.getArgument("theDate") ).andReturn( "01/02/2004" ).times( 1 ); expect( req.getArgument("email") ).andReturn( "foo@bar.com" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "name", Submission.FIELD_TEXT ); s.addField( "myId", Submission.FIELD_INTEGER ); s.addField( "theDate", Submission.FIELD_DATE ); s.addField( "email", Submission.FIELD_EMAIL ); assertTrue( s.isValid() ); verify( req ); } public void testInvalidRequiredEmail() { final Request req = createMock( Request.class ); expect( req.getArgument("email") ).andReturn( "A BAD EMAIL" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "email", Submission.FIELD_EMAIL ); assertFalse( s.isValid() ); verify( req ); } public void testMissingRequiredField() { final Request req = createMock( Request.class ); expect( req.getArgument("name") ).andReturn( "" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "name", Submission.FIELD_EMAIL ); assertFalse( s.isValid() ); verify( req ); } public void testBlankOptionalFields() { final Request req = createMock( Request.class ); expect( req.getArgument("email") ).andReturn( "" ).times( 1 ); expect( req.getArgument("int") ).andReturn( "" ).times( 1 ); expect( req.getArgument("text") ).andReturn( "" ).times( 1 ); expect( req.getArgument("date") ).andReturn( "" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "email", Submission.FIELD_EMAIL, false ); s.addField( "int", Submission.FIELD_INTEGER, false ); s.addField( "text", Submission.FIELD_TEXT, false ); s.addField( "date", Submission.FIELD_DATE, false ); assertTrue( s.isValid() ); verify( req ); } public void testInvalidIntegerField() { final Request req = createMock( Request.class ); expect( req.getArgument("myId") ).andReturn( "NOT AN INT" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "myId", Submission.FIELD_INTEGER ); assertFalse( s.isValid() ); verify( req ); } public void testInvalidDateField() { final Request req = createMock( Request.class ); expect( req.getArgument("theDate") ).andReturn( "NOT A DATE" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "theDate", Submission.FIELD_DATE ); assertFalse( s.isValid() ); verify( req ); } public void testGetErrors() { final Locale loc = createMock( Locale.class ); expect( loc.getString("errMyKey") ).andReturn( "foo" ).times( 1 ); replay( loc ); final Request req = createMock( Request.class ); expect( req.getArgument("theDate") ).andReturn( "NOT A DATE" ).times( 1 ); replay( req ); final Submission s = new Submission( req, loc ); s.addField( "theDate", Submission.FIELD_DATE, "errMyKey" ); final String[] errors = s.getErrors(); assertEquals( errors.length, 1 ); assertEquals( "foo", errors[0] ); verify( req ); verify( loc ); } public void testValidate() { final Request req = createMock( Request.class ); expect( req.getArgument("email") ).andReturn( "good@email.com" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "email", Submission.FIELD_EMAIL ); boolean gotException = false; try { s.validate(); } catch ( final BadRequestException e ) { gotException = true; } assertFalse( gotException ); } public void testValidateWithException() { final Request req = createMock( Request.class ); expect( req.getArgument("email") ).andReturn( "BAD EMAIL" ).times( 1 ); replay( req ); final Submission s = new Submission( req, locale ); s.addField( "email", Submission.FIELD_EMAIL ); boolean gotException = false; try { s.validate(); } catch ( final BadRequestException e ) { gotException = true; } assertTrue( gotException ); } public void testValidatingThatTwoFieldsMatch() { final Request req = createMock( Request.class ); expect( req.getArgument("pass1") ).andReturn( "one" ).times( 1 ); expect( req.getArgument("pass2") ).andReturn( "one" ).times( 1 ); replay( req ); Submission s = new Submission( req, locale ); boolean gotException = false; s.addMatchingFields( "pass1", "pass2", "" ); try { s.validate(); } catch ( BadRequestException e ) { gotException = true; } assertFalse( gotException ); } public void testValidatingThatTwoFieldsDontMatch() { final Request req = createMock( Request.class ); expect( req.getArgument("pass1") ).andReturn( "one" ).times( 1 ); expect( req.getArgument("pass2") ).andReturn( "two" ).times( 1 ); replay( req ); Submission s = new Submission( req, locale ); boolean gotException = false; s.addMatchingFields( "pass1", "pass2", "" ); try { s.validate(); } catch ( BadRequestException e ) { gotException = true; } assertTrue( gotException ); } }