View Javadoc
1   package com.rest.unit;
2   
3   /*
4    * #%L
5    * Gateway
6    * %%
7    * Copyright (C) 2015 Powered by Sergey
8    * %%
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   * 
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   * 
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   * #L%
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   * Created by aautushk on 10/9/2015.
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      //user story 3.
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      //user story 3.
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      //user story 3.
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     //user story 3.
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     //user story 4.
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     //user story 4.
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     //user story 5.
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     //user story 5.
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     //user story 5.
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     //user story 5.
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 }