/*
* Copyright (C) 2014 Jan Pokorsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.cas.lib.proarc.common.dao.empiredb;
import cz.cas.lib.proarc.common.dao.UserDao;
import cz.cas.lib.proarc.common.user.UserProfile;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
import org.dbunit.dataset.CompositeDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ReplacementDataSet;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author Jan Pokorsky
*/
public class EmpireUserDaoTest {
private DbUnitSupport support;
private ProarcDatabase schema;
private EmpireDaoFactory daos;
private SqlTransaction tx;
private UserDao dao;
public EmpireUserDaoTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
support = new DbUnitSupport();
schema = support.getEmireCfg().getSchema();
daos = new EmpireDaoFactory(support.getEmireCfg());
daos.init();
tx = daos.createTransaction();
dao = daos.createUser();
dao.setTransaction(tx);
}
@After
public void tearDown() {
if (tx != null) {
tx.close();
}
}
private IDataSet database(IDataSet... ds) throws Exception {
ReplacementDataSet rds = new ReplacementDataSet(new CompositeDataSet(ds));
// rds.addReplacementObject("{$user.home}", "relative/path/");
rds.addReplacementObject("{$now}", new Timestamp(System.currentTimeMillis()));
return rds;
}
@Test
public void testFindId() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "user.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
Integer userId = 1;
UserProfile result = dao.find(userId);
assertNotNull(result);
assertEquals(userId, result.getId());
}
@Test
public void testFindQuery() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "user.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
String username = "test";
List<UserProfile> result = dao.find(username, null, null, null);
assertNotNull(result);
assertEquals(1, result.size());
assertEquals(username, result.get(0).getUserName());
result = dao.find("UnknownUser", null, null, null);
assertEquals(Arrays.asList(), result);
}
@Test
public void testCreate() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "group.xml"),
support.loadFlatXmlDataStream(getClass(), "user.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
support.initSequences(tx, 10, schema.tableUser.id.getSequenceName());
UserProfile create = dao.create();
create.setDefaultGroup(1);
create.setEmail("email");
create.setForename("forename");
create.setUserHome("home");
create.setRemoteName("remoteName");
create.setRemoteType("remoteType");
create.setSurname("surname");
create.setUserGroup(1);
create.setUserName("create");
create.setUserPasswordDigest("digest");
dao.update(create);
assertNotNull(create.getCreated());
assertEquals((Integer) 1, create.getDefaultGroup());
assertEquals((Integer) 1, create.getUserGroup());
assertEquals("email", create.getEmail());
assertEquals("forename", create.getForename());
assertNotNull(create.getId());
assertEquals("remoteName", create.getRemoteName());
assertEquals("remoteType", create.getRemoteType());
assertEquals("surname", create.getSurname());
assertEquals("home", create.getUserHome());
assertEquals("create", create.getUserName());
assertEquals("digest", create.getUserPasswordDigest());
List<UserProfile> find = dao.find(create.getUserName(), null, create.getRemoteName(), create.getRemoteType());
assertEquals(1, find.size());
UserProfile result = find.get(0);
assertNotNull(result.getCreated());
assertEquals(create.getDefaultGroup(), result.getDefaultGroup());
assertEquals(create.getEmail(), result.getEmail());
assertEquals(create.getForename(), result.getForename());
assertEquals(create.getId(), result.getId());
assertEquals(create.getRemoteName(), result.getRemoteName());
assertEquals(create.getRemoteType(), result.getRemoteType());
assertEquals(create.getSurname(), result.getSurname());
assertEquals(create.getUserGroup(), result.getUserGroup());
assertEquals(create.getUserHome(), result.getUserHome());
assertEquals(create.getUserName(), result.getUserName());
assertEquals(create.getUserPasswordDigest(), result.getUserPasswordDigest());
}
@Test
public void testUpdate() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "group.xml"),
support.loadFlatXmlDataStream(getClass(), "user.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
UserProfile user = dao.find(1);
String userName = user.getUserName();
assertNotNull(userName);
user.setDefaultGroup(1);
user.setEmail("email2");
user.setForename("forename2");
user.setRemoteName("remotename2");
user.setRemoteType("remotetype2");
user.setSurname("surname2");
user.setUserGroup(1);
user.setUserHome("home2");
user.setUserPasswordDigest("digest2");
dao.update(user);
assertNotNull(user.getCreated());
assertEquals((Integer) 1, user.getDefaultGroup());
assertEquals("email2", user.getEmail());
assertEquals("forename2", user.getForename());
assertEquals((Integer) 1, user.getId());
assertEquals("remotename2", user.getRemoteName());
assertEquals("remotetype2", user.getRemoteType());
assertEquals("surname2", user.getSurname());
assertEquals((Integer) 1, user.getUserGroup());
assertEquals(userName, user.getUserName());
assertEquals("home2", user.getUserHome());
assertEquals("digest2", user.getUserPasswordDigest());
UserProfile result = dao.find(1);
assertNotNull(result.getCreated());
assertEquals((Integer) 1, result.getDefaultGroup());
assertEquals("email2", result.getEmail());
assertEquals("forename2", result.getForename());
assertEquals((Integer) 1, result.getId());
assertEquals("remotename2", result.getRemoteName());
assertEquals("remotetype2", result.getRemoteType());
assertEquals("surname2", result.getSurname());
assertEquals((Integer) 1, result.getUserGroup());
assertEquals(userName, result.getUserName());
assertEquals("home2", result.getUserHome());
assertEquals("digest2", result.getUserPasswordDigest());
user.setForename(null);
// null passwd digest does not change password
user.setUserPasswordDigest(null);
dao.update(user);
assertNull(user.getForename());
assertEquals("digest2", user.getUserPasswordDigest());
result = dao.find(1);
assertNull(result.getForename());
assertEquals("digest2", result.getUserPasswordDigest());
// "" passwd digest does change password
user.setUserPasswordDigest("");
dao.update(user);
assertNull(user.getUserPasswordDigest());
}
}