package com.philemonworks.critter.dao.sql; import com.philemonworks.critter.action.Delay; import com.philemonworks.critter.condition.Equals; import com.philemonworks.critter.dao.sql.support.JdbcTemplate; import com.philemonworks.critter.db.DbCreator; import com.philemonworks.critter.rule.Rule; import com.philemonworks.critter.test.ReflectionTestUtils; import org.apache.commons.dbcp.BasicDataSource; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertThat; /** * Insert documentation here. * * @author jcraane */ public class RuleDaoSqlImplTest { private RuleDaoSqlImpl ruleDao = new RuleDaoSqlImpl(); private JdbcTemplate jdbcTemplate; @Before public void setUp() throws Exception { final BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("jdbc:h2:mem:test"); DbCreator.create(dataSource); jdbcTemplate = new JdbcTemplate(dataSource); ReflectionTestUtils.setField(ruleDao, "jdbcTemplate", jdbcTemplate); } @After public void tearDown() throws Exception { jdbcTemplate.execute("DROP TABLE rules", null); } @Test public void addAndGetRules() throws Exception { ruleDao.addOrReplaceRule(createRule("1")); ruleDao.addOrReplaceRule(createRule("2")); assertThat(ruleDao.getRules().size(), is(2)); } @Test public void updateExistingRule() throws Exception { final Rule rule_1 = createRule("1"); ruleDao.addOrReplaceRule(rule_1); final Rule rule_2 = createRule("2"); ruleDao.addOrReplaceRule(rule_2); assertThat(ruleDao.getRules().size(), is(2)); ruleDao.addOrReplaceRule(rule_2); assertThat(ruleDao.getRules().size(), is(2)); } @Test public void getRule() throws Exception { ruleDao.addOrReplaceRule(createRule("1")); final String id = "2"; ruleDao.addOrReplaceRule(createRule(id)); final Rule retrieved = ruleDao.getRule(id); assertThat(retrieved, is(notNullValue())); } @Test public void deleteRule() throws Exception { ruleDao.addOrReplaceRule(createRule("1")); final String id = "2"; ruleDao.addOrReplaceRule(createRule(id)); assertThat(ruleDao.getRules().size(), is(2)); ruleDao.deleteRule(id); assertThat(ruleDao.getRules().size(), is(1)); } private Rule createRule(String id) { final Rule rule = new Rule(); rule.id = id; rule.getActions().add(new Delay()); rule.getConditions().add(new Equals()); return rule; } }