package org.molgenis.security.user;
import org.molgenis.auth.User;
import org.molgenis.auth.UserMetaData;
import org.molgenis.data.DataService;
import org.molgenis.data.support.QueryImpl;
import org.molgenis.security.user.UserServiceImplTest.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.molgenis.auth.UserMetaData.USER;
import static org.testng.Assert.assertEquals;
@ContextConfiguration(classes = { Config.class })
public class UserServiceImplTest extends AbstractTestNGSpringContextTests
{
private static Authentication AUTHENTICATION_PREVIOUS;
@Configuration
static class Config
{
@Bean
public UserServiceImpl molgenisUserServiceImpl()
{
return new UserServiceImpl(dataService());
}
@Bean
public DataService dataService()
{
return mock(DataService.class);
}
}
@Autowired
private UserServiceImpl molgenisUserServiceImpl;
@Autowired
private DataService dataService;
@Test(expectedExceptions = IllegalArgumentException.class)
public void MolgenisUserServiceImpl()
{
new UserServiceImpl(null);
}
@BeforeClass
public static void setUpBeforeClass()
{
AUTHENTICATION_PREVIOUS = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetails = when(mock(UserDetails.class).getUsername()).thenReturn("username").getMock();
Authentication authentication = when(mock(Authentication.class).getPrincipal()).thenReturn(userDetails)
.getMock();
SecurityContextHolder.getContext().setAuthentication(authentication);
}
@AfterClass
public static void tearDownAfterClass()
{
SecurityContextHolder.getContext().setAuthentication(AUTHENTICATION_PREVIOUS);
}
@Test
public void getUser()
{
String username = "username";
User existingUser = mock(User.class);
when(existingUser.getId()).thenReturn("1");
when(existingUser.getUsername()).thenReturn(username);
when(existingUser.getPassword()).thenReturn("encrypted-password");
when(dataService
.findOne(USER, new QueryImpl<User>().eq(UserMetaData.USERNAME, username),
User.class)).thenReturn(existingUser);
assertEquals(molgenisUserServiceImpl.getUser(username), existingUser);
}
}