package com.upplication.account; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Collection; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; @RunWith(MockitoJUnitRunner.class) public class UserServiceTest { @InjectMocks private UserService userService = new UserService(); @Mock private AccountRepository accountRepositoryMock; @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void shouldInitializeWithTwoDemoUsers() { // act userService.initialize(); // assert verify(accountRepositoryMock, times(2)).save(any(Account.class)); } @Test public void shouldThrowExceptionWhenUserNotFound() { // arrange thrown.expect(UsernameNotFoundException.class); thrown.expectMessage("user not found"); when(accountRepositoryMock.findByEmail("user@example.com")).thenReturn(null); // act userService.loadUserByUsername("user@example.com"); } @Test public void shouldReturnUserDetails() { // arrange Account demoUser = new Account("user@example.com", "demo", "ROLE_USER"); when(accountRepositoryMock.findByEmail("user@example.com")).thenReturn(demoUser); // act UserDetails userDetails = userService.loadUserByUsername("user@example.com"); // assert assertThat(demoUser.getEmail()).isEqualTo(userDetails.getUsername()); assertThat(demoUser.getPassword()).isEqualTo(userDetails.getPassword()); assertThat(hasAuthority(userDetails, demoUser.getRole())); } private boolean hasAuthority(UserDetails userDetails, String role) { Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities(); for(GrantedAuthority authority : authorities) { if(authority.getAuthority().equals(role)) { return true; } } return false; } }