From 2070653e09ba1fa6b85c7afb3df7a620d1c8f75e Mon Sep 17 00:00:00 2001 From: Julien Iguchi-Cartigny Date: Tue, 26 May 2015 15:22:37 +0200 Subject: [PATCH] Switching to spring-data-jpa --- pom.xml | 16 ++++++++++------ src/main/java/fr/plil/sio/web/mvc/Application.java | 2 ++ src/main/java/fr/plil/sio/web/mvc/CheckUserInterceptor.java | 12 ++++++------ src/main/java/fr/plil/sio/web/mvc/LoginController.java | 5 +++-- src/main/java/fr/plil/sio/web/mvc/NewUserController.java | 5 +++-- src/main/java/fr/plil/sio/web/mvc/User.java | 22 +++++++++++++++++++++- src/main/java/fr/plil/sio/web/mvc/UserRepository.java | 14 +++----------- src/main/java/fr/plil/sio/web/mvc/UserRepositoryImpl.java | 48 ------------------------------------------------ src/main/java/fr/plil/sio/web/mvc/ViewUsersController.java | 9 +++++---- src/main/resources/application.properties | 3 +++ src/main/resources/data.sql | 1 + src/test/java/fr/plil/sio/web/mvc/LoginControllerTest.java | 8 ++++++-- src/test/java/fr/plil/sio/web/mvc/NewUserControllerTest.java | 11 +++++++++-- src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java | 69 ++++++++++++++++++--------------------------------------------------- src/test/java/fr/plil/sio/web/mvc/ViewUsersControllerTest.java | 13 +++++++++++-- 15 files changed, 101 insertions(+), 137 deletions(-) delete mode 100644 src/main/java/fr/plil/sio/web/mvc/UserRepositoryImpl.java create mode 100644 src/main/resources/data.sql diff --git a/pom.xml b/pom.xml index 9ee172f..19c7d88 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ - 4.0.0 @@ -27,6 +27,10 @@ org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot spring-boot-starter-data-rest @@ -34,11 +38,6 @@ spring-boot-starter-web - com.h2database - h2 - runtime - - org.springframework.boot spring-boot-starter-tomcat provided @@ -57,6 +56,11 @@ javax.servlet jstl + + com.h2database + h2 + runtime + diff --git a/src/main/java/fr/plil/sio/web/mvc/Application.java b/src/main/java/fr/plil/sio/web/mvc/Application.java index 6a9a19a..849a544 100644 --- a/src/main/java/fr/plil/sio/web/mvc/Application.java +++ b/src/main/java/fr/plil/sio/web/mvc/Application.java @@ -6,10 +6,12 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @EnableAutoConfiguration @Configuration @ComponentScan +@EnableJpaRepositories public class Application extends SpringBootServletInitializer { public static void main(String[] args) { diff --git a/src/main/java/fr/plil/sio/web/mvc/CheckUserInterceptor.java b/src/main/java/fr/plil/sio/web/mvc/CheckUserInterceptor.java index 81873a1..40334cd 100644 --- a/src/main/java/fr/plil/sio/web/mvc/CheckUserInterceptor.java +++ b/src/main/java/fr/plil/sio/web/mvc/CheckUserInterceptor.java @@ -1,19 +1,19 @@ package fr.plil.sio.web.mvc; -import java.io.IOException; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + public class CheckUserInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(CheckUserInterceptor.class); - @Autowired + @Resource private UserSession userSession; @Override diff --git a/src/main/java/fr/plil/sio/web/mvc/LoginController.java b/src/main/java/fr/plil/sio/web/mvc/LoginController.java index 3d79d02..8a5c548 100644 --- a/src/main/java/fr/plil/sio/web/mvc/LoginController.java +++ b/src/main/java/fr/plil/sio/web/mvc/LoginController.java @@ -1,12 +1,13 @@ package fr.plil.sio.web.mvc; -import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; +import javax.annotation.Resource; + @Controller @RequestMapping(value = "/login") public class LoginController { @@ -25,7 +26,7 @@ public class LoginController { @RequestMapping(method = RequestMethod.POST) public String postLoginCheck(User user, BindingResult result) { - User userFromDao = userRepository.getFromUsername(user.getUsername()); + User userFromDao = userRepository.findByUsername(user.getUsername()); if (userFromDao == null) { result.rejectValue("username","login.form.invalid"); diff --git a/src/main/java/fr/plil/sio/web/mvc/NewUserController.java b/src/main/java/fr/plil/sio/web/mvc/NewUserController.java index 4970258..4fc5da6 100644 --- a/src/main/java/fr/plil/sio/web/mvc/NewUserController.java +++ b/src/main/java/fr/plil/sio/web/mvc/NewUserController.java @@ -1,12 +1,13 @@ package fr.plil.sio.web.mvc; -import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; +import javax.annotation.Resource; + @Controller public class NewUserController { @@ -33,7 +34,7 @@ public class NewUserController { userValidator.validate(user, result); - boolean present = (userRepository.getFromUsername(user.getUsername()) != null); + boolean present = (userRepository.findByUsername(user.getUsername()) != null); if (present) { result.rejectValue("username", "new.user.form.present"); diff --git a/src/main/java/fr/plil/sio/web/mvc/User.java b/src/main/java/fr/plil/sio/web/mvc/User.java index da993b3..27654ab 100644 --- a/src/main/java/fr/plil/sio/web/mvc/User.java +++ b/src/main/java/fr/plil/sio/web/mvc/User.java @@ -1,10 +1,30 @@ package fr.plil.sio.web.mvc; -public class User { +import javax.persistence.*; +import java.io.Serializable; + +@Entity +public class User implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Column private String username; + + @Column private String password; + public User() { + } + + public User(String username, String password) { + this.username = username; + this.password = password; + } + public String getUsername() { return username; } diff --git a/src/main/java/fr/plil/sio/web/mvc/UserRepository.java b/src/main/java/fr/plil/sio/web/mvc/UserRepository.java index 8cd46e7..55b91e0 100644 --- a/src/main/java/fr/plil/sio/web/mvc/UserRepository.java +++ b/src/main/java/fr/plil/sio/web/mvc/UserRepository.java @@ -1,16 +1,8 @@ package fr.plil.sio.web.mvc; -import java.util.Set; +import org.springframework.data.jpa.repository.JpaRepository; -public interface UserRepository { +public interface UserRepository extends JpaRepository { - boolean save(User user); - - User getFromUsername(String username); - - Set getAllUsers(); - - boolean update(User user); - - boolean delete(User user); + User findByUsername(String username); } diff --git a/src/main/java/fr/plil/sio/web/mvc/UserRepositoryImpl.java b/src/main/java/fr/plil/sio/web/mvc/UserRepositoryImpl.java deleted file mode 100644 index 8050ab7..0000000 --- a/src/main/java/fr/plil/sio/web/mvc/UserRepositoryImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package fr.plil.sio.web.mvc; - -import java.util.HashSet; -import java.util.Set; -import org.springframework.stereotype.Repository; - -@Repository(value = "userDao") -public class UserRepositoryImpl implements UserRepository { - - private Set users = new HashSet(); - - public UserRepositoryImpl() { - User user = new User(); - user.setUsername("admin"); - user.setPassword("admin"); - users.add(user); - } - - @Override - public boolean save(User user) { - return users.add(user); - } - - @Override - public User getFromUsername(String username) { - for (User user : users) { - if (user.getUsername().equals(username)) { - return user; - } - } - return null; - } - - @Override - public Set getAllUsers() { - return users; - } - - @Override - public boolean update(User user) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public boolean delete(User user) { - throw new UnsupportedOperationException("Not supported."); - } -} diff --git a/src/main/java/fr/plil/sio/web/mvc/ViewUsersController.java b/src/main/java/fr/plil/sio/web/mvc/ViewUsersController.java index 5ff3437..eade0a1 100644 --- a/src/main/java/fr/plil/sio/web/mvc/ViewUsersController.java +++ b/src/main/java/fr/plil/sio/web/mvc/ViewUsersController.java @@ -1,12 +1,13 @@ package fr.plil.sio.web.mvc; -import java.util.Set; -import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import javax.annotation.Resource; +import java.util.List; + @Controller public class ViewUsersController { @@ -17,8 +18,8 @@ public class ViewUsersController { private UserSession userSession; @ModelAttribute("users") - public Set populateUsers() { - return userRepository.getAllUsers(); + public List populateUsers() { + return userRepository.findAll(); } @ModelAttribute("userSession") diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4c38281..3740ca6 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,7 @@ logging.level.fr.plil.sio.web.mvc=DEBUG +logging.level.org.hibernate=DEBUG + +spring.jpa.hibernate.ddl-auto=create-drop spring.view.prefix=/WEB-INF/views/ spring.view.suffix=.jsp diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..4f25c25 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1 @@ +INSERT INTO USER (username,password) VALUES ('admin','admin') \ No newline at end of file diff --git a/src/test/java/fr/plil/sio/web/mvc/LoginControllerTest.java b/src/test/java/fr/plil/sio/web/mvc/LoginControllerTest.java index 65efc28..c160573 100644 --- a/src/test/java/fr/plil/sio/web/mvc/LoginControllerTest.java +++ b/src/test/java/fr/plil/sio/web/mvc/LoginControllerTest.java @@ -1,12 +1,15 @@ package fr.plil.sio.web.mvc; -import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BindingResult; import org.springframework.web.servlet.ModelAndView; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class LoginControllerTest { private LoginController loginController; @@ -20,7 +23,8 @@ public class LoginControllerTest { loginController = new LoginController(); user = new User(); results = new BeanPropertyBindingResult(user, "user"); - userRepository = new UserRepositoryImpl(); + userRepository = mock(UserRepository.class); + when(userRepository.findByUsername("admin")).thenReturn(new User("admin", "admin")); loginController.setUserRepository(userRepository); userSession = new UserSession(); loginController.setUserSession(userSession); diff --git a/src/test/java/fr/plil/sio/web/mvc/NewUserControllerTest.java b/src/test/java/fr/plil/sio/web/mvc/NewUserControllerTest.java index 570c022..556d35a 100644 --- a/src/test/java/fr/plil/sio/web/mvc/NewUserControllerTest.java +++ b/src/test/java/fr/plil/sio/web/mvc/NewUserControllerTest.java @@ -1,12 +1,15 @@ package fr.plil.sio.web.mvc; -import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BindingResult; import org.springframework.web.servlet.ModelAndView; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class NewUserControllerTest { private NewUserController newUserController; @@ -21,7 +24,11 @@ public class NewUserControllerTest { newUserController = new NewUserController(); user = new User(); results = new BeanPropertyBindingResult(user, "user"); - userRepository = new UserRepositoryImpl(); + userRepository = mock(UserRepository.class); + + User user = new User("admin", "password"); + when(userRepository.findByUsername("admin")).thenReturn(user); + newUserController.setUserRepository(userRepository); userSession = new UserSession(); userSession.setUsername("admin"); diff --git a/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java b/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java index 5b9cb05..d14a219 100644 --- a/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java +++ b/src/test/java/fr/plil/sio/web/mvc/UserRepositoryTest.java @@ -1,63 +1,30 @@ package fr.plil.sio.web.mvc; -import static org.junit.Assert.*; -import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.TransactionConfiguration; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@Transactional +@TransactionConfiguration public class UserRepositoryTest { + @Resource private UserRepository userRepository; - @Before - public void createInstances() { - userRepository = new UserRepositoryImpl(); - } - @Test public void testAdminPresent() { - assertEquals(1, userRepository.getAllUsers().size()); - assertNotNull(userRepository.getFromUsername("admin")); - assertEquals("admin", userRepository.getFromUsername("admin").getUsername()); - } - - @Test - public void testSaveSucceed() { - User user = new User(); - user.setUsername("abc"); - user.setPassword("abc"); - assertTrue(userRepository.save(user)); - } - - @Test - public void testSaveFailed() { - User user = new User(); - user.setUsername("admin"); - user.setPassword("abc"); - assertFalse(userRepository.save(user)); - } - - @Test - public void testGetFromUsernameFound() { - User user = new User(); - user.setUsername("abc"); - user.setPassword("abc"); - userRepository.save(user); - assertNotNull(userRepository.getFromUsername("admin")); - assertEquals("admin", userRepository.getFromUsername("admin").getUsername()); - } - - @Test - public void testGetFromUsernameNotFound() { - assertNull(userRepository.getFromUsername("abc")); - } - - @Test - public void testGetAllUsers() { - assertEquals(1, userRepository.getAllUsers().size()); - User user = new User(); - user.setUsername("abc"); - user.setPassword("abc"); - assertTrue(userRepository.save(user)); - assertEquals(2, userRepository.getAllUsers().size()); + assertEquals(1, userRepository.findAll().size()); + assertNotNull(userRepository.findByUsername("admin")); + assertEquals("admin", userRepository.findByUsername("admin").getUsername()); } } \ No newline at end of file diff --git a/src/test/java/fr/plil/sio/web/mvc/ViewUsersControllerTest.java b/src/test/java/fr/plil/sio/web/mvc/ViewUsersControllerTest.java index eaf41b1..963df6f 100644 --- a/src/test/java/fr/plil/sio/web/mvc/ViewUsersControllerTest.java +++ b/src/test/java/fr/plil/sio/web/mvc/ViewUsersControllerTest.java @@ -1,9 +1,15 @@ package fr.plil.sio.web.mvc; -import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + public class ViewUsersControllerTest { private ViewUsersController viewUsersController; @@ -13,7 +19,10 @@ public class ViewUsersControllerTest { @Before public void createInstances() { viewUsersController = new ViewUsersController(); - userRepository = new UserRepositoryImpl(); + userRepository = mock(UserRepository.class); + List users = new LinkedList<>(); + users.add(new User("admin", "password")); + when(userRepository.findAll()).thenReturn(users); viewUsersController.setUserRepository(userRepository); userSession = new UserSession(); userSession.setUsername("admin"); -- libgit2 0.21.2