/sigmah/src/test/java/org/sigmah/server/bootstrap/ControllerTestCase.java

http://sigma-h.googlecode.com/ · Java · 140 lines · 105 code · 28 blank · 7 comment · 0 complexity · 59f11308cee9f52736ea87d63de9b5a8 MD5 · raw file

  1. /*
  2. * All Sigmah code is released under the GNU General Public License v3
  3. * See COPYRIGHT.txt and LICENSE.txt.
  4. */
  5. package org.sigmah.server.bootstrap;
  6. import com.google.inject.Injector;
  7. import org.easymock.IAnswer;
  8. import org.junit.Before;
  9. import org.sigmah.server.auth.Authenticator;
  10. import org.sigmah.server.bootstrap.model.ConfirmInvitePageModel;
  11. import org.sigmah.server.bootstrap.model.HostPageModel;
  12. import org.sigmah.server.bootstrap.model.LoginPageModel;
  13. import org.sigmah.server.bootstrap.model.PageModel;
  14. import org.sigmah.server.dao.AuthenticationDAO;
  15. import org.sigmah.shared.dao.UserDAO;
  16. import org.sigmah.server.domain.Authentication;
  17. import org.sigmah.shared.domain.User;
  18. import org.sigmah.server.mock.MockHttpServletRequest;
  19. import org.sigmah.server.mock.MockHttpServletResponse;
  20. import org.sigmah.server.mock.MockTemplateConfiguration;
  21. import javax.persistence.NoResultException;
  22. import javax.servlet.ServletException;
  23. import java.io.IOException;
  24. import static org.easymock.EasyMock.*;
  25. import static org.junit.Assert.assertEquals;
  26. /**
  27. * @author Alex Bertram
  28. */
  29. public abstract class ControllerTestCase {
  30. protected MockHttpServletRequest req;
  31. protected MockHttpServletResponse resp;
  32. protected Injector injector;
  33. protected MockTemplateConfiguration templateCfg;
  34. protected AbstractController controller;
  35. protected static final String USER_EMAIL = "alex@bertram.com";
  36. protected static final String CORRECT_USER_PASS = "mypass";
  37. protected static final String WRONG_USER_PASS = "notmypass";
  38. protected static final String NEW_AUTH_TOKEN = "XYZ123";
  39. protected static final String NEW_USER_KEY = "ABC456";
  40. protected static final String NEW_USER_EMAIL = "bart@bart.nl";
  41. protected static final String BAD_KEY = "muwahaha";
  42. protected User newUser;
  43. protected static final String NEW_USER_NAME = "Henry";
  44. protected static final String NEW_USER_CHOSEN_LOCALE = "fr";
  45. protected static final String GOOD_AUTH_TOKEN = "BXD556";
  46. protected static final String BAD_AUTH_TOKEN = "NONSENSE";
  47. public ControllerTestCase() {
  48. newUser = new User();
  49. }
  50. @Before
  51. public final void setUpDependencies() {
  52. req = new MockHttpServletRequest();
  53. resp = new MockHttpServletResponse();
  54. User user = new User();
  55. user.setEmail(USER_EMAIL);
  56. newUser.setEmail(NEW_USER_EMAIL);
  57. newUser.setNewUser(true);
  58. newUser.setChangePasswordKey(NEW_USER_KEY);
  59. UserDAO userDAO = createMock(UserDAO.class);
  60. expect(userDAO.findUserByEmail(USER_EMAIL)).andReturn(user);
  61. expect(userDAO.findUserByEmail(not(eq(USER_EMAIL)))).andThrow(new NoResultException());
  62. expect(userDAO.findUserByChangePasswordKey(NEW_USER_KEY)).andReturn(newUser);
  63. expect(userDAO.findUserByChangePasswordKey(BAD_KEY)).andThrow(new NoResultException());
  64. replay(userDAO);
  65. Authentication auth = new Authentication(user);
  66. auth.setId(GOOD_AUTH_TOKEN);
  67. AuthenticationDAO authDAO = createNiceMock(AuthenticationDAO.class);
  68. expect(authDAO.findById(eq(GOOD_AUTH_TOKEN))).andReturn(auth);
  69. authDAO.persist(isA(Authentication.class));
  70. expectLastCall().andAnswer(new IAnswer<Object>() {
  71. @Override
  72. public Object answer() throws Throwable {
  73. Authentication auth = (Authentication) getCurrentArguments()[0];
  74. auth.setId(NEW_AUTH_TOKEN);
  75. return null;
  76. }
  77. });
  78. replay(authDAO);
  79. Authenticator authenticator = createMock(Authenticator.class);
  80. expect(authenticator.check(eq(user), eq(WRONG_USER_PASS))).andReturn(false);
  81. expect(authenticator.check(eq(user), eq(CORRECT_USER_PASS))).andReturn(true);
  82. replay(authenticator);
  83. injector = createNiceMock(Injector.class);
  84. expect(injector.getInstance(AuthenticationDAO.class)).andReturn(authDAO);
  85. expect(injector.getInstance(Authenticator.class)).andReturn(authenticator);
  86. expect(injector.getInstance(UserDAO.class)).andReturn(userDAO);
  87. replay(injector);
  88. templateCfg = new MockTemplateConfiguration();
  89. }
  90. public void get() throws IOException, ServletException {
  91. controller.callGet(req, resp);
  92. }
  93. protected void get(String url) throws IOException, ServletException {
  94. req.setRequestURL(url);
  95. get();
  96. }
  97. protected void post() throws IOException, ServletException {
  98. controller.callPost(req, resp);
  99. }
  100. protected <T extends PageModel> void assertTemplateUsed(Class<T> modelclass) {
  101. assertEquals(PageModel.getTemplateName(modelclass), templateCfg.lastTemplateName);
  102. }
  103. private HostPageModel lastHostPageModel() {
  104. return ((HostPageModel) templateCfg.lastModel);
  105. }
  106. protected LoginPageModel lastLoginPageModel() {
  107. return (LoginPageModel) templateCfg.lastModel;
  108. }
  109. protected ConfirmInvitePageModel lastNewUserPageModel() {
  110. return (ConfirmInvitePageModel) templateCfg.lastModel;
  111. }
  112. }