1+ package alexp .blog .service ;
2+
3+ import alexp .blog .model .Role ;
4+ import alexp .blog .model .User ;
5+ import alexp .blog .repository .UserRepository ;
6+ import org .junit .Before ;
7+ import org .junit .Test ;
8+ import org .mockito .InjectMocks ;
9+ import org .mockito .Matchers ;
10+ import org .mockito .Mock ;
11+ import org .mockito .MockitoAnnotations ;
12+ import org .springframework .security .core .authority .SimpleGrantedAuthority ;
13+ import org .springframework .security .core .userdetails .UserDetails ;
14+ import org .springframework .security .core .userdetails .UsernameNotFoundException ;
15+ import org .springframework .security .crypto .password .PasswordEncoder ;
16+
17+ import java .util .Arrays ;
18+ import java .util .List ;
19+ import java .util .stream .Collectors ;
20+
21+ import static org .hamcrest .CoreMatchers .*;
22+ import static org .hamcrest .MatcherAssert .assertThat ;
23+ import static org .mockito .Mockito .*;
24+
25+ public class UserServiceTest {
26+
27+ public static final String NAME = "name" ;
28+ public static final String EMAIL = "email" ;
29+ @ Mock
30+ private UserRepository userRepository ;
31+
32+ @ Mock
33+ private PasswordEncoder passwordEncoder ;
34+
35+ @ InjectMocks
36+ private UserServiceImpl userService ;
37+
38+ @ Before
39+ public void setUp () throws Exception {
40+ MockitoAnnotations .initMocks (this );
41+ }
42+
43+ @ Test
44+ public void shouldFindByEmail () {
45+ User user = new User ();
46+
47+ when (userRepository .findByEmail (EMAIL )).thenReturn (user );
48+
49+ assertThat (userService .emailExists (EMAIL ), is (equalTo (true )));
50+
51+ assertThat (userService .findByEmail (EMAIL ), is (equalTo (user )));
52+
53+ verify (userRepository , atLeastOnce ()).findByEmail (Matchers .anyString ());
54+ }
55+
56+ @ Test
57+ public void shouldReturnNullWhenEmailNotExists () {
58+ assertThat (userService .emailExists (EMAIL ), is (equalTo (false )));
59+
60+ assertThat (userService .findByEmail (EMAIL ), is (equalTo (null )));
61+
62+ verify (userRepository , atLeastOnce ()).findByEmail (Matchers .anyString ());
63+ }
64+
65+ @ Test
66+ public void shouldFindByUsername () {
67+ User user = new User ();
68+
69+ when (userRepository .findByUsername (NAME )).thenReturn (user );
70+
71+ assertThat (userService .usernameExists (NAME ), is (equalTo (true )));
72+
73+ assertThat (userService .findByUsername (NAME ), is (equalTo (user )));
74+
75+ verify (userRepository , atLeastOnce ()).findByUsername (Matchers .anyString ());
76+ }
77+
78+ @ Test
79+ public void shouldReturnNullWhenUsernameNotExists () {
80+ assertThat (userService .usernameExists (NAME ), is (equalTo (false )));
81+
82+ assertThat (userService .findByUsername (NAME ), is (equalTo (null )));
83+
84+ verify (userRepository , atLeastOnce ()).findByUsername (Matchers .anyString ());
85+ }
86+
87+ @ Test
88+ public void shouldAddNewUser () {
89+ User user = new User ();
90+
91+ userService .register (user );
92+
93+ assertThat (user .isEnabled (), is (equalTo (true )));
94+
95+ verify (userRepository , times (1 )).saveAndFlush (user );
96+ }
97+
98+ @ Test
99+ public void shouldEncodePassword () {
100+ String password = "password" ;
101+ String encodedPassword = "encodedPassword" ;
102+
103+ User user = new User ();
104+ user .setPassword (password );
105+
106+ when (passwordEncoder .encode (password )).thenReturn (encodedPassword );
107+
108+ userService .register (user );
109+
110+ assertThat (user .getPassword (), is (equalTo (encodedPassword )));
111+
112+ verify (passwordEncoder , times (1 )).encode (password );
113+ }
114+
115+ @ Test
116+ public void shouldLoadUserDetails () {
117+ User user = new User ();
118+ user .setUsername (NAME );
119+ user .setPassword ("123" );
120+
121+ List <String > role1Names = Arrays .asList ("role1" , "role2" );
122+ for (String roleName : role1Names ) {
123+ Role role = new Role ();
124+ role .setName (roleName );
125+ user .getRoles ().add (role );
126+ }
127+
128+ when (userRepository .findByUsernameOrEmail (NAME , NAME )).thenReturn (user );
129+
130+ UserDetails userDetails = userService .loadUserByUsername (NAME );
131+
132+ List <SimpleGrantedAuthority > authorities = role1Names .stream ().map (SimpleGrantedAuthority ::new ).collect (Collectors .toList ());
133+ assertThat (userDetails .getAuthorities ().containsAll (authorities ), is (equalTo (true )));
134+
135+ verify (userRepository , times (1 )).findByUsernameOrEmail (NAME , NAME );
136+ }
137+
138+ @ Test (expected = UsernameNotFoundException .class )
139+ public void shouldThrowUsernameNotFound () {
140+ userService .loadUserByUsername ("notExisting" );
141+ }
142+
143+ }
0 commit comments