package org.appfuse.webapp.pages;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.util.tester.FormTester;
import org.appfuse.model.User;
import org.appfuse.service.UserExistsException;
import org.appfuse.service.UserManager;
import org.junit.Test;
import org.springframework.web.context.support.StaticWebApplicationContext;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class UserFormTest extends BasePageTest {
private UserManager userManager;
@Override
protected void initSpringBeans(StaticWebApplicationContext context) {
super.initSpringBeans(context);
userManager = mock(UserManager.class);
context.getBeanFactory().registerSingleton("userManager", userManager);
UserForm userForm = new UserForm();
tester.startPage(userForm);
}
@Test
public void shouldDisplayErrorMessagesOnAddEmptyUser() {
//given
tester.assertRenderedPage(UserForm.class);
tester.assertNoErrorMessage();
tester.assertComponent("user-form", Form.class);
//when
tester.submitForm("user-form");
//then
tester.assertErrorMessages("'Username' is required.",
"'Password' is required.",
"'E-Mail' is required.");
}
@Test
public void shouldSaveUserAndRedirectToUserListOnSubmitUserWithRequiredData() throws UserExistsException {
//given
tester.assertRenderedPage(UserForm.class);
tester.assertNoErrorMessage();
FormTester formTester = tester.newFormTester("user-form");
assertEquals("", formTester.getTextComponentValue("username"));
User user = createTestUser();
//when
fillFormWithValuesFromUser(formTester, user);
formTester.submit("save");
//then
verify(userManager).saveUser(user);
tester.assertRenderedPage(UserList.class);
tester.assertNoErrorMessage();
tester.assertInfoMessages("User " + user.getFirstName() + " " + user.getLastName() +
" has been saved successfully.");
}
private User createTestUser() {
User user = new User("bravetester");
user.setPassword("secret");
user.setEmail("brave@tester.com");
user.setFirstName("Brave");
user.setLastName("Tester");
return user;
}
private void fillFormWithValuesFromUser(FormTester formTester, User user) {
formTester.setValue("username", user.getUsername());
formTester.setValue("password", user.getPassword());
formTester.setValue("email", user.getEmail());
formTester.setValue("firstName", user.getFirstName());
formTester.setValue("lastName", user.getLastName());
}
}