Skip to content

Commit a1c6f15

Browse files
committed
unitTesting feature:
service test done
1 parent f1d6baa commit a1c6f15

7 files changed

Lines changed: 138 additions & 82 deletions

File tree

src/main/java/ir/bigz/springbootreal/commons/util/Utils.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,27 @@
99
public class Utils {
1010

1111
static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd - HH:mm:ss z");
12-
static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
12+
static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd - HH:mm:ss");
1313

1414
public static String getTimeNow(){
1515
return ZonedDateTime.now(ZoneId.of("Asia/Tehran")).format(FORMATTER);
1616
}
1717

18+
public static String getLocalTimeNow(){
19+
return LocalDateTime.now().format(SIMPLE_FORMATTER);
20+
}
21+
22+
public static Timestamp getTimestampNow(){
23+
return Timestamp.valueOf(LocalDateTime.now());
24+
}
25+
1826
public static String convertTimestamp(Timestamp timestamp){
1927
LocalDateTime localDateTime = timestamp.toLocalDateTime();
20-
return localDateTime.format(FORMATTER);
28+
return localDateTime.format(SIMPLE_FORMATTER);
2129
}
2230

2331
public static Timestamp convertTimeString(String time){
24-
LocalDateTime from = LocalDateTime.from(FORMATTER.parse(time));
32+
LocalDateTime from = LocalDateTime.from(SIMPLE_FORMATTER.parse(time));
2533
return Timestamp.valueOf(from);
2634
}
2735
}

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,6 @@ public class BaseEntity {
3232
@Column(name = "active_status")
3333
public boolean activeStatus;
3434

35-
static BaseEntity baseEntityCreateFactory(){
36-
BaseEntity baseEntity = new BaseEntity();
37-
baseEntity.insertDate = Timestamp.valueOf(LocalDateTime.now());
38-
return baseEntity;
39-
}
40-
4135
@Override
4236
public String toString() {
4337
return "id=" + id +
Lines changed: 4 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package ir.bigz.springbootreal.dao;
22

33
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
45
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
57

68
import javax.persistence.*;
79
import java.io.Serializable;
8-
import java.sql.Timestamp;
910
import java.util.Objects;
1011

1112
@Entity
1213
@Table(name ="users")
1314
@Access(AccessType.FIELD)
15+
@Getter
16+
@Setter
1417
@NoArgsConstructor
1518
@AllArgsConstructor
1619
public class User extends BaseEntity implements Serializable {
@@ -36,20 +39,6 @@ public class User extends BaseEntity implements Serializable {
3639
@Column(name = "gender")
3740
private String gender;
3841

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-
5342
@Override
5443
public boolean equals(Object o) {
5544
if (this == o) return true;
@@ -76,60 +65,4 @@ public String toString() {
7665
", " + super.toString() +
7766
"} ";
7867
}
79-
80-
public String getFirstName() {
81-
return firstName;
82-
}
83-
84-
public void setFirstName(String firstName) {
85-
this.firstName = firstName;
86-
}
87-
88-
public String getLastName() {
89-
return lastName;
90-
}
91-
92-
public void setLastName(String lastName) {
93-
this.lastName = lastName;
94-
}
95-
96-
public String getUserName() {
97-
return userName;
98-
}
99-
100-
public void setUserName(String userName) {
101-
this.userName = userName;
102-
}
103-
104-
public String getNationalCode() {
105-
return nationalCode;
106-
}
107-
108-
public void setNationalCode(String nationalCode) {
109-
this.nationalCode = nationalCode;
110-
}
111-
112-
public String getMobile() {
113-
return mobile;
114-
}
115-
116-
public void setMobile(String mobile) {
117-
this.mobile = mobile;
118-
}
119-
120-
public String getEmail() {
121-
return email;
122-
}
123-
124-
public void setEmail(String email) {
125-
this.email = email;
126-
}
127-
128-
public String getGender() {
129-
return gender;
130-
}
131-
132-
public void setGender(String gender) {
133-
this.gender = gender;
134-
}
13568
}

src/main/java/ir/bigz/springbootreal/dao/mapper/UserMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public interface UserMapper {
3030
static String timestampToStringMapper(Timestamp timestamp){
3131
if(Objects.nonNull(timestamp) && !timestamp.toString().isBlank())
3232
return Utils.convertTimestamp(timestamp);
33-
return "";
33+
return null;
3434
}
3535

3636
@Named("timeStringToTimestampMapper")

src/main/java/ir/bigz/springbootreal/service/UserServiceImpl.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ir.bigz.springbootreal.service;
22

3+
import ir.bigz.springbootreal.commons.util.Utils;
34
import ir.bigz.springbootreal.dal.UserRepository;
45
import ir.bigz.springbootreal.dao.User;
56
import ir.bigz.springbootreal.dao.mapper.UserMapper;
@@ -54,8 +55,11 @@ public UserModel getUser(Long userId) {
5455
public UserModel addUser(UserModel userModel) {
5556
try {
5657
if(userRepository.getUserWithNationalCode(userModel.getNationalCode()) == null){
58+
userModel.setInsertDate(Utils.getLocalTimeNow());
59+
userModel.setActiveStatus(true);
5760
User user = userMapper.userModelToUser(userModel);
58-
return userMapper.userToUserModel(userRepository.insert(user));
61+
User insert = userRepository.insert(user);
62+
return userMapper.userToUserModel(insert);
5963
}
6064
throw new RuntimeException("user has already exist");
6165

@@ -75,6 +79,7 @@ public UserModel updateUser(long userId, UserModel userModel) {
7579
User sourceUser = user.get();
7680
User updateUser = userMapper.userModelToUser(userModel);
7781
mapUserForUpdate(sourceUser, updateUser);
82+
sourceUser.setUpdateDate(Utils.getTimestampNow());
7883
return userMapper.userToUserModel(sourceUser);
7984
}catch (RuntimeException exception){
8085
throw AppException.newInstance(
@@ -167,5 +172,9 @@ private void mapUserForUpdate(User sourceUser, User updateUser){
167172
if(!sourceUser.getGender().equals(updateUser.getGender())){
168173
sourceUser.setGender(updateUser.getGender());
169174
}
175+
176+
if(!sourceUser.isActiveStatus() == (updateUser.isActiveStatus())){
177+
sourceUser.setActiveStatus(updateUser.isActiveStatus());
178+
}
170179
}
171180
}

src/test/groovy/ir/bigz/springbootreal/web/RepositoryTest.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ class RepositoryTest extends Specification{
6767

6868
}
6969

70+
//before each test this command run
71+
def setup(){}
72+
7073
//after each test this command run
7174
def cleanup(){
7275
userRepository.deleteAll()
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
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 ir.bigz.springbootreal.dao.mapper.UserMapper
9+
import ir.bigz.springbootreal.dao.mapper.UserMapperImpl
10+
import ir.bigz.springbootreal.service.UserService
11+
import ir.bigz.springbootreal.service.UserServiceImpl
12+
import ir.bigz.springbootreal.viewmodel.UserModel
13+
import org.springframework.beans.factory.annotation.Autowired
14+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
15+
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
16+
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
17+
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
18+
import org.springframework.boot.test.context.SpringBootTest
19+
import org.springframework.test.context.ContextConfiguration
20+
import org.springframework.transaction.annotation.EnableTransactionManagement
21+
import spock.lang.Specification
22+
import spock.lang.Title
23+
24+
import java.sql.Timestamp
25+
import java.time.LocalDateTime
26+
27+
@ContextConfiguration(classes = [UserRepositoryImpl.class, User.class,
28+
DataSourceConfiguration.class, WebConfiguration.class, UserServiceImpl.class, UserModel.class, UserMapper.class, UserMapperImpl.class])
29+
@Title("Test service layer")
30+
@SpringBootTest(properties = "spring.profiles.active:test")
31+
@EnableAutoConfiguration(exclude = [DataSourceAutoConfiguration.class,
32+
HibernateJpaAutoConfiguration.class,
33+
DataSourceTransactionManagerAutoConfiguration.class])
34+
@EnableTransactionManagement
35+
class ServiceTest extends Specification{
36+
37+
@Autowired
38+
private UserRepository userRepository
39+
40+
@Autowired
41+
private UserService userService
42+
43+
def "insert data from service"(){
44+
45+
given: "create model"
46+
def model = generateUserModel()
47+
48+
when: "call service"
49+
def user = userService.addUser(model)
50+
51+
then: "return data has id"
52+
user.getId() != null
53+
54+
}
55+
56+
def "update data from service"(){
57+
58+
given: "create model"
59+
def model = generateUserModel()
60+
61+
when: "call service first for insert"
62+
def user = userService.addUser(model)
63+
64+
and: "get entity and update"
65+
userService.updateUser(user.getId(), generateUserModelForUpdate())
66+
def result = userService.getUser(user.getId())
67+
68+
then: "return data has been changed"
69+
result.getId() != null
70+
result.getUpdateDate() != null
71+
72+
}
73+
74+
def cleanup(){
75+
userRepository.deleteAll()
76+
}
77+
78+
private static UserModel generateUserModel() {
79+
return new UserModel(
80+
id: null,
81+
insertDate: null,
82+
updateDate: null,
83+
activeStatus: null,
84+
firstName: "pouya",
85+
lastName: "pouryaie",
86+
userName: "sample",
87+
nationalCode: "0014713225",
88+
mobile: "09388773155",
89+
email: "pouyapouryaie@gmail.com",
90+
gender: "man"
91+
)
92+
}
93+
94+
private static UserModel generateUserModelForUpdate() {
95+
return new UserModel(
96+
id: null,
97+
insertDate: null,
98+
updateDate: null,
99+
activeStatus: false,
100+
firstName: "pouya",
101+
lastName: "pouryaie",
102+
userName: "sample2",
103+
nationalCode: "0014713225",
104+
mobile: "09122930872",
105+
email: "pouyapouryaie@gmail.com",
106+
gender: "man"
107+
)
108+
}
109+
}

0 commit comments

Comments
 (0)