package eu.europeana.cloud.service.aas.authentication;
import com.google.common.collect.ImmutableSet;
import eu.europeana.cloud.cassandra.CassandraConnectionProvider;
import eu.europeana.cloud.common.model.User;
import eu.europeana.cloud.service.aas.authentication.repository.CassandraUserDAO;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Set;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/default-context.xml"})
public class CassandraUserDAOTest extends CassandraTestBase {
private static final String ROLE_USER = "ROLE_USER";
private static final String ROLE_ADMIN = "ROLE_ADMIN";
private static final Set<String> DEFAULT_USER_ROLES = ImmutableSet
.of(ROLE_USER);
@Autowired
private CassandraConnectionProvider provider;
@Autowired
private CassandraUserDAO dao;
/**
* Prepare the unit tests
*/
@Before
public void prepare() {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(
"default-context.xml");
provider = (CassandraConnectionProvider) context.getBean("provider");
dao = (CassandraUserDAO) context.getBean("dao");
initUsers();
}
private void initUsers() {
getSession().execute("INSERT INTO users (username, password, roles) VALUES('Robin_Van_Persie', 'Feyenoord', " +
"{'ROLE_USER'});\n");
getSession().execute("INSERT INTO users (username, password, roles) VALUES('Cristiano', 'Ronaldo', " +
"{'ROLE_USER'});\n");
getSession().execute("INSERT INTO users (username, password, roles) VALUES('admin', 'admin', {'ROLE_ADMIN'});" +
"\n");
}
@Test
public void testUserWithRoles() throws Exception {
SpringUser robinVanPersie = dao.getUser("Robin_Van_Persie");
assertTrue(!isAdmin(robinVanPersie));
SpringUser admin = dao.getUser("admin");
assertTrue(isAdmin(admin));
}
@Test
public void createUserTest() throws Exception {
//given
final String password = "PassFrank";
final String username = "Frank";
//when
dao.createUser(new User(username, password, DEFAULT_USER_ROLES));
//then
SpringUser user = dao.getUser(username);
assertThat(isUser(user),is(true));
assertUser(password, username, user);
}
private void assertUser(String password, String username, SpringUser user) {
assertThat(user.getUsername(),is(username));
assertThat(user.getPassword(),is(password));
}
private boolean isAdmin(final SpringUser u) {
return u.getAuthorities().contains(
new SimpleGrantedAuthority(ROLE_ADMIN));
}
private boolean isUser(final SpringUser u) {
return u.getAuthorities().contains(
new SimpleGrantedAuthority(ROLE_USER));
}
}