package svanimpe.reminders.domain;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import svanimpe.reminders.ArchiveFactory;
import static org.junit.Assert.*;
@RunWith(Arquillian.class)
public class UserPersistenceTest
{
@Deployment
public static WebArchive createArchive()
{
return ArchiveFactory.createArchive();
}
@PersistenceContext
private EntityManager em;
@Test
public void testUserTablesExist()
{
Query query = em.createNativeQuery("SHOW TABLES");
List results = query.getResultList();
assertTrue(results.contains("TBL_USER"));
assertTrue(results.contains("USER_PASSWORD"));
assertTrue(results.contains("USER_ROLES"));
}
@Test
public void testUserPasswordColumnsExist()
{
Query query = em.createNativeQuery("SHOW COLUMNS FROM USER_PASSWORD");
List results = query.getResultList();
List columns = new ArrayList();
for (Object result : results) {
Object[] column = (Object[])result;
columns.add(column[0]);
}
assertTrue(columns.contains("USERNAME"));
assertTrue(columns.contains("PASSWORD"));
}
@Test
public void testUserRolesColumnsExist()
{
Query query = em.createNativeQuery("SHOW COLUMNS FROM USER_ROLES");
List results = query.getResultList();
List columns = new ArrayList();
for (Object result : results) {
Object[] column = (Object[])result;
columns.add(column[0]);
}
assertTrue(columns.contains("USERNAME"));
assertTrue(columns.contains("ROLES"));
}
@Test
public void testPlainPasswordNotSaved() throws Exception
{
User savedUser = em.find(User.class, "someuser");
Field plainPassword = User.class.getDeclaredField("plainPassword");
plainPassword.setAccessible(true);
assertNull(plainPassword.get(savedUser));
}
@Test
public void testRolesStoredAsStrings()
{
Query query = em.createNativeQuery("SELECT ROLES FROM USER_ROLES WHERE USERNAME = 'someuser'");
List results = query.getResultList();
assertTrue(results.size() == 1 && results.contains(Role.ADMINISTRATOR.name()));
}
@Test
public void testQueryFindAll()
{
TypedQuery<User> query = em.createNamedQuery("User.findAll", User.class);
assertEquals(2, query.getResultList().size());
}
}