package org.openmrs.web.controller; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import javax.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.openmrs.User; import org.openmrs.api.context.Context; import org.openmrs.api.db.LoginCredential; import org.openmrs.api.db.UserDAO; import org.openmrs.web.test.BaseWebContextSensitiveTest; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; public class OptionsFormControllerTest extends BaseWebContextSensitiveTest { private User user; private UserDAO userDao; private OptionsFormController controller; @Before public void setUp() { Context.authenticate("admin", "test"); user = Context.getAuthenticatedUser(); controller = (OptionsFormController) applicationContext.getBean("optionsForm"); userDao = (UserDAO) applicationContext.getBean("userDAO"); } @Test public void shouldChangeSecretQuestionAndAnswer() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("POST", ""); request.setParameter("secretQuestionPassword", "test"); request.setParameter("secretQuestionNew", "test_question"); String answer = "test_answer"; request.setParameter("secretAnswerNew", answer); request.setParameter("secretAnswerConfirm", answer); HttpServletResponse response = new MockHttpServletResponse(); controller.handleRequest(request, response); LoginCredential loginCredential = userDao.getLoginCredential(user); assertEquals(answer, loginCredential.getSecretAnswer()); } @Test public void shouldRejectEmptySecretAnswer() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("POST", ""); request.setParameter("secretQuestionPassword", "test"); request.setParameter("secretQuestionNew", "test_question"); String emptyAnswer = ""; request.setParameter("secretAnswerNew", emptyAnswer); request.setParameter("secretAnswerConfirm", emptyAnswer); HttpServletResponse response = new MockHttpServletResponse(); controller.handleRequest(request, response); LoginCredential loginCredential = userDao.getLoginCredential(user); assertNull(loginCredential.getSecretAnswer()); } @Test public void shouldRejectEmptySecretQuestion() throws Exception { LoginCredential loginCredential = userDao.getLoginCredential(user); String originalQuestion = loginCredential.getSecretQuestion(); MockHttpServletRequest request = new MockHttpServletRequest("POST", ""); request.setParameter("secretQuestionPassword", "test"); request.setParameter("secretQuestionNew", ""); String emptyAnswer = "test_answer"; request.setParameter("secretAnswerNew", emptyAnswer); request.setParameter("secretAnswerConfirm", emptyAnswer); HttpServletResponse response = new MockHttpServletResponse(); controller.handleRequest(request, response); loginCredential = userDao.getLoginCredential(user); assertEquals(originalQuestion, loginCredential.getSecretQuestion()); } }