Skip to content

Commit 52bded8

Browse files
committed
Fix update and create logic, update tests
1 parent cb7c0b8 commit 52bded8

File tree

5 files changed

+80
-37
lines changed

5 files changed

+80
-37
lines changed

src/main/java/com/example/tasklist/service/impl/TaskServiceImpl.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,15 @@ public List<Task> getAllSoonTasks(final Duration duration) {
5353
@Transactional
5454
@CachePut(value = "TaskService::getById", key = "#task.id")
5555
public Task update(final Task task) {
56+
Task existing = getById(task.getId());
5657
if (task.getStatus() == null) {
57-
task.setStatus(Status.TODO);
58+
existing.setStatus(Status.TODO);
59+
} else {
60+
existing.setStatus(task.getStatus());
5861
}
62+
existing.setTitle(task.getTitle());
63+
existing.setDescription(task.getDescription());
64+
existing.setExpirationDate(task.getExpirationDate());
5965
taskRepository.save(task);
6066
return task;
6167
}
@@ -66,7 +72,9 @@ public Task update(final Task task) {
6672
condition = "#task.id!=null",
6773
key = "#task.id")
6874
public Task create(final Task task, final Long userId) {
69-
task.setStatus(Status.TODO);
75+
if (task.getStatus() != null) {
76+
task.setStatus(Status.TODO);
77+
}
7078
taskRepository.save(task);
7179
taskRepository.assignTask(userId, task.getId());
7280
return task;

src/main/java/com/example/tasklist/service/impl/UserServiceImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public User getByUsername(final String username) {
5454
key = "#user.username")
5555
})
5656
public User update(final User user) {
57+
User existing = getById(user.getId());
58+
existing.setName(user.getName());
59+
user.setUsername(user.getUsername());
5760
user.setPassword(passwordEncoder.encode(user.getPassword()));
5861
userRepository.save(user);
5962
return user;

src/test/java/com/example/tasklist/config/TestConfig.java

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@
2828
@RequiredArgsConstructor
2929
public class TestConfig {
3030

31-
private final UserRepository userRepository;
32-
private final TaskRepository taskRepository;
33-
private final AuthenticationManager authenticationManager;
34-
3531
@Bean
3632
@Primary
3733
public BCryptPasswordEncoder testPasswordEncoder() {
@@ -48,8 +44,10 @@ public JwtProperties jwtProperties() {
4844
}
4945

5046
@Bean
51-
public UserDetailsService userDetailsService() {
52-
return new JwtUserDetailsService(userService());
47+
public UserDetailsService userDetailsService(
48+
final UserRepository userRepository
49+
) {
50+
return new JwtUserDetailsService(userService(userRepository));
5351
}
5452

5553
@Bean
@@ -87,15 +85,19 @@ public ImageService imageService() {
8785
}
8886

8987
@Bean
90-
public JwtTokenProvider tokenProvider() {
88+
public JwtTokenProvider tokenProvider(
89+
final UserRepository userRepository
90+
) {
9191
return new JwtTokenProvider(jwtProperties(),
92-
userDetailsService(),
93-
userService());
92+
userDetailsService(userRepository),
93+
userService(userRepository));
9494
}
9595

9696
@Bean
9797
@Primary
98-
public UserServiceImpl userService() {
98+
public UserServiceImpl userService(
99+
final UserRepository userRepository
100+
) {
99101
return new UserServiceImpl(
100102
userRepository,
101103
testPasswordEncoder(),
@@ -105,16 +107,38 @@ public UserServiceImpl userService() {
105107

106108
@Bean
107109
@Primary
108-
public TaskServiceImpl taskService() {
110+
public TaskServiceImpl taskService(
111+
final TaskRepository taskRepository
112+
) {
109113
return new TaskServiceImpl(taskRepository, imageService());
110114
}
111115

112116
@Bean
113117
@Primary
114-
public AuthServiceImpl authService() {
115-
return new AuthServiceImpl(authenticationManager,
116-
userService(),
117-
tokenProvider());
118+
public AuthServiceImpl authService(
119+
final UserRepository userRepository,
120+
final AuthenticationManager authenticationManager
121+
) {
122+
return new AuthServiceImpl(
123+
authenticationManager,
124+
userService(userRepository),
125+
tokenProvider(userRepository)
126+
);
127+
}
128+
129+
@Bean
130+
public UserRepository userRepository() {
131+
return Mockito.mock(UserRepository.class);
132+
}
133+
134+
@Bean
135+
public TaskRepository taskRepository() {
136+
return Mockito.mock(TaskRepository.class);
137+
}
138+
139+
@Bean
140+
public AuthenticationManager authenticationManager() {
141+
return Mockito.mock(AuthenticationManager.class);
118142
}
119143

120144
}

src/test/java/com/example/tasklist/service/impl/TaskServiceImplTest.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.example.tasklist.domain.task.Task;
77
import com.example.tasklist.domain.task.TaskImage;
88
import com.example.tasklist.repository.TaskRepository;
9-
import com.example.tasklist.repository.UserRepository;
109
import com.example.tasklist.service.ImageService;
1110
import org.junit.jupiter.api.Assertions;
1211
import org.junit.jupiter.api.Test;
@@ -16,7 +15,6 @@
1615
import org.springframework.beans.factory.annotation.Autowired;
1716
import org.springframework.boot.test.mock.mockito.MockBean;
1817
import org.springframework.context.annotation.Import;
19-
import org.springframework.security.authentication.AuthenticationManager;
2018
import org.springframework.test.context.ActiveProfiles;
2119
import org.springframework.test.context.junit.jupiter.SpringExtension;
2220

@@ -37,12 +35,6 @@ public class TaskServiceImplTest {
3735
@MockBean
3836
private ImageService imageService;
3937

40-
@MockBean
41-
private UserRepository userRepository;
42-
43-
@MockBean
44-
private AuthenticationManager authenticationManager;
45-
4638
@Autowired
4739
private TaskServiceImpl taskService;
4840

@@ -99,18 +91,37 @@ void getSoonTasks() {
9991

10092
@Test
10193
void update() {
94+
Long id = 1L;
10295
Task task = new Task();
96+
task.setId(id);
10397
task.setStatus(Status.DONE);
98+
Mockito.when(taskRepository.findById(task.getId()))
99+
.thenReturn(Optional.of(task));
104100
Task testTask = taskService.update(task);
105101
Mockito.verify(taskRepository).save(task);
106102
Assertions.assertEquals(task, testTask);
103+
Assertions.assertEquals(task.getTitle(), testTask.getTitle());
104+
Assertions.assertEquals(
105+
task.getDescription(),
106+
testTask.getDescription()
107+
);
108+
Assertions.assertEquals(task.getStatus(), testTask.getStatus());
107109
}
108110

109111
@Test
110112
void updateWithEmptyStatus() {
113+
Long id = 1L;
111114
Task task = new Task();
115+
task.setId(id);
116+
Mockito.when(taskRepository.findById(task.getId()))
117+
.thenReturn(Optional.of(task));
112118
Task testTask = taskService.update(task);
113119
Mockito.verify(taskRepository).save(task);
120+
Assertions.assertEquals(task.getTitle(), testTask.getTitle());
121+
Assertions.assertEquals(
122+
task.getDescription(),
123+
testTask.getDescription()
124+
);
114125
Assertions.assertEquals(testTask.getStatus(), Status.TODO);
115126
}
116127

src/test/java/com/example/tasklist/service/impl/UserServiceImplTest.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.example.tasklist.domain.exception.ResourceNotFoundException;
66
import com.example.tasklist.domain.user.Role;
77
import com.example.tasklist.domain.user.User;
8-
import com.example.tasklist.repository.TaskRepository;
98
import com.example.tasklist.repository.UserRepository;
109
import org.junit.jupiter.api.Assertions;
1110
import org.junit.jupiter.api.Test;
@@ -15,7 +14,6 @@
1514
import org.springframework.beans.factory.annotation.Autowired;
1615
import org.springframework.boot.test.mock.mockito.MockBean;
1716
import org.springframework.context.annotation.Import;
18-
import org.springframework.security.authentication.AuthenticationManager;
1917
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
2018
import org.springframework.test.context.ActiveProfiles;
2119
import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -33,12 +31,6 @@ public class UserServiceImplTest {
3331
@MockBean
3432
private UserRepository userRepository;
3533

36-
@MockBean
37-
private TaskRepository taskRepository;
38-
39-
@MockBean
40-
private AuthenticationManager authenticationManager;
41-
4234
@MockBean
4335
private BCryptPasswordEncoder passwordEncoder;
4436

@@ -94,14 +86,20 @@ void getByNotExistingUsername() {
9486

9587
@Test
9688
void update() {
89+
Long id = 1L;
9790
String password = "password";
9891
User user = new User();
92+
user.setId(id);
9993
user.setPassword(password);
10094
Mockito.when(passwordEncoder.encode(password))
10195
.thenReturn("encodedPassword");
102-
userService.update(user);
96+
Mockito.when(userRepository.findById(user.getId()))
97+
.thenReturn(Optional.of(user));
98+
User updated = userService.update(user);
10399
Mockito.verify(passwordEncoder).encode(password);
104100
Mockito.verify(userRepository).save(user);
101+
Assertions.assertEquals(user.getUsername(), updated.getUsername());
102+
Assertions.assertEquals(user.getName(), updated.getName());
105103
}
106104

107105
@Test
@@ -199,9 +197,8 @@ void getNotExistingTaskAuthor() {
199197
Long taskId = 1L;
200198
Mockito.when(userRepository.findTaskAuthor(taskId))
201199
.thenReturn(Optional.empty());
202-
Assertions.assertThrows(ResourceNotFoundException.class, () -> {
203-
userService.getTaskAuthor(taskId);
204-
});
200+
Assertions.assertThrows(ResourceNotFoundException.class, () ->
201+
userService.getTaskAuthor(taskId));
205202
Mockito.verify(userRepository).findTaskAuthor(taskId);
206203
}
207204

0 commit comments

Comments
 (0)