1 package com.rest.unit;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import com.dto.InitiateResetPasswordRequestDto;
25 import com.dto.ResetPasswordRequestDto;
26 import com.dto.UserPasswordRequestDto;
27 import com.dto.UserRequestDto;
28 import com.entity.AuthorityEntity;
29 import com.entity.UserEntity;
30 import com.repository.IAuthorityRepository;
31 import com.repository.IUserRepository;
32 import com.rest.EmailSender;
33 import com.rest.UserRest;
34 import org.junit.Test;
35 import org.mockito.Mockito;
36 import org.springframework.http.ResponseEntity;
37 import org.springframework.security.crypto.password.StandardPasswordEncoder;
38
39 import java.security.Principal;
40
41 import static org.junit.Assert.assertTrue;
42 import static org.mockito.Matchers.any;
43 import static org.mockito.Mockito.*;
44
45
46
47
48 public class UserRestUnitTest {
49 UserRest userRest = new UserRest();
50 UserRequestDto userRequestDto = new UserRequestDto();
51 IUserRepository mockUserRepository = Mockito.mock(IUserRepository.class);
52 IAuthorityRepository mockAuthorityRepository = Mockito.mock(IAuthorityRepository.class);
53 StandardPasswordEncoder standardPasswordEncoder = new StandardPasswordEncoder("53cr3t");
54 EmailSender mockEmailSender = Mockito.mock(EmailSender.class);
55 Principal mockPrincipalUser = Mockito.mock(Principal.class);
56 UserEntity user = new UserEntity();
57 UserPasswordRequestDto userPasswordRequestDto = new UserPasswordRequestDto();
58 ResetPasswordRequestDto resetPasswordRequestDto = new ResetPasswordRequestDto();
59 InitiateResetPasswordRequestDto initiateResetPasswordRequestDto = new InitiateResetPasswordRequestDto();
60
61 public UserRestUnitTest(){
62 userRest.userRepository = mockUserRepository;
63 userRest.authorityRepository = mockAuthorityRepository;
64 userRest.emailSender = mockEmailSender;
65
66 userPasswordRequestDto.setCurrentPassword("password");
67 userPasswordRequestDto.setNewPassword("newPassword");
68 resetPasswordRequestDto.setNewPassword("password");
69 }
70
71
72 @Test
73 public void createUser(){
74 userRequestDto.setPassword("password");
75 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(null);
76
77 Mockito.doNothing().when(mockEmailSender).sendVerificationTokenEmail(any(String.class), any(String.class));
78
79 ResponseEntity responseEntity = userRest.createUser(userRequestDto);
80
81 verify(mockUserRepository, times(1)).save(any(UserEntity.class));
82 verify(mockAuthorityRepository, times(1)).save(any(AuthorityEntity.class));
83 verify(mockEmailSender, times(1)).sendVerificationTokenEmail(any(String.class), any(String.class));
84 }
85
86
87 @Test(expected = RuntimeException.class)
88 public void createUserWithExistingName(){
89 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(new UserEntity());
90
91 Mockito.doNothing().when(mockEmailSender).sendVerificationTokenEmail(any(String.class), any(String.class));
92
93 ResponseEntity responseEntity = userRest.createUser(userRequestDto);
94 }
95
96
97 @Test
98 public void activateUser(){
99 user.setEnabled(false);
100
101 when(mockUserRepository.findByEmailVerificationToken(any(String.class))).thenReturn(user);
102
103 userRest.activateUser("dummy email verification token");
104
105 assertTrue(user.isEnabled());
106 verify(mockUserRepository, times(1)).save(any(UserEntity.class));
107 }
108
109
110
111 @Test(expected = RuntimeException.class)
112 public void activateUserNotValidEmailVerificationToken(){
113 when(mockUserRepository.findByEmailVerificationToken(any(String.class))).thenReturn(null);
114
115 userRest.activateUser("dummy uuid");
116 }
117
118
119 @Test
120 public void changePassword(){
121 user.setPassword(standardPasswordEncoder.encode("password"));
122 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(user);
123
124 when(mockPrincipalUser.getName()).thenReturn("test@gmail.com");
125
126 userRest.changePassword(userPasswordRequestDto, mockPrincipalUser);
127
128 verify(mockUserRepository, times(1)).findByUsername(any(String.class));
129 verify(mockUserRepository, times(1)).save(any(UserEntity.class));
130 }
131
132
133 @Test(expected = RuntimeException.class)
134 public void chantePasswordNotValidCurrentPassword(){
135 user.setPassword(standardPasswordEncoder.encode("!!!password"));
136 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(user);
137
138 when(mockPrincipalUser.getName()).thenReturn("test@gmail.com");
139
140 userRest.changePassword(userPasswordRequestDto, mockPrincipalUser);
141 }
142
143
144 @Test
145 public void initiateResetPassword(){
146 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(user);
147 Mockito.doNothing().when(mockEmailSender).sendReserPasswordEmail(any(String.class), any(String.class));
148
149 initiateResetPasswordRequestDto.setEmail("test@gmail.com");
150 userRest.initiateResetPassword(initiateResetPasswordRequestDto);
151 verify(mockUserRepository, times(1)).save(any(UserEntity.class));
152 verify(mockEmailSender, times(1)).sendReserPasswordEmail(any(String.class), any(String.class));
153 }
154
155
156 @Test(expected = RuntimeException.class)
157 public void initiateResetPasswordNotValidEmail(){
158 when(mockUserRepository.findByUsername(any(String.class))).thenReturn(null);
159
160 initiateResetPasswordRequestDto.setEmail("test@gmail.com");
161 userRest.initiateResetPassword(initiateResetPasswordRequestDto);
162 }
163
164
165 @Test
166 public void resetPassword(){
167 when(mockUserRepository.findByResetPasswordToken(any(String.class))).thenReturn(user);
168 userRest.resetPassword(resetPasswordRequestDto, "dummy reset password token");
169
170 verify(mockUserRepository, times(1)).save(any(UserEntity.class));
171 }
172
173
174 @Test(expected = RuntimeException.class)
175 public void resetPasswordNotValidToken(){
176 when(mockUserRepository.findByResetPasswordToken(any(String.class))).thenReturn(null);
177
178 userRest.resetPassword(resetPasswordRequestDto, "dummy reset password token");
179 }
180 }