package ee.esutoniagodesu.service; import ee.esutoniagodesu.Application; import ee.esutoniagodesu.config.Constants; import ee.esutoniagodesu.config.Profiles; import ee.esutoniagodesu.security.SecurityUtils; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; import java.util.ArrayList; import static org.assertj.core.api.Assertions.assertThat; @ActiveProfiles(profiles = {Profiles.SPRING_PROFILE_DEV, Profiles.SPRING_PROFILE_UNIT, "dev-secret"}) @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest @Transactional public abstract class AbstractAuthenticatedServiceTest { @Inject protected UserDetailsService userDetailsService; @Before public void setup() { MockitoAnnotations.initMocks(this); } public void login(String username) throws Exception { UserDetails userDetails = userDetailsService.loadUserByUsername(username); setUserDetails(userDetails); } protected void setUserDetails(UserDetails userDetails) { String username = userDetails.getUsername(); TestingAuthenticationToken authenticationToken = new TestingAuthenticationToken(userDetails, username, new ArrayList<>(userDetails.getAuthorities())); SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(authenticationToken); SecurityContextHolder.setContext(securityContext); boolean isAuthenticated = SecurityUtils.isAuthenticated(); assertThat(isAuthenticated).isTrue(); } }