Skip to content

Commit f1d6baa

Browse files
committed
unitTesting feature:
repository test done
1 parent f8b7eee commit f1d6baa

5 files changed

Lines changed: 130 additions & 7 deletions

File tree

src/main/java/ir/bigz/springbootreal/SpringbootRealApplication.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
package ir.bigz.springbootreal;
22

33
import org.springframework.boot.SpringApplication;
4-
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
54
import org.springframework.boot.autoconfigure.SpringBootApplication;
65
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
76
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
87
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
98
import org.springframework.transaction.annotation.EnableTransactionManagement;
109

11-
//TODO add pagination to dao
12-
//TODO complex model
13-
1410
@SpringBootApplication(exclude = {
1511
DataSourceAutoConfiguration.class,
1612
HibernateJpaAutoConfiguration.class,

src/main/java/ir/bigz/springbootreal/dal/DaoRepositoryImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ public void delete(K id) {
9696
}
9797

9898
@Override
99+
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
99100
public void deleteAll() {
100-
101+
getAll().forEach(t -> entityManager.remove(t));
101102
}
102103

103104
@Override

src/main/java/ir/bigz/springbootreal/dao/BaseEntity.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,26 @@ public class BaseEntity {
2424
private Integer version;
2525

2626
@Column(name = "insert_date")
27-
private Timestamp insertDate = Timestamp.valueOf(LocalDateTime.now());
27+
private Timestamp insertDate;
2828

2929
@Column(name = "update_date")
3030
private Timestamp updateDate;
3131

3232
@Column(name = "active_status")
3333
public boolean activeStatus;
34+
35+
static BaseEntity baseEntityCreateFactory(){
36+
BaseEntity baseEntity = new BaseEntity();
37+
baseEntity.insertDate = Timestamp.valueOf(LocalDateTime.now());
38+
return baseEntity;
39+
}
40+
41+
@Override
42+
public String toString() {
43+
return "id=" + id +
44+
", version=" + version +
45+
", insertDate=" + insertDate +
46+
", updateDate=" + updateDate +
47+
", activeStatus=" + activeStatus;
48+
}
3449
}

src/main/java/ir/bigz/springbootreal/dao/User.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package ir.bigz.springbootreal.dao;
22

3+
import lombok.AllArgsConstructor;
4+
import lombok.NoArgsConstructor;
5+
36
import javax.persistence.*;
47
import java.io.Serializable;
8+
import java.sql.Timestamp;
59
import java.util.Objects;
610

711
@Entity
812
@Table(name ="users")
913
@Access(AccessType.FIELD)
14+
@NoArgsConstructor
15+
@AllArgsConstructor
1016
public class User extends BaseEntity implements Serializable {
1117

1218
@Column(name = "first_name", nullable = false)
@@ -30,6 +36,20 @@ public class User extends BaseEntity implements Serializable {
3036
@Column(name = "gender")
3137
private String gender;
3238

39+
public User(Long id, boolean activeStatus, String firstName, String lastName, String userName, String nationalCode, String mobile, String email, String gender) {
40+
BaseEntity baseEntityFactory = BaseEntity.baseEntityCreateFactory();
41+
this.setInsertDate(baseEntityFactory.getInsertDate());
42+
this.setId(id);
43+
this.setActiveStatus(activeStatus);
44+
this.firstName = firstName;
45+
this.lastName = lastName;
46+
this.userName = userName;
47+
this.nationalCode = nationalCode;
48+
this.mobile = mobile;
49+
this.email = email;
50+
this.gender = gender;
51+
}
52+
3353
@Override
3454
public boolean equals(Object o) {
3555
if (this == o) return true;
@@ -53,7 +73,8 @@ public String toString() {
5373
", mobile='" + mobile + '\'' +
5474
", email='" + email + '\'' +
5575
", gender='" + gender + '\'' +
56-
'}';
76+
", " + super.toString() +
77+
"} ";
5778
}
5879

5980
public String getFirstName() {
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package ir.bigz.springbootreal.web
2+
3+
import ir.bigz.springbootreal.configuration.DataSourceConfiguration
4+
import ir.bigz.springbootreal.configuration.WebConfiguration
5+
import ir.bigz.springbootreal.dal.UserRepository
6+
import ir.bigz.springbootreal.dal.UserRepositoryImpl
7+
import ir.bigz.springbootreal.dao.User
8+
import org.springframework.beans.factory.annotation.Autowired
9+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
10+
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
11+
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
12+
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
13+
import org.springframework.boot.test.context.SpringBootTest
14+
import org.springframework.test.context.ContextConfiguration
15+
import org.springframework.transaction.annotation.EnableTransactionManagement
16+
import spock.lang.Specification
17+
import spock.lang.Title
18+
19+
import java.sql.Timestamp
20+
import java.time.LocalDateTime
21+
22+
@ContextConfiguration(classes = [UserRepositoryImpl.class, User.class,
23+
DataSourceConfiguration.class, WebConfiguration.class])
24+
@Title("Test repository layer")
25+
@SpringBootTest(properties = "spring.profiles.active:test")
26+
@EnableAutoConfiguration(exclude = [DataSourceAutoConfiguration.class,
27+
HibernateJpaAutoConfiguration.class,
28+
DataSourceTransactionManagerAutoConfiguration.class])
29+
@EnableTransactionManagement
30+
class RepositoryTest extends Specification{
31+
32+
@Autowired
33+
private UserRepository userRepository
34+
35+
def "create user and add to db"(){
36+
37+
given: "create fake use"
38+
def user = generateUser()
39+
40+
when: "insert entity to db and assign id to entity"
41+
userRepository.insert(user)
42+
43+
then: "entity has id, success persist"
44+
user.getId() != null
45+
46+
}
47+
48+
def "update user db"(){
49+
50+
given: "create fake use"
51+
def user = generateUser()
52+
53+
and: "insert user to db"
54+
userRepository.insert(user)
55+
56+
when: "find user and update"
57+
def find = userRepository.find(user.getId())
58+
59+
and: "update date"
60+
find.get().setUserName("sample2")
61+
find.get().setUpdateDate(Timestamp.valueOf(LocalDateTime.now()))
62+
userRepository.update(find.get())
63+
64+
then: "if properties are updated so test is success"
65+
def result = userRepository.find(user.id)
66+
result.get().getUserName() == "sample2"
67+
68+
}
69+
70+
//after each test this command run
71+
def cleanup(){
72+
userRepository.deleteAll()
73+
}
74+
75+
private static User generateUser() {
76+
return new User(
77+
id: null,
78+
insertDate: Timestamp.valueOf(LocalDateTime.now()),
79+
updateDate: null,
80+
activeStatus: true,
81+
firstName: "pouya",
82+
lastName: "pouryaie",
83+
userName: "sample",
84+
nationalCode: "0014713225",
85+
mobile: "09388773155",
86+
email: "pouyapouryaie@gmail.com",
87+
gender: "man"
88+
)
89+
}
90+
}

0 commit comments

Comments
 (0)