View Javadoc

1   package org.cateproject.controller.user;
2   
3   import org.easymock.EasyMock;
4   import org.junit.Assert;
5   import org.junit.Before;
6   import org.junit.Test;
7   
8   import org.springframework.security.provisioning.UserDetailsManager;
9   import org.springframework.validation.BindException;
10  import org.springframework.validation.FieldError;
11  import org.unitils.UnitilsJUnit4;
12  import org.unitils.easymock.annotation.Mock;
13  import org.unitils.inject.annotation.InjectInto;
14  import org.unitils.inject.annotation.TestedObject;
15  
16  import com.octo.captcha.service.image.ImageCaptchaService;
17  
18  public class RegistrationFormValidatorTest extends UnitilsJUnit4 {
19  	
20  	@Mock
21  	@InjectInto(property = "userDetailsManager")
22  	private UserDetailsManager userDetailsManager;
23  	
24  	@Mock
25  	@InjectInto(property = "imageCaptchaService")
26  	private ImageCaptchaService imageCaptchaService;
27  	
28  	@Mock
29  	@InjectInto(property = "passwordValidator")
30  	private PasswordValidator passwordValidator;
31  	
32  	@TestedObject
33  	private RegistrationFormValidator registrationFormValidator;
34  	
35  	private BindException errors;
36  	
37  	private RegistrationForm form;
38  	
39      @Before
40  	public void setUp() {
41  		registrationFormValidator = new RegistrationFormValidator();
42  		userDetailsManager = EasyMock.createMock(UserDetailsManager.class);
43  		imageCaptchaService = EasyMock.createMock(ImageCaptchaService.class);
44  		passwordValidator = EasyMock.createMock(PasswordValidator.class);
45  		
46  		form = new RegistrationForm();		
47  		form.setUserName("ben");
48  		form.setPassword("sPePhAz6");
49  		form.setConfirmPassword("sPePhAz6");
50  		form.setEmailAddress("benjamin.clark@ic.ac.uk");
51  		form.setCaptchaId("xyz");
52  		form.setCaptchaResponse("123");
53  		
54  		errors = new BindException(form,"form");
55  	}
56  	
57      @Test
58  	public void testValidatorWithCorrectData() throws Exception	{		
59  		EasyMock.expect(imageCaptchaService.validateResponseForID(EasyMock.eq("xyz"), EasyMock.eq("123"))).andReturn(true).anyTimes();
60  		EasyMock.expect(userDetailsManager.userExists(EasyMock.eq("ben"))).andReturn(Boolean.FALSE);
61  		EasyMock.expect(passwordValidator.checkPassword(EasyMock.eq("sPePhAz6"))).andReturn(PasswordMessage.PASSWORD_OK);
62  		EasyMock.replay(imageCaptchaService,userDetailsManager,passwordValidator);
63  		
64  		registrationFormValidator.validate(form, errors);
65  		EasyMock.verify(imageCaptchaService,userDetailsManager,passwordValidator);
66  		
67  		Assert.assertFalse(errors.hasErrors());		
68  	}
69  	
70      @Test
71  	public void testValidatorWithWeakPassword() throws Exception	{		
72  		EasyMock.expect(imageCaptchaService.validateResponseForID(EasyMock.eq("xyz"), EasyMock.eq("123"))).andReturn(true).anyTimes();
73  		EasyMock.expect(userDetailsManager.userExists(EasyMock.eq("ben"))).andReturn(Boolean.FALSE);
74  		EasyMock.expect(passwordValidator.checkPassword(EasyMock.eq("ben"))).andReturn(PasswordMessage.PASSWORD_TOO_SHORT);
75  		EasyMock.replay(imageCaptchaService,userDetailsManager,passwordValidator);
76  		
77  		form.setPassword("ben");
78  		form.setConfirmPassword("ben");
79  		
80  		registrationFormValidator.validate(form, errors);
81  		
82  		EasyMock.verify(imageCaptchaService,userDetailsManager,passwordValidator);
83  		
84  		Assert.assertTrue(errors.hasErrors());
85  		Assert.assertTrue(errors.hasFieldErrors("password"));
86  		FieldError fieldError = errors.getFieldError("password");
87  		Assert.assertEquals(fieldError.getCode(),"PasswordValidator.tooShort");
88  	}
89  	
90      @Test
91  	public void testValidatorWithNonMatchingPassword() throws Exception	{		
92  		EasyMock.expect(imageCaptchaService.validateResponseForID(EasyMock.eq("xyz"), EasyMock.eq("123"))).andReturn(true).anyTimes();
93  		EasyMock.expect(userDetailsManager.userExists(EasyMock.eq("ben"))).andReturn(Boolean.FALSE);
94  		EasyMock.expect(passwordValidator.checkPassword(EasyMock.eq("sPePhAz6"))).andReturn(PasswordMessage.PASSWORD_OK);
95  		
96  		EasyMock.replay(imageCaptchaService,userDetailsManager,passwordValidator);
97  		
98  		form.setPassword("sPePhAz6");
99  		form.setConfirmPassword("tPePhAz6");
100 		
101 		registrationFormValidator.validate(form, errors);
102 		EasyMock.verify(imageCaptchaService,userDetailsManager,passwordValidator);
103 		
104 		Assert.assertTrue(errors.hasErrors());
105 		Assert.assertTrue(errors.hasFieldErrors("confirmPassword"));
106 		FieldError fieldError = errors.getFieldError("confirmPassword");
107 		Assert.assertEquals(fieldError.getCode(),"passwords.do.not.match");
108 	}
109 	
110     @Test
111 	public void testValidatorWithExistingUsername() throws Exception	{		
112 		EasyMock.expect(imageCaptchaService.validateResponseForID(EasyMock.eq("xyz"), EasyMock.eq("123"))).andReturn(true).anyTimes();
113 		EasyMock.expect(userDetailsManager.userExists(EasyMock.eq("bill"))).andReturn(Boolean.TRUE);
114 		EasyMock.expect(passwordValidator.checkPassword(EasyMock.eq("sPePhAz6"))).andReturn(PasswordMessage.PASSWORD_OK);
115 		EasyMock.replay(imageCaptchaService,userDetailsManager,passwordValidator);
116 		
117 		form.setUserName("bill");
118 		
119 		registrationFormValidator.validate(form, errors);
120 		EasyMock.verify(imageCaptchaService,userDetailsManager,passwordValidator);
121 		
122 		Assert.assertTrue(errors.hasErrors());
123 		Assert.assertTrue(errors.hasFieldErrors("username"));
124 		FieldError fieldError = errors.getFieldError("username");
125 		Assert.assertEquals(fieldError.getCode(),"invalid.username");
126 	}
127 	
128     @Test
129 	public void testValidatorWithInvalidEmail() throws Exception	{		
130 		EasyMock.expect(imageCaptchaService.validateResponseForID(EasyMock.eq("xyz"), EasyMock.eq("123"))).andReturn(true).anyTimes();
131 		EasyMock.expect(userDetailsManager.userExists(EasyMock.eq("ben"))).andReturn(Boolean.FALSE);
132 		EasyMock.expect(passwordValidator.checkPassword(EasyMock.eq("sPePhAz6"))).andReturn(PasswordMessage.PASSWORD_OK);
133 		EasyMock.replay(imageCaptchaService,userDetailsManager,passwordValidator);
134 		
135 		form.setEmailAddress("invalid.email");
136 		
137 		registrationFormValidator.validate(form, errors);
138 		EasyMock.verify(imageCaptchaService,userDetailsManager,passwordValidator);
139 		
140 		Assert.assertTrue(errors.hasErrors());
141 		Assert.assertTrue(errors.hasFieldErrors("emailAddress"));
142 		FieldError fieldError = errors.getFieldError("emailAddress");
143 		Assert.assertEquals(fieldError.getCode(),"invalid.emailAddress");
144 	}
145 }