Skip to content

Commit ed27c63

Browse files
committed
tests, dev/test Spring profiles, DbUnit, HSQLDB
1 parent 5f33603 commit ed27c63

24 files changed

Lines changed: 633 additions & 73 deletions

pom.xml

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@
5252
<artifactId>spring-security-config</artifactId>
5353
<version>${spring.security.version}</version>
5454
</dependency>
55+
<dependency>
56+
<groupId>org.springframework.security</groupId>
57+
<artifactId>spring-security-test</artifactId>
58+
<version>${spring.security.version}</version>
59+
</dependency>
5560

5661
<!-- Thymeleaf -->
5762

@@ -114,12 +119,20 @@
114119
<version>5.1.35</version>
115120
</dependency>
116121

122+
<!-- HSQLDB -->
123+
124+
<dependency>
125+
<groupId>org.hsqldb</groupId>
126+
<artifactId>hsqldb</artifactId>
127+
<version>2.3.2</version>
128+
</dependency>
129+
117130
<!-- validator -->
118131

119132
<dependency>
120133
<groupId>org.hibernate</groupId>
121134
<artifactId>hibernate-validator</artifactId>
122-
<version>5.1.3.Final</version>
135+
<version>5.0.3.Final</version>
123136
</dependency>
124137

125138
<!-- markdown -->
@@ -132,6 +145,26 @@
132145

133146
<!-- testing -->
134147

148+
<dependency>
149+
<groupId>org.hamcrest</groupId>
150+
<artifactId>hamcrest-all</artifactId>
151+
<version>1.3</version>
152+
<scope>test</scope>
153+
</dependency>
154+
155+
<dependency>
156+
<groupId>javax.el</groupId>
157+
<artifactId>javax.el-api</artifactId>
158+
<version>3.0.0</version>
159+
<scope>test</scope>
160+
</dependency>
161+
<dependency>
162+
<groupId>org.glassfish.web</groupId>
163+
<artifactId>el-impl</artifactId>
164+
<version>2.2</version>
165+
<scope>test</scope>
166+
</dependency>
167+
135168
<dependency>
136169
<groupId>org.springframework</groupId>
137170
<artifactId>spring-test</artifactId>
@@ -152,6 +185,20 @@
152185
<version>1.10.19</version>
153186
<scope>test</scope>
154187
</dependency>
188+
189+
<dependency>
190+
<groupId>org.dbunit</groupId>
191+
<artifactId>dbunit</artifactId>
192+
<version>2.5.0</version>
193+
<scope>test</scope>
194+
</dependency>
195+
196+
<dependency>
197+
<groupId>com.github.springtestdbunit</groupId>
198+
<artifactId>spring-test-dbunit</artifactId>
199+
<version>1.2.1</version>
200+
<scope>test</scope>
201+
</dependency>
155202
</dependencies>
156203

157204
<build>

src/main/java/alexp/blog/controller/CommentController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public class CommentController {
2727
public String showComments(@RequestParam(value = "postid") Long postId, ModelMap model) {
2828
Post post = postService.getPost(postId);
2929

30+
if (post == null)
31+
throw new ResourceNotFoundException();
32+
3033
List<Comment> comments = commentService.getPostComments(post);
3134

3235
model.addAttribute("comments", comments);
@@ -44,6 +47,9 @@ public String showComments(@RequestParam(value = "postid") Long postId, ModelMap
4447

4548
Post post = postService.getPost(postId);
4649

50+
if (post == null)
51+
return "post not found";
52+
4753
commentService.saveNewComment(comment, post);
4854

4955
return "ok";

src/main/java/alexp/blog/model/Post.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import alexp.blog.service.MarkdownConverter;
44
import org.hibernate.validator.constraints.NotBlank;
5+
import org.hibernate.validator.constraints.NotEmpty;
56
import org.springframework.util.StringUtils;
67

78
import javax.persistence.*;

src/main/java/alexp/blog/repository/UserRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
public interface UserRepository extends JpaRepository<User, Long> {
77

8-
User findByUsername(String username);
8+
User findByUsernameIgnoreCase(String username);
99

10-
User findByEmail(String email);
10+
User findByEmailIgnoreCase(String email);
1111

1212
User findByUsernameOrEmail(String username, String email);
1313
}

src/main/java/alexp/blog/service/CommentServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ public void saveNewComment(Comment comment, Post post) {
3131

3232
comment.setUser(userService.currentUser());
3333

34-
commentRepository.save(comment);
34+
commentRepository.saveAndFlush(comment);
3535
}
3636
}

src/main/java/alexp/blog/service/PostServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,6 @@ public void saveNewPost(Post post, String tagstext) {
5454
post.getTags().add(tag);
5555
}
5656

57-
postRepository.save(post);
57+
postRepository.saveAndFlush(post);
5858
}
5959
}

src/main/java/alexp/blog/service/UserServiceImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException
5050

5151
@Override
5252
public User findByEmail(String email) {
53-
return userRepository.findByEmail(email);
53+
return userRepository.findByEmailIgnoreCase(email);
5454
}
5555

5656
@Override
5757
public User findByUsername(String username) {
58-
return userRepository.findByUsername(username);
58+
return userRepository.findByUsernameIgnoreCase(username);
5959
}
6060

6161
@Override
@@ -105,6 +105,6 @@ public User currentUser() {
105105

106106
Authentication auth = securityContext.getAuthentication();
107107

108-
return userRepository.findByUsername(auth.getName());
108+
return userRepository.findByUsernameIgnoreCase(auth.getName());
109109
}
110110
}

src/main/resources/database.xml

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:context="http://www.springframework.org/schema/context"
55
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
66
xsi:schemaLocation="http://www.springframework.org/schema/beans
7-
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
7+
http://www.springframework.org/schema/beans/spring-beans.xsd
88
http://www.springframework.org/schema/tx
99
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
1010
http://www.springframework.org/schema/context
@@ -19,38 +19,19 @@
1919

2020
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
2121

22-
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
23-
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
24-
<property name="url" value="jdbc:mysql://localhost:3306/blog" />
25-
<property name="username" value="BlogDbUser" />
26-
<property name="password" value="BlogDbPassword" />
27-
<property name="testOnBorrow" value="true"/>
28-
<property name="validationQuery" value="SELECT 1"/>
29-
</bean>
30-
31-
<bean id="entityManagerFactory"
32-
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
33-
<property name="dataSource" ref="dataSource" />
34-
<property name="jpaVendorAdapter">
35-
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
36-
<property name="showSql" value="true"/>
37-
</bean>
38-
</property>
39-
<property name="jpaPropertyMap">
40-
<map>
41-
<entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
42-
<entry key="hibernate.format_sql" value="true"/>
43-
<entry key="hibernate.hbm2ddl.auto" value="create"/>
44-
<entry key="hibernate.hbm2ddl.import_files_sql_extractor" value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" />
45-
</map>
46-
</property>
47-
</bean>
48-
4922
<bean id="transactionManager"
5023
class="org.springframework.orm.jpa.JpaTransactionManager">
5124
<property name="entityManagerFactory" ref="entityManagerFactory"/>
5225
</bean>
5326

5427
<tx:annotation-driven transaction-manager="transactionManager"/>
5528

29+
<beans profile="dev">
30+
<import resource="classpath:/datasource-dev.xml"/>
31+
</beans>
32+
33+
<beans profile="test">
34+
<import resource="classpath:/datasource-test.xml"/>
35+
</beans>
36+
5637
</beans>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<beans xmlns="http://www.springframework.org/schema/beans"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
4+
5+
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
6+
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
7+
<property name="url" value="jdbc:mysql://localhost:3306/blog" />
8+
<property name="username" value="BlogDbUser" />
9+
<property name="password" value="BlogDbPassword" />
10+
<property name="testOnBorrow" value="true"/>
11+
<property name="validationQuery" value="SELECT 1"/>
12+
</bean>
13+
14+
<bean id="entityManagerFactory"
15+
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
16+
<property name="dataSource" ref="dataSource" />
17+
<property name="jpaVendorAdapter">
18+
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
19+
<property name="showSql" value="true"/>
20+
</bean>
21+
</property>
22+
<property name="jpaPropertyMap">
23+
<map>
24+
<entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
25+
<entry key="hibernate.format_sql" value="true"/>
26+
<entry key="hibernate.hbm2ddl.auto" value="validate"/>
27+
<entry key="hibernate.hbm2ddl.import_files_sql_extractor" value="org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor" />
28+
</map>
29+
</property>
30+
</bean>
31+
32+
</beans>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<beans xmlns="http://www.springframework.org/schema/beans"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
4+
5+
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
6+
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
7+
<property name="url" value="jdbc:hsqldb:mem:blog" />
8+
<property name="username" value="BlogDbUser" />
9+
<property name="testOnBorrow" value="true"/>
10+
<property name="validationQuery" value="SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS"/>
11+
</bean>
12+
13+
<bean id="entityManagerFactory"
14+
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
15+
<property name="dataSource" ref="dataSource" />
16+
<property name="jpaVendorAdapter">
17+
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
18+
<property name="showSql" value="true"/>
19+
</bean>
20+
</property>
21+
<property name="jpaPropertyMap">
22+
<map>
23+
<entry key="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
24+
<entry key="hibernate.format_sql" value="true"/>
25+
<entry key="hibernate.hbm2ddl.auto" value="create-drop"/>
26+
<entry key="hibernate.hbm2ddl.import_files" value="no" />
27+
</map>
28+
</property>
29+
</bean>
30+
31+
</beans>

0 commit comments

Comments
 (0)