/*
* Copyright (C) 2015 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.workflow.model.Task;
import cz.cas.lib.proarc.common.workflow.model.TaskParameter;
import cz.cas.lib.proarc.common.workflow.model.TaskParameterFilter;
import cz.cas.lib.proarc.common.workflow.model.TaskParameterView;
import cz.cas.lib.proarc.common.workflow.model.ValueType;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.dbunit.dataset.CompositeDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ReplacementDataSet;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Jan Pokorsky
*/
public class EmpireWorkflowParameterDaoTest {
private DbUnitSupport support;
private ProarcDatabase schema;
private EmpireDaoFactory daos;
private SqlTransaction tx;
private EmpireWorkflowParameterDao dao;
private Timestamp dbTimestamp;
@Before
public void setUp() {
support = new DbUnitSupport();
schema = support.getEmireCfg().getSchema();
daos = new EmpireDaoFactory(support.getEmireCfg());
daos.init();
tx = daos.createTransaction();
dao = daos.createWorkflowParameterDao();
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/");
dbTimestamp = new Timestamp(System.currentTimeMillis());
rds.addReplacementObject("{$now}", dbTimestamp);
return rds;
}
@Test
public void testAdd() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "user.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_job.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_task.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
Task task = new Task().addId(BigDecimal.ONE);
List<TaskParameter> params = Arrays.asList(dao.create().addParamRef("param.p1").addValue(ValueType.STRING, "p1Val"),
dao.create().addParamRef("param.p2").addValue(ValueType.NUMBER, "1"),
dao.create().addParamRef("param.p3").addValue(ValueType.NUMBER, null),
dao.create().addParamRef("param.p4").addValue(ValueType.DATETIME, "2011-12-31T15:05:50+0100"),
dao.create().addParamRef("param.p5").addValue(ValueType.NUMBER, "1.01"),
dao.create().addParamRef("param.p6").addValue(ValueType.NUMBER, "0")
);
dao.add(task.getId(), params);
tx.commit();
assertEquals(task.getId(), params.get(0).getTaskId());
Map<String, String> map = dao.findAsMap(task.getId());
assertEquals(params.size(), map.size());
assertTrue(map.containsKey("param.p1"));
assertEquals("p1Val", map.get("param.p1"));
assertTrue(map.containsKey("param.p2"));
assertEquals("1", map.get("param.p2"));
assertTrue(map.containsKey("param.p3"));
assertEquals(null, map.get("param.p3"));
assertTrue(map.containsKey("param.p4"));
assertEquals("2011-12-31T14:05:50.000Z", map.get("param.p4"));
assertEquals("1.01", map.get("param.p5"));
assertEquals("0", map.get("param.p6"));
TaskParameterFilter filter = new TaskParameterFilter();
filter.setTaskId(task.getId());
filter.setLocale(Locale.ENGLISH);
filter.setProfileName("param.p6");
List<TaskParameterView> view = dao.view(filter);
assertEquals(1, view.size());
assertEquals("0", view.get(0).getValue());
assertEquals(0, BigDecimal.ZERO.compareTo(view.get(0).getValueNumber()));
List<TaskParameter> result = dao.find(task.getId());
assertEquals(task.getId(), result.get(0).getTaskId());
}
@Test
public void testRemove() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "user.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_job.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_task.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_param.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
Task task = new Task().addId(BigDecimal.ONE);
List<TaskParameter> params = dao.find(task.getId());
assertEquals(2, params.size());
dao.remove(task.getId());
tx.commit();
params = dao.find(task.getId());
assertEquals(0, params.size());
}
@Test
public void testView() throws Exception {
IDataSet db = database(
support.loadFlatXmlDataStream(getClass(), "user.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_job.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_task.xml"),
support.loadFlatXmlDataStream(getClass(), "wf_param.xml")
);
support.cleanInsert(support.getConnection(tx), db);
tx.commit();
Task task = new Task().addId(BigDecimal.ONE);
TaskParameterFilter filter = new TaskParameterFilter();
filter.setTaskId(task.getId());
List<TaskParameterView> params = dao.view(filter);
assertEquals(2, params.size());
filter = new TaskParameterFilter();
filter.setTaskId(BigDecimal.TEN);
params = dao.view(filter);
assertEquals(1, params.size());
filter = new TaskParameterFilter();
filter.setTaskId(BigDecimal.ZERO);
params = dao.view(filter);
assertEquals(0, params.size());
filter = new TaskParameterFilter();
filter.setJobId(BigDecimal.ONE);
params = dao.view(filter);
assertEquals(2, params.size());
filter = new TaskParameterFilter();
filter.setProfileName("param.t10.p1");
params = dao.view(filter);
assertEquals(1, params.size());
assertEquals(BigDecimal.TEN, params.get(0).getTaskId());
assertEquals("task.id2", params.get(0).getTaskProfileName());
assertEquals(new BigDecimal(2), params.get(0).getJobId());
assertEquals(ValueType.NUMBER, params.get(0).getValueType());
assertEquals("10.1", params.get(0).getValue());
}
}