package gov.samhsa.consent2share.infrastructure.eventlistener;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import gov.samhsa.consent2share.common.AuthenticatedUser;
import gov.samhsa.consent2share.common.UserContext;
import gov.samhsa.consent2share.infrastructure.securityevent.UnauthorizedAccessAttemptedEvent;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.security.access.event.AuthorizationFailureEvent;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.WebAuthenticationDetails;
@RunWith(MockitoJUnitRunner.class)
public class AuthorizationFailureEventListenerTest {
final static String IP_ADDRESS="192.168.0.1";
final static String USER_NAME="user1";
@Mock
UserContext userContext;
@Mock
EventService eventService;
@InjectMocks
AuthorizationFailureEventListener authorizationFailureEventListener;
@Test
public void testHandle() {
AuthorizationFailureEvent event=mock(AuthorizationFailureEvent.class);
WebAuthenticationDetails details=mock(WebAuthenticationDetails.class);
Authentication authentication=mock(Authentication.class);
AuthenticatedUser user=mock(AuthenticatedUser.class);
doReturn(authentication).when(event).getAuthentication();
doReturn(details).when(authentication).getDetails();
doReturn(IP_ADDRESS).when(details).getRemoteAddress();
doReturn(user).when(userContext).getCurrentUser();
doReturn(USER_NAME).when(user).getUsername();
authorizationFailureEventListener.handle(event);
verify(eventService).raiseSecurityEvent(any(UnauthorizedAccessAttemptedEvent.class));
verify(userContext).getCurrentUser();
}
}