Skip to content
This repository was archived by the owner on Apr 5, 2024. It is now read-only.

Commit 29d8fcd

Browse files
authored
FF-175 Refactor Exceptions and UnitTests (#48)
* Added missing sanitation. * FF-175 Refactor Exceptions and UnitTests in UserBusinessService. * FF-175 Refactor Exceptions and UnitTests in remaining classes.
1 parent c05ced3 commit 29d8fcd

14 files changed

+136
-85
lines changed

src/main/java/de/filefighter/rest/domain/common/InputSanitizerService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static boolean stringIsValid(String s) {
1919
*/
2020
public static String sanitizeString(String string) {
2121
if(!InputSanitizerService.stringIsValid(string))
22-
throw new RequestDidntMeetFormalRequirementsException("String was empty");
22+
throw new RequestDidntMeetFormalRequirementsException("String was empty.");
2323
return string.replaceAll("\\s", "");
2424
}
2525

src/main/java/de/filefighter/rest/domain/token/business/AccessTokenDtoService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public AccessToken createDto(AccessTokenEntity entity) {
3030
public AccessTokenEntity findEntity(AccessToken dto) {
3131
AccessTokenEntity accessTokenEntity = accessTokenRepository.findByUserIdAndValue(dto.getUserId(), dto.getTokenValue());
3232
if (null == accessTokenEntity)
33-
throw new AccessTokenNotFoundException("AccessTokenEntity does not exist for AccessToken: "+ dto);
33+
throw new AccessTokenNotFoundException("AccessTokenEntity does not exist for AccessToken with userId "+ dto.getUserId()+".");
3434

3535
return accessTokenEntity;
3636
}

src/main/java/de/filefighter/rest/domain/user/business/UserBusinessService.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import de.filefighter.rest.domain.user.exceptions.UserNotUpdatedException;
1212
import de.filefighter.rest.domain.user.group.GroupRepository;
1313
import de.filefighter.rest.domain.user.group.Groups;
14-
import de.filefighter.rest.rest.exceptions.RequestDidntMeetFormalRequirementsException;
1514
import org.slf4j.Logger;
1615
import org.slf4j.LoggerFactory;
1716
import org.springframework.beans.factory.annotation.Value;
@@ -25,7 +24,6 @@
2524
import java.util.Arrays;
2625
import java.util.regex.Pattern;
2726

28-
import static de.filefighter.rest.domain.common.InputSanitizerService.sanitizeString;
2927
import static de.filefighter.rest.domain.common.InputSanitizerService.stringIsValid;
3028

3129
@Service
@@ -71,7 +69,7 @@ public RefreshToken getRefreshTokenForUser(User user) {
7169
String refreshTokenValue = userEntity.getRefreshToken();
7270

7371
if (!stringIsValid(refreshTokenValue))
74-
throw new IllegalStateException("RefreshToken was empty in db.");
72+
throw new IllegalStateException("RefreshToken was invalid or empty in db.");
7573

7674
return RefreshToken
7775
.builder()
@@ -81,10 +79,7 @@ public RefreshToken getRefreshTokenForUser(User user) {
8179
}
8280

8381
public User findUserByUsername(String username) {
84-
if (!stringIsValid(username))
85-
throw new RequestDidntMeetFormalRequirementsException("Username was not valid.");
86-
87-
String lowercaseUsername = sanitizeString(username.toLowerCase());
82+
String lowercaseUsername = username.toLowerCase();
8883

8984
UserEntity entity = userRepository.findByLowercaseUsername(lowercaseUsername);
9085
if (null == entity)
@@ -158,7 +153,7 @@ public void updateUser(long userId, UserRegisterForm userToUpdate, User authenti
158153
throw new UserNotUpdatedException("No updates specified.");
159154

160155
if (null == authenticatedUser.getGroups())
161-
throw new UserNotUpdatedException("Authenticated User is not allowed");
156+
throw new UserNotUpdatedException("Authenticated User is not allowed.");
162157

163158
boolean authenticatedUserIsAdmin = Arrays.stream(authenticatedUser.getGroups()).anyMatch(g -> g == Groups.ADMIN);
164159
if (userId != authenticatedUser.getId() && !authenticatedUserIsAdmin)
@@ -218,7 +213,7 @@ public void updateUser(long userId, UserRegisterForm userToUpdate, User authenti
218213
try {
219214
for (Groups group : groupRepository.getGroupsByIds(userToUpdate.getGroupIds())) {
220215
if (group == Groups.ADMIN && !authenticatedUserIsAdmin)
221-
throw new UserNotUpdatedException("Only admins can add users to group " + Groups.ADMIN.getDisplayName());
216+
throw new UserNotUpdatedException("Only admins can add users to group " + Groups.ADMIN.getDisplayName() + ".");
222217
}
223218
} catch (IllegalArgumentException exception) {
224219
throw new UserNotUpdatedException("One or more groups do not exist.");
@@ -236,14 +231,14 @@ public void updateUser(long userId, UserRegisterForm userToUpdate, User authenti
236231
mongoTemplate.findAndModify(query, newUpdate, UserEntity.class);
237232
}
238233

239-
public long generateRandomUserId(){
234+
public long generateRandomUserId() {
240235
long possibleUserId = 0L;
241236
boolean userIdIsFree = false;
242237

243-
while(!userIdIsFree){
238+
while (!userIdIsFree) {
244239
possibleUserId = new SecureRandom().nextInt(UserBusinessService.USER_ID_MAX);
245240
UserEntity userEntity = userRepository.findByUserId(possibleUserId);
246-
if(null == userEntity && possibleUserId > 0)
241+
if (null == userEntity && possibleUserId > 0)
247242
userIdIsFree = true;
248243
}
249244

src/main/java/de/filefighter/rest/domain/user/exceptions/UserNotFoundException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public UserNotFoundException(){
77
}
88

99
public UserNotFoundException(long id) {
10-
super("Could not find user " + id);
10+
super("Could not find user with userId " + id+".");
1111
}
1212

1313
public UserNotFoundException(String message) {

src/main/java/de/filefighter/rest/domain/user/group/GroupRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public Groups getGroupById(long id) {
1212
return group;
1313
}
1414
}
15-
throw new IllegalArgumentException("id doesnt belong to a group");
15+
throw new IllegalArgumentException("id "+id+" doesnt belong to a group.");
1616
}
1717

1818
public Groups[] getGroupsByIds(long... ids){

src/main/java/de/filefighter/rest/domain/user/rest/UserRestService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ public ResponseEntity<ServerResponse> registerNewUserWithAccessToken(UserRegiste
9090
public ResponseEntity<User> findUserByUsernameAndAccessToken(String username, String accessTokenHeader) {
9191
String sanitizedHeaderValue = inputSanitizerService.sanitizeRequestHeader(AUTHORIZATION_BEARER_PREFIX, accessTokenHeader);
9292
String sanitizedTokenString = inputSanitizerService.sanitizeTokenValue(sanitizedHeaderValue);
93+
String sanitizedUserName = InputSanitizerService.sanitizeString(username);
9394

9495
AccessToken accessToken = accessTokenBusinessService.findAccessTokenByValue(sanitizedTokenString);
9596
userAuthorizationService.authenticateUserWithAccessToken(accessToken);
96-
User foundUser = userBusinessService.findUserByUsername(username);
97+
User foundUser = userBusinessService.findUserByUsername(sanitizedUserName);
9798
return new ResponseEntity<>(foundUser, HttpStatus.OK);
9899
}
99100
}

src/test/java/de/filefighter/rest/domain/common/InputSanitizerServiceUnitTest.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ void sanitizeStringThrows() {
2323
String string0 = "";
2424
String string1 = null;
2525

26-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
26+
RequestDidntMeetFormalRequirementsException ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
2727
InputSanitizerService.sanitizeString(string0));
28+
assertEquals("Request didnt meet formal requirements. String was empty.", ex.getMessage());
2829

29-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
30+
ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
3031
InputSanitizerService.sanitizeString(string1));
32+
assertEquals("Request didnt meet formal requirements. String was empty.", ex.getMessage());
3133
}
3234

3335
@Test
@@ -49,17 +51,21 @@ void sanitizeRequestHeaderThrows() {
4951
String string2 = header + "";
5052
String string3 = header + " as a a s d d d ";
5153

52-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
54+
RequestDidntMeetFormalRequirementsException ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
5355
inputSanitizerService.sanitizeRequestHeader(header, string0));
56+
assertEquals("Request didnt meet formal requirements. Header does not contain a valid String.", ex.getMessage());
5457

55-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
58+
ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
5659
inputSanitizerService.sanitizeRequestHeader(header, string1));
60+
assertEquals("Request didnt meet formal requirements. Header does not contain a valid String.", ex.getMessage());
5761

58-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
62+
ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
5963
inputSanitizerService.sanitizeRequestHeader(header, string2));
64+
assertEquals("Request didnt meet formal requirements. Header does not contain '" + header + "', or format is invalid.", ex.getMessage());
6065

61-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
66+
ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
6267
inputSanitizerService.sanitizeRequestHeader(header, string3));
68+
assertEquals("Request didnt meet formal requirements. Header does not contain '" + header + "', or format is invalid.", ex.getMessage());
6369
}
6470

6571

@@ -79,10 +85,14 @@ void sanitizeTokenThrows() {
7985
String string0 = "";
8086
String string1 = null;
8187

82-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
88+
RequestDidntMeetFormalRequirementsException ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
8389
inputSanitizerService.sanitizeTokenValue(string0));
84-
assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
90+
assertEquals("Request didnt meet formal requirements. String was empty.", ex.getMessage());
91+
92+
ex = assertThrows(RequestDidntMeetFormalRequirementsException.class, () ->
8593
inputSanitizerService.sanitizeTokenValue(string1));
94+
assertEquals("Request didnt meet formal requirements. String was empty.", ex.getMessage());
95+
8696
}
8797

8898
@Test

src/test/java/de/filefighter/rest/domain/filesystem/type/FileSystemTypeRepositoryUnitTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ class FileSystemTypeRepositoryUnitTest {
1111

1212
@Test
1313
void findFileSystemTypeByIdThrows() {
14-
assertThrows(IllegalArgumentException.class, () ->
15-
fileSystemTypeRepository.findFileSystemTypeById(900));
14+
long id = 900;
15+
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () ->
16+
fileSystemTypeRepository.findFileSystemTypeById(id));
17+
assertEquals("No FileSystemType found for id: " + id, ex.getMessage());
1618
}
1719

1820
@Test

src/test/java/de/filefighter/rest/domain/token/business/AccessTokenBusinessServiceUnitTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ void getValidAccessTokenForUserWhenTokenDeletionFails() {
9595
when(accessTokenRepositoryMock.findByUserId(dummyId)).thenReturn(dummyAccessTokenEntity);
9696
when(accessTokenRepositoryMock.deleteByUserId(dummyId)).thenReturn(dummyId - 1);
9797

98-
assertThrows(FileFighterDataException.class, () -> accessTokenBusinessService.getValidAccessTokenForUser(dummyUser));
98+
FileFighterDataException ex = assertThrows(FileFighterDataException.class, () ->
99+
accessTokenBusinessService.getValidAccessTokenForUser(dummyUser));
100+
assertEquals("Internal Error occurred. AccessToken for userId " + dummyId + " could not be deleted.", ex.getMessage());
99101
}
100102

101103
@Test
@@ -105,9 +107,10 @@ void findAccessTokenByValueAndUserIdWithTokenNotFound() {
105107

106108
when(accessTokenRepositoryMock.findByUserIdAndValue(userId, tokenValue)).thenReturn(null);
107109

108-
assertThrows(UserNotAuthenticatedException.class, () ->
110+
UserNotAuthenticatedException ex = assertThrows(UserNotAuthenticatedException.class, () ->
109111
accessTokenBusinessService.findAccessTokenByValueAndUserId(tokenValue, userId)
110112
);
113+
assertEquals("User with the id " + userId + " could not be authenticated.", ex.getMessage());
111114
}
112115

113116
@Test
@@ -127,12 +130,14 @@ void findAccessTokenByValueAndUserIdWithFoundToken() {
127130

128131
@Test
129132
void findAccessTokenByValueThrowsException() {
130-
String invalidFormat = "";
131133
String validFormat = "ugabuga";
132134

133-
assertThrows(UserNotAuthenticatedException.class, () ->
135+
when(accessTokenRepositoryMock.findByValue(validFormat)).thenReturn(null);
136+
137+
UserNotAuthenticatedException ex = assertThrows(UserNotAuthenticatedException.class, () ->
134138
accessTokenBusinessService.findAccessTokenByValue(validFormat)
135139
);
140+
assertEquals("User could not be authenticated. AccessToken not found.", ex.getMessage());
136141
}
137142

138143
@Test

src/test/java/de/filefighter/rest/domain/token/business/AccessTokenDtoServiceUnitTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import org.junit.jupiter.api.BeforeEach;
88
import org.junit.jupiter.api.Test;
99

10-
import static org.junit.jupiter.api.Assertions.*;
10+
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertThrows;
1112
import static org.mockito.Mockito.mock;
1213
import static org.mockito.Mockito.when;
1314

@@ -44,9 +45,10 @@ void findEntityNotSuccessfully() {
4445

4546
when(accessTokenRepository.findByUserIdAndValue(userId, token)).thenReturn(null);
4647

47-
assertThrows(AccessTokenNotFoundException.class, () ->
48+
AccessTokenNotFoundException ex = assertThrows(AccessTokenNotFoundException.class, () ->
4849
accessTokenDtoService.findEntity(dummyToken)
4950
);
51+
assertEquals("AccessTokenEntity does not exist for AccessToken with userId "+userId+".", ex.getMessage());
5052
}
5153

5254
@Test

0 commit comments

Comments
 (0)