Skip to content

Commit 64a6712

Browse files
committed
Added unit tests for UserService class.
Also added mockito to list of dependencies.
1 parent c1a8b54 commit 64a6712

File tree

2 files changed

+318
-0
lines changed

2 files changed

+318
-0
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@
121121
<scope>test</scope>
122122
</dependency>
123123

124+
<dependency>
125+
<groupId>org.mockito</groupId>
126+
<artifactId>mockito-core</artifactId>
127+
<version>1.9.0-rc1</version>
128+
<scope>test</scope>
129+
</dependency>
130+
124131
<dependency>
125132
<groupId>org.easytesting</groupId>
126133
<artifactId>fest-assert</artifactId>
Lines changed: 311 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
/*
2+
* Copyright (C) 2011 Slava Semushin <slava.semushin@gmail.com>
3+
*
4+
* This program is free software; you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation; either version 2 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program; if not, write to the Free Software
16+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17+
*/
18+
19+
package ru.mystamps.web.service;
20+
21+
import java.util.Date;
22+
23+
import org.junit.Before;
24+
import org.junit.Test;
25+
import org.junit.runner.RunWith;
26+
27+
import org.mockito.ArgumentCaptor;
28+
import org.mockito.Captor;
29+
import org.mockito.Mock;
30+
import org.mockito.runners.MockitoJUnitRunner;
31+
32+
import static org.fest.assertions.Assertions.assertThat;
33+
34+
import static org.mockito.Mockito.verify;
35+
import static org.mockito.Mockito.any;
36+
import static org.mockito.Mockito.anyString;
37+
import static org.mockito.Mockito.when;
38+
39+
import ru.mystamps.web.dao.UserDao;
40+
import ru.mystamps.web.dao.UsersActivationDao;
41+
import ru.mystamps.web.entity.User;
42+
import ru.mystamps.web.entity.UsersActivation;
43+
44+
@RunWith(MockitoJUnitRunner.class)
45+
public class UserServiceTest {
46+
47+
private static final String TEST_NAME = "Test Name";
48+
private static final String TEST_LOGIN = "test";
49+
private static final String TEST_PASSWORD = "secret";
50+
private static final String TEST_SALT = "salt";
51+
52+
// sha1(TEST_SALT + TEST_PASSWORD)
53+
private static final String TEST_HASH = "da00ec2e6ff9ed4d342b24a16e262c82f3c8b10b";
54+
55+
private static final String TEST_EMAIL = "test@example.org";
56+
private static final String TEST_ACTIVATION_KEY = "1234567890";
57+
58+
@Mock
59+
private UserDao userDao;
60+
61+
@Mock
62+
private UsersActivationDao usersActivationDao;
63+
64+
@Captor
65+
private ArgumentCaptor<UsersActivation> activationCaptor;
66+
67+
@Captor
68+
private ArgumentCaptor<User> userCaptor;
69+
70+
private UserService service;
71+
72+
@Before
73+
public void setup() {
74+
service = new UserService(userDao, usersActivationDao);
75+
}
76+
77+
//
78+
// Tests for addRegistrationRequest()
79+
//
80+
81+
@Test
82+
public void addRegistrationRequestShouldCallDao() {
83+
service.addRegistrationRequest(null);
84+
verify(usersActivationDao).add(any(UsersActivation.class));
85+
}
86+
87+
@Test
88+
public void addRegistrationRequestShouldGenerateActivationKey() {
89+
service.addRegistrationRequest(null);
90+
91+
verify(usersActivationDao).add(activationCaptor.capture());
92+
93+
final String activationKey = activationCaptor.getValue().getActivationKey();
94+
assertThat(activationKey.length()).as("activation key length").isEqualTo(UsersActivation.ACTIVATION_KEY_LENGTH);
95+
assertThat(activationKey).matches("^[\\p{Lower}\\p{Digit}]+$");
96+
}
97+
98+
@Test
99+
public void addRegistrationRequestShouldPassEmailToDao() {
100+
service.addRegistrationRequest(TEST_EMAIL);
101+
102+
verify(usersActivationDao).add(activationCaptor.capture());
103+
104+
assertThat(activationCaptor.getValue().getEmail()).isEqualTo(TEST_EMAIL);
105+
}
106+
107+
@Test
108+
public void addRegistrationRequestShouldAssignCurrentDate() {
109+
service.addRegistrationRequest(null);
110+
111+
verify(usersActivationDao).add(activationCaptor.capture());
112+
113+
assertThat(activationCaptor.getValue().getCreatedAt()).isNotNull();
114+
}
115+
116+
//
117+
// Tests for findRegistrationRequestByActivationKey()
118+
//
119+
120+
@Test
121+
public void findRegistrationRequestByActivationKeyShouldPassActivationKeyToDao() {
122+
service.findRegistrationRequestByActivationKey(TEST_ACTIVATION_KEY);
123+
verify(usersActivationDao).findByActivationKey(TEST_ACTIVATION_KEY);
124+
}
125+
126+
//
127+
// Tests for registerUser()
128+
//
129+
130+
@Test
131+
public void registerUserShouldCreateUser() {
132+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
133+
134+
service.registerUser(null, null, null, null);
135+
136+
verify(userDao).add(any(User.class));
137+
}
138+
139+
@Test
140+
public void registerUserShouldDeleteRegistrationRequest() {
141+
final UsersActivation activation = getUsersActivation();
142+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(activation);
143+
144+
service.registerUser(null, null, null, null);
145+
146+
verify(usersActivationDao).delete(activation);
147+
}
148+
149+
@Test
150+
public void registerUserShouldPassNameToDao() {
151+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
152+
153+
service.registerUser(null, null, TEST_NAME, null);
154+
155+
verify(userDao).add(userCaptor.capture());
156+
157+
assertThat(userCaptor.getValue().getName()).isEqualTo(TEST_NAME);
158+
}
159+
160+
@Test
161+
public void registerUserShouldPassLoginInsteadOfNameWhenNameIsEmpty() {
162+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
163+
164+
service.registerUser(TEST_LOGIN, null, "", null);
165+
166+
verify(userDao).add(userCaptor.capture());
167+
168+
assertThat(userCaptor.getValue().getName()).isEqualTo(TEST_LOGIN);
169+
}
170+
171+
@Test
172+
public void registerUserShouldUseEmailFromRegistrationRequest() {
173+
final UsersActivation activation = getUsersActivation();
174+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(activation);
175+
176+
service.registerUser(null, null, null, null);
177+
178+
verify(userDao).add(userCaptor.capture());
179+
180+
assertThat(userCaptor.getValue().getEmail()).isEqualTo(activation.getEmail());
181+
}
182+
183+
@Test
184+
public void registerUserShouldUseRegistrationDateFromRegistrationRequest() {
185+
final UsersActivation activation = getUsersActivation();
186+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(activation);
187+
188+
service.registerUser(null, null, null, null);
189+
190+
verify(userDao).add(userCaptor.capture());
191+
192+
assertThat(userCaptor.getValue().getRegisteredAt()).isEqualTo(activation.getCreatedAt());
193+
}
194+
195+
@Test
196+
public void registerUserShouldGenerateSalt() {
197+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
198+
199+
service.registerUser(null, null, null, null);
200+
201+
verify(userDao).add(userCaptor.capture());
202+
203+
final String salt = userCaptor.getValue().getSalt();
204+
assertThat(salt.length()).as("salt length").isEqualTo(User.SALT_LENGTH);
205+
assertThat(salt).matches("^[\\p{Alnum}]+$");
206+
}
207+
208+
@Test
209+
public void registerUserShouldGenerateHash() {
210+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
211+
212+
service.registerUser(null, null, null, null);
213+
214+
verify(userDao).add(userCaptor.capture());
215+
216+
final int SHA1_SUM_LENGTH = 40;
217+
final String hash = userCaptor.getValue().getHash();
218+
assertThat(hash.length()).as("hash length").isEqualTo(SHA1_SUM_LENGTH);
219+
assertThat(hash).matches("^[\\p{Lower}\\p{Digit}]+$");
220+
221+
// TODO: check that hash based on password
222+
}
223+
224+
@Test
225+
public void registerUserShouldPassLoginToDao() {
226+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
227+
228+
service.registerUser(TEST_LOGIN, null, null, null);
229+
230+
verify(userDao).add(userCaptor.capture());
231+
232+
assertThat(userCaptor.getValue().getLogin()).isEqualTo(TEST_LOGIN);
233+
}
234+
235+
@Test
236+
public void registerUserShouldAssignActivationDate() {
237+
when(usersActivationDao.findByActivationKey(anyString())).thenReturn(getUsersActivation());
238+
239+
service.registerUser(null, null, null, null);
240+
241+
verify(userDao).add(userCaptor.capture());
242+
243+
assertThat(userCaptor.getValue().getActivatedAt()).isNotNull();
244+
}
245+
246+
//
247+
// Tests for findByLogin()
248+
//
249+
250+
@Test
251+
public void findByLoginShouldPassLoginToDao() {
252+
service.findByLogin(TEST_LOGIN);
253+
verify(userDao).findByLogin(TEST_LOGIN);
254+
}
255+
256+
//
257+
// Tests for findByLoginAndPassword()
258+
//
259+
260+
@Test
261+
public void findByLoginAndPasswordShouldReturnNullWhenUserNotFound() {
262+
when(userDao.findByLogin(TEST_LOGIN)).thenReturn(null);
263+
264+
final User user = service.findByLoginAndPassword(TEST_LOGIN, null);
265+
assertThat(user).isNull();
266+
}
267+
268+
@Test
269+
public void findByLoginAndPasswordShouldReturnNullWhenInvalidPasswordProvided() {
270+
final User resultUser = getValidUser();
271+
resultUser.setHash("anyHash");
272+
when(userDao.findByLogin(anyString())).thenReturn(resultUser);
273+
274+
final User user = service.findByLoginAndPassword(null, TEST_PASSWORD);
275+
assertThat(user).isNull();
276+
}
277+
278+
@Test
279+
public void findByLoginAndPasswordShouldReturnUserForValidCredentials() {
280+
when(userDao.findByLogin(anyString())).thenReturn(getValidUser());
281+
282+
final User user = service.findByLoginAndPassword(null, TEST_PASSWORD);
283+
assertThat(user).isNotNull();
284+
285+
// TODO
286+
//assertThat(user).isEqualTo(resultUser);
287+
}
288+
289+
private User getValidUser() {
290+
final User user = new User();
291+
user.setId(777);
292+
user.setLogin(TEST_LOGIN);
293+
user.setName(TEST_NAME);
294+
user.setEmail(TEST_EMAIL);
295+
user.setRegisteredAt(new Date());
296+
user.setActivatedAt(new Date());
297+
user.setHash(TEST_HASH);
298+
user.setSalt(TEST_SALT);
299+
300+
return user;
301+
}
302+
303+
private UsersActivation getUsersActivation() {
304+
final UsersActivation activation = new UsersActivation();
305+
activation.setActivationKey(TEST_ACTIVATION_KEY);
306+
activation.setEmail(TEST_EMAIL);
307+
activation.setCreatedAt(new Date());
308+
return activation;
309+
}
310+
311+
}

0 commit comments

Comments
 (0)