use java8 optional

This commit is contained in:
Athou
2014-12-12 10:18:59 +01:00
parent 6c67e6363a
commit db03dd12a0
12 changed files with 151 additions and 139 deletions

View File

@@ -4,6 +4,7 @@ import io.dropwizard.lifecycle.Managed;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -20,7 +21,6 @@ import com.commafeed.backend.HttpGetter.NotModifiedException;
import com.commafeed.backend.feed.FeedRefreshExecutor.Task;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry;
import com.google.common.base.Optional;
/**
* Calls {@link FeedFetcher} and handles its outcome
@@ -84,7 +84,7 @@ public class FeedRefreshWorker implements Managed {
int refreshInterval = config.getApplicationSettings().getRefreshIntervalMinutes();
Date disabledUntil = DateUtils.addMinutes(new Date(), refreshInterval);
try {
String url = Optional.fromNullable(feed.getUrlAfterRedirect()).or(feed.getUrl());
String url = Optional.ofNullable(feed.getUrlAfterRedirect()).orElse(feed.getUrl());
FetchedFeed fetchedFeed = fetcher.fetch(url, false, feed.getLastModifiedHeader(), feed.getEtagHeader(),
feed.getLastPublishedDate(), feed.getLastContentHash());
// stops here if NotModifiedException or any other exception is thrown

View File

@@ -1,5 +1,6 @@
package com.commafeed.backend.service;
import java.util.Optional;
import java.util.Properties;
import javax.inject.Inject;
@@ -17,7 +18,6 @@ import lombok.RequiredArgsConstructor;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.CommaFeedConfiguration.ApplicationSettings;
import com.commafeed.backend.model.User;
import com.google.common.base.Optional;
/**
* Mailing service
@@ -35,7 +35,7 @@ public class MailService {
final String username = settings.getSmtpUserName();
final String password = settings.getSmtpPassword();
final String fromAddress = Optional.fromNullable(settings.getSmtpFromAddress()).or(settings.getSmtpUserName());
final String fromAddress = Optional.ofNullable(settings.getSmtpFromAddress()).orElse(settings.getSmtpUserName());
String dest = user.getEmail();

View File

@@ -2,6 +2,7 @@ package com.commafeed.backend.service;
import java.util.Collection;
import java.util.Date;
import java.util.Optional;
import java.util.UUID;
import javax.inject.Inject;
@@ -20,7 +21,6 @@ import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.backend.service.internal.PostLoginActivities;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
@@ -41,7 +41,7 @@ public class UserService {
*/
public Optional<User> login(String nameOrEmail, String password) {
if (nameOrEmail == null || password == null) {
return Optional.absent();
return Optional.empty();
}
User user = userDAO.findByName(nameOrEmail);
@@ -55,7 +55,7 @@ public class UserService {
return Optional.of(user);
}
}
return Optional.absent();
return Optional.empty();
}
/**
@@ -63,7 +63,7 @@ public class UserService {
*/
public Optional<User> login(String apiKey) {
if (apiKey == null) {
return Optional.absent();
return Optional.empty();
}
User user = userDAO.findByApiKey(apiKey);
@@ -71,7 +71,7 @@ public class UserService {
performPostLoginActivities(user);
return Optional.of(user);
}
return Optional.absent();
return Optional.empty();
}
/**

View File

@@ -1,5 +1,7 @@
package com.commafeed.frontend.auth;
import java.util.Optional;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException;
@@ -18,7 +20,6 @@ import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.backend.service.UserService;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
@RequiredArgsConstructor
public class SecurityCheckFactory extends AbstractContainerRequestValueFactory<User> {
@@ -82,7 +83,7 @@ public class SecurityCheckFactory extends AbstractContainerRequestValueFactory<U
}
}
}
return Optional.absent();
return Optional.empty();
}
private Optional<User> apiKeyLogin() {
@@ -90,7 +91,7 @@ public class SecurityCheckFactory extends AbstractContainerRequestValueFactory<U
if (apiKey != null && apiKeyAllowed) {
return userService.login(apiKey);
}
return Optional.absent();
return Optional.empty();
}
}

View File

@@ -6,6 +6,7 @@ import io.dropwizard.jersey.validation.ValidationErrorMessage;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Optional;
import java.util.UUID;
import javax.inject.Inject;
@@ -56,7 +57,6 @@ import com.commafeed.frontend.model.request.PasswordResetRequest;
import com.commafeed.frontend.model.request.ProfileModificationRequest;
import com.commafeed.frontend.model.request.RegistrationRequest;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.wordnik.swagger.annotations.Api;

View File

@@ -1,6 +1,7 @@
package com.commafeed.frontend.servlet;
import java.io.IOException;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -18,7 +19,6 @@ import com.commafeed.backend.dao.UserSettingsDAO;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
@SuppressWarnings("serial")
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))

View File

@@ -2,6 +2,7 @@ package com.commafeed.frontend.servlet;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -28,7 +29,6 @@ import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.backend.service.UserService;
import com.commafeed.frontend.resource.CategoryREST;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
import com.google.common.collect.Iterables;
@SuppressWarnings("serial")

View File

@@ -1,39 +1,40 @@
package com.commafeed.frontend.session;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import com.commafeed.backend.model.User;
import com.google.common.base.Optional;
@RequiredArgsConstructor()
public class SessionHelper {
private static final String SESSION_KEY_USER = "user";
private final HttpServletRequest request;
public Optional<User> getLoggedInUser() {
Optional<HttpSession> session = getSession(false);
if (session.isPresent()) {
User user = (User) session.get().getAttribute(SESSION_KEY_USER);
return Optional.fromNullable(user);
return Optional.ofNullable(user);
}
return Optional.absent();
return Optional.empty();
}
public void setLoggedInUser(User user) {
Optional<HttpSession> session = getSession(true);
session.get().setAttribute(SESSION_KEY_USER, user);
}
private Optional<HttpSession> getSession(boolean force) {
HttpSession session = request.getSession(force);
return Optional.fromNullable(session);
return Optional.ofNullable(session);
}
}

View File

@@ -9,6 +9,8 @@ import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -20,161 +22,167 @@ import com.commafeed.backend.dao.UserDAO;
import com.commafeed.backend.dao.UserSettingsDAO;
import com.commafeed.backend.model.User;
import com.commafeed.backend.service.internal.PostLoginActivities;
import com.google.common.base.Optional;
public class UserServiceTest {
private static final byte[] SALT = new byte[]{1,2,3};
private static final byte[] ENCRYPTED_PASSWORD = new byte[]{5,6,7};
@Mock private CommaFeedConfiguration commaFeedConfiguration;
@Mock private FeedCategoryDAO feedCategoryDAO;
@Mock private UserDAO userDAO;
@Mock private UserSettingsDAO userSettingsDAO;
@Mock private PasswordEncryptionService passwordEncryptionService;
@Mock private PostLoginActivities postLoginActivities;
private static final byte[] SALT = new byte[] { 1, 2, 3 };
private static final byte[] ENCRYPTED_PASSWORD = new byte[] { 5, 6, 7 };
@Mock
private CommaFeedConfiguration commaFeedConfiguration;
@Mock
private FeedCategoryDAO feedCategoryDAO;
@Mock
private UserDAO userDAO;
@Mock
private UserSettingsDAO userSettingsDAO;
@Mock
private PasswordEncryptionService passwordEncryptionService;
@Mock
private PostLoginActivities postLoginActivities;
private User disabledUser;
private User normalUser;
private UserService userService;
@Before public void
before_each_test() {
@Before
public void before_each_test() {
MockitoAnnotations.initMocks(this);
userService = new UserService(feedCategoryDAO, userDAO, userSettingsDAO, passwordEncryptionService, commaFeedConfiguration, postLoginActivities);
userService = new UserService(feedCategoryDAO, userDAO, userSettingsDAO, passwordEncryptionService, commaFeedConfiguration,
postLoginActivities);
disabledUser = new User();
disabledUser.setDisabled(true);
normalUser = new User();
normalUser.setDisabled(false);
normalUser.setSalt(SALT);
normalUser.setPassword(ENCRYPTED_PASSWORD);
}
@Test public void
calling_login_should_not_return_user_object_when_given_null_nameOrEmail() {
@Test
public void calling_login_should_not_return_user_object_when_given_null_nameOrEmail() {
Optional<User> user = userService.login(null, "password");
assertFalse(user.isPresent());
}
@Test public void
calling_login_should_not_return_user_object_when_given_null_password() {
@Test
public void calling_login_should_not_return_user_object_when_given_null_password() {
Optional<User> user = userService.login("testusername", null);
assertFalse(user.isPresent());
}
@Test public void
calling_login_should_lookup_user_by_name() {
@Test
public void calling_login_should_lookup_user_by_name() {
userService.login("test", "password");
verify(userDAO).findByName("test");
}
@Test public void
calling_login_should_lookup_user_by_email_if_lookup_by_name_failed() {
@Test
public void calling_login_should_lookup_user_by_email_if_lookup_by_name_failed() {
when(userDAO.findByName("test@test.com")).thenReturn(null);
userService.login("test@test.com", "password");
verify(userDAO).findByEmail("test@test.com");
}
@Test public void
calling_login_should_not_return_user_object_if_could_not_find_user_by_name_or_email() {
@Test
public void calling_login_should_not_return_user_object_if_could_not_find_user_by_name_or_email() {
when(userDAO.findByName("test@test.com")).thenReturn(null);
when(userDAO.findByEmail("test@test.com")).thenReturn(null);
Optional<User> user = userService.login("test@test.com", "password");
assertFalse(user.isPresent());
}
@Test public void
calling_login_should_not_return_user_object_if_user_is_disabled() {
@Test
public void calling_login_should_not_return_user_object_if_user_is_disabled() {
when(userDAO.findByName("test")).thenReturn(disabledUser);
Optional<User> user = userService.login("test", "password");
assertFalse(user.isPresent());
}
@Test public void
calling_login_should_try_to_authenticate_user_who_is_not_disabled() {
@Test
public void calling_login_should_try_to_authenticate_user_who_is_not_disabled() {
when(userDAO.findByName("test")).thenReturn(normalUser);
when(passwordEncryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(false);
userService.login("test", "password");
verify(passwordEncryptionService).authenticate("password", ENCRYPTED_PASSWORD, SALT);
}
@Test public void
calling_login_should_not_return_user_object_on_unsuccessful_authentication() {
@Test
public void calling_login_should_not_return_user_object_on_unsuccessful_authentication() {
when(userDAO.findByName("test")).thenReturn(normalUser);
when(passwordEncryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(false);
Optional<User> authenticatedUser = userService.login("test", "password");
assertFalse(authenticatedUser.isPresent());
}
@Test public void
calling_login_should_execute_post_login_activities_for_user_on_successful_authentication() {
@Test
public void calling_login_should_execute_post_login_activities_for_user_on_successful_authentication() {
when(userDAO.findByName("test")).thenReturn(normalUser);
when(passwordEncryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(true);
doNothing().when(postLoginActivities).executeFor(any(User.class));
userService.login("test", "password");
verify(postLoginActivities).executeFor(normalUser);
}
@Test public void
calling_login_should_return_user_object_on_successful_authentication() {
@Test
public void calling_login_should_return_user_object_on_successful_authentication() {
when(userDAO.findByName("test")).thenReturn(normalUser);
when(passwordEncryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(true);
doNothing().when(postLoginActivities).executeFor(any(User.class));
Optional<User> authenticatedUser = userService.login("test", "password");
assertTrue(authenticatedUser.isPresent());
assertEquals(normalUser, authenticatedUser.get());
}
@Test public void
api_login_should_not_return_user_if_apikey_null() {
@Test
public void api_login_should_not_return_user_if_apikey_null() {
Optional<User> user = userService.login(null);
assertFalse(user.isPresent());
}
@Test public void
api_login_should_lookup_user_by_apikey() {
@Test
public void api_login_should_lookup_user_by_apikey() {
when(userDAO.findByApiKey("apikey")).thenReturn(null);
userService.login("apikey");
verify(userDAO).findByApiKey("apikey");
}
@Test public void
api_login_should_not_return_user_if_user_not_found_from_lookup_by_apikey() {
@Test
public void api_login_should_not_return_user_if_user_not_found_from_lookup_by_apikey() {
when(userDAO.findByApiKey("apikey")).thenReturn(null);
Optional<User> user = userService.login("apikey");
assertFalse(user.isPresent());
}
@Test public void
api_login_should_not_return_user_if_user_found_from_apikey_lookup_is_disabled() {
@Test
public void api_login_should_not_return_user_if_user_found_from_apikey_lookup_is_disabled() {
when(userDAO.findByApiKey("apikey")).thenReturn(disabledUser);
Optional<User> user = userService.login("apikey");
assertFalse(user.isPresent());
}
@Test public void
api_login_should_perform_post_login_activities_if_user_found_from_apikey_lookup_not_disabled() {
@Test
public void api_login_should_perform_post_login_activities_if_user_found_from_apikey_lookup_not_disabled() {
when(userDAO.findByApiKey("apikey")).thenReturn(normalUser);
userService.login("apikey");
verify(postLoginActivities).executeFor(normalUser);
}
@Test public void
api_login_should_return_user_if_user_found_from_apikey_lookup_not_disabled() {
@Test
public void api_login_should_return_user_if_user_found_from_apikey_lookup_not_disabled() {
when(userDAO.findByApiKey("apikey")).thenReturn(normalUser);
Optional<User> returnedUser = userService.login("apikey");
assertEquals(normalUser, returnedUser.get());

View File

@@ -4,13 +4,14 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Optional;
import org.junit.Test;
import com.commafeed.backend.model.User;
import com.commafeed.backend.service.UserService;
import com.commafeed.backend.service.internal.PostLoginActivities;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
public class SecurityCheckFactoryTest {

View File

@@ -8,6 +8,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Optional;
import org.junit.Test;
import org.mockito.InOrder;
@@ -19,93 +20,92 @@ import com.commafeed.backend.service.UserService;
import com.commafeed.frontend.model.request.LoginRequest;
import com.commafeed.frontend.model.request.RegistrationRequest;
import com.commafeed.frontend.session.SessionHelper;
import com.google.common.base.Optional;
public class UserRestTest {
@Test public void
login_should_not_populate_http_session_if_unsuccessfull() {
@Test
public void login_should_not_populate_http_session_if_unsuccessfull() {
// Absent user
Optional<User> absentUser = Optional.absent();
Optional<User> absentUser = Optional.empty();
// Create UserService partial mock
UserService service = mock(UserService.class);
when(service.login("user", "password")).thenReturn(absentUser);
UserREST userREST = new UserREST(null, null, null, service, null, null, null);
SessionHelper sessionHelper = mock(SessionHelper.class);
LoginRequest req = new LoginRequest();
req.setName("user");
req.setPassword("password");
userREST.login(req, sessionHelper);
verify(sessionHelper, never()).setLoggedInUser(any(User.class));
}
@Test public void
login_should_populate_http_session_if_successfull() {
@Test
public void login_should_populate_http_session_if_successfull() {
// Create a user
User user = new User();
// Create UserService mock
UserService service = mock(UserService.class);
when(service.login("user", "password")).thenReturn(Optional.of(user));
LoginRequest req = new LoginRequest();
req.setName("user");
req.setPassword("password");
UserREST userREST = new UserREST(null, null, null, service, null, null, null);
SessionHelper sessionHelper = mock(SessionHelper.class);
userREST.login(req, sessionHelper);
verify(sessionHelper).setLoggedInUser(user);
}
@Test public void
register_should_register_and_then_login() {
@Test
public void register_should_register_and_then_login() {
// Create UserService mock
UserService service = mock(UserService.class);
RegistrationRequest req = new RegistrationRequest();
req.setName("user");
req.setPassword("password");
req.setEmail("test@test.com");
InOrder inOrder = inOrder(service);
SessionHelper sessionHelper = mock(SessionHelper.class);
UserREST userREST = new UserREST(null, null, null, service, null, null, null);
userREST.register(req, sessionHelper);
inOrder.verify(service).register("user", "password", "test@test.com", Arrays.asList(Role.USER));
inOrder.verify(service).login("user", "password");
}
@Test public void
register_should_populate_http_session() {
@Test
public void register_should_populate_http_session() {
// Create a user
User user = new User();
// Create UserService mock
UserService service = mock(UserService.class);
when(service.register(any(String.class), any(String.class), any(String.class), Matchers.anyListOf(Role.class))).thenReturn(user);
when(service.login(any(String.class), any(String.class))).thenReturn(Optional.of(user));
RegistrationRequest req = new RegistrationRequest();
req.setName("user");
req.setPassword("password");
req.setEmail("test@test.com");
SessionHelper sessionHelper = mock(SessionHelper.class);
UserREST userREST = new UserREST(null, null, null, service, null, null, null);
userREST.register(req, sessionHelper);
verify(sessionHelper).setLoggedInUser(user);
}

View File

@@ -4,6 +4,8 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@@ -11,7 +13,6 @@ import org.junit.Assert;
import org.junit.Test;
import com.commafeed.backend.model.User;
import com.google.common.base.Optional;
public class SessionHelperTest {