/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*******************************************************************************/
package org.ebayopensource.turmeric.policyservice.model;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.lang.reflect.Proxy;
import org.ebayopensource.turmeric.utils.jpa.JPAAroundAdvice;
import org.junit.Before;
import org.junit.Test;
/**
* The Class RuleDaoTest.
*
* @author gbaal
*/
public class RuleDaoTest extends AbstractJPATest {
/** The rule dao. */
RuleDAO ruleDAO;
/**
* Inits the dao.
*/
@Before
public void initDAO() {
ClassLoader classLoader = RuleDAO.class.getClassLoader();
Class[] interfaces = { RuleDAO.class };
RuleDAO target = new RuleDAOImpl();
ruleDAO = (RuleDAO) Proxy.newProxyInstance(classLoader, interfaces,
new JPAAroundAdvice(factory, target));
}
private PrimitiveValue createPrimitiveValue() {
PrimitiveValue value = new PrimitiveValue();
value.setType(SupportedPrimitive.STRING);
value.setValue("PaymentService:commit.count>5");
return value;
}
private Rule createRule() {
Rule rule = new Rule();
rule.setCondition(createCondition());
rule.setEffect(EffectType.BLOCK);
rule.setEffectDuration(3600L);
rule.setPriority(2);
rule.setRolloverPeriod(1L);
rule.setRuleName("RLRule");
return rule;
}
private Condition createCondition() {
Condition condition = new Condition();
Expression expression = createExpression();
condition.setExpression(expression);
return condition;
}
private Expression createExpression() {
PrimitiveValue value = createPrimitiveValue();
Expression expression = new Expression(value, "Service count", "HITS");
expression.setPrimitiveValue(value);
return expression;
}
/**
* Find condition by id test.
*/
@Test
public void findConditionByIdTest() {
Condition condition = createCondition();
ruleDAO.persistCondition(condition);
assertNotNull(condition.getId());
assertNotNull(ruleDAO.findConditionById(condition.getId()));
}
/**
* Find condition by rule id test.
*/
@Test
public void findConditionByRuleIdTest() {
Rule rule = createRule();
ruleDAO.persistRule(rule);
assertNotNull(rule.getId());
assertNotNull(ruleDAO.findConditionByRuleId(rule.getId()));
}
/**
* Find expression by condition id test.
*/
@Test
public void findExpressionByConditionIdTest() {
Condition condition = createCondition();
ruleDAO.persistCondition(condition);
assertNotNull(condition.getId());
assertNotNull(ruleDAO.findExpressionByConditionId(condition.getId()));
}
/**
* Find expression by id test.
*/
@Test
public void findExpressionByIdTest() {
Expression expression = createExpression();
ruleDAO.persistExpression(expression);
assertNotNull(expression.getId());
assertNotNull(ruleDAO.findExpressionById(expression.getId()));
}
/**
* Find expression by name test.
*/
@Test
public void findExpressionByNameTest() {
Expression expression = createExpression();
ruleDAO.persistExpression(expression);
assertNotNull(expression.getId());
assertNotNull(ruleDAO.findExpressionByName(expression.getName()));
}
/**
* Find primitive value by expression id test.
*/
@Test
public void findPrimitiveValueByExpressionIdTest() {
Expression expression = createExpression();
ruleDAO.persistExpression(expression);
assertNotNull(expression.getId());
assertNotNull(ruleDAO.findPrimitiveValueByExpressionId(expression
.getId()));
}
/**
* Find primitive value by id test.
*/
@Test
public void findPrimitiveValueByIdTest() {
PrimitiveValue primitiveValue = createPrimitiveValue();
ruleDAO.persistPrimitiveValue(primitiveValue);
assertNotNull(primitiveValue.getId());
assertNotNull(ruleDAO.findPrimitiveValueById(primitiveValue.getId()));
}
/**
* Find rule by id test.
*/
@Test
public void findRuleByIdTest() {
Rule rule = createRule();
ruleDAO.persistRule(rule);
assertNotNull(rule.getId());
assertNotNull(ruleDAO.findRuleById(rule.getId()));
}
/**
* Find rule by name test.
*/
@Test
public void findRuleByNameTest() {
Rule rule = createRule();
ruleDAO.persistRule(rule);
assertNotNull(rule.getId());
assertNotNull(ruleDAO.findRuleByName(rule.getRuleName()));
}
/**
* Persist condition test.
*/
@Test
public void persistConditionTest() {
Condition condition = createCondition();
ruleDAO.persistCondition(condition);
assertNotNull(condition.getId());
}
/**
* Persist expression test.
*/
@Test
public void persistExpressionTest() {
Expression expression = createExpression();
ruleDAO.persistExpression(expression);
assertNotNull(expression.getId());
}
/**
* Persist primitive value test.
*/
@Test
public void persistPrimitiveValueTest() {
PrimitiveValue primitiveValue = createPrimitiveValue();
ruleDAO.persistPrimitiveValue(primitiveValue);
assertNotNull(primitiveValue.getId());
}
/**
* Persist rule test.
*/
@Test
public void persistRuleTest() {
Rule rule = createRule();
ruleDAO.persistRule(rule);
assertNotNull(rule.getId());
}
/**
* Removes the primitive value.
*/
@Test
public void removePrimitiveValue() {
PrimitiveValue primitiveValue = createPrimitiveValue();
ruleDAO.persistPrimitiveValue(primitiveValue);
Long id = primitiveValue.getId();
assertNotNull(id);
ruleDAO.removePrimitiveValue(id);
assertNull(ruleDAO.findPrimitiveValueById(id));
}
/**
* Removes the rule.
*/
@Test
public void removeRule() {
Rule rule = createRule();
ruleDAO.persistRule(rule);
Long id = rule.getId();
String name = rule.getRuleName();
assertNotNull(id);
ruleDAO.removeRule(id);
assertNull(ruleDAO.findRuleById(id));
assertNull(ruleDAO.findRuleByName(name));
}
/**
* Checks if is rule name used test.
*/
@Test
public void isRuleNameUsedTest() {
Rule rule = createRule();
assertFalse(ruleDAO.isRuleNameUsed(rule.getRuleName()));
ruleDAO.persistRule(rule);
assertTrue(ruleDAO.isRuleNameUsed(rule.getRuleName()));
}
/**
* Checks if is rule valid test.
*/
@Test
public void isRuleValidTest() {
Rule rule = createRule();
assertTrue(ruleDAO.isRuleValid(rule,false));
rule.getCondition().getExpression().setPrimitiveValue(null);
assertFalse(ruleDAO.isRuleValid(rule,false));
assertFalse(ruleDAO.isRuleValid(null, true));
}
}