package org.objectstyle.wolips.ruleeditor.model;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class TestRule {
protected Rule rule;
@Test
public void emptyRuleToMap() throws Exception {
rule = new Rule();
Map<String, Object> result = rule.toMap();
assertThat((String) result.get(AbstractRuleElement.CLASS_KEY), is(Rule.DEFAULT_ASSIGNMENT_CLASS_NAME));
assertThat((String) result.get(Rule.AUTHOR_KEY), is(Rule.DEFAULT_AUTHOR));
assertThat(result.get(Rule.LHS_KEY), nullValue());
assertThat(result.get(Rule.RHS_KEY), notNullValue());
}
@Test
public void existingRuleInitialization() throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("author", "100");
properties.put("class", "com.webobjects.directtoweb.Rule");
Map<String, Object> lhsProperties = new HashMap<String, Object>();
lhsProperties.put("class", "com.webobjects.eocontrol.EOKeyValueQualifier");
lhsProperties.put("key", "task");
lhsProperties.put("value", "edit");
lhsProperties.put("selectorName", "isEqualTo");
properties.put("lhs", lhsProperties);
Map<String, Object> rhsProperties = new HashMap<String, Object>();
rhsProperties.put("class", "com.webobjects.directtoweb.Assignment");
rhsProperties.put("keyPath", "key");
rhsProperties.put("value", "value");
properties.put("rhs", rhsProperties);
rule = new Rule(properties);
assertThat(rule.getAuthor(), is("100"));
assertThat(rule.getAssignmentClassName(), is("com.webobjects.directtoweb.Rule"));
LeftHandSide lhs = rule.getLeftHandSide();
assertThat(lhs, notNullValue());
RightHandSide rhs = rule.getRightHandSide();
assertThat(rhs, notNullValue());
}
@Test
public void firePropertyChangeEventOnChange() throws Exception {
rule = new Rule();
MockPropertyChangeListener listener = new MockPropertyChangeListener();
rule.addPropertyChangeListener(listener);
assertThat(listener.firedEventsCount(), is(0));
rule.setAuthor("200");
assertThat(listener.firedEventsCount(), is(1));
}
@Test
public void firePropertyChangeEventOnLhsChange() throws Exception {
rule = new Rule();
MockPropertyChangeListener listener = new MockPropertyChangeListener();
rule.addPropertyChangeListener(listener);
assertThat(listener.firedEventsCount(), is(0));
LeftHandSide lhs = rule.getLeftHandSide();
lhs.setConditions("(task = 'edit')");
// In this case we have 2 events fired because of the assigmentClassName
// change
assertThat(listener.firedEventsCount(), is(2));
}
@Test
public void firePropertyChangeEventOnRhsChange() throws Exception {
rule = new Rule();
MockPropertyChangeListener listener = new MockPropertyChangeListener();
rule.addPropertyChangeListener(listener);
assertThat(listener.firedEventsCount(), is(0));
RightHandSide rhs = rule.getRightHandSide();
rhs.setKeyPath("key");
assertThat(listener.firedEventsCount(), is(1));
}
@Test
public void newRuleInitialization() throws Exception {
rule = new Rule();
assertThat(rule.getLeftHandSide(), notNullValue());
assertThat(rule.getRightHandSide(), notNullValue());
assertThat(rule.getAuthor(), is(Rule.DEFAULT_AUTHOR));
assertThat(rule.getAssignmentClassName(), is(Rule.DEFAULT_ASSIGNMENT_CLASS_NAME));
}
@Test
public void newRuleWithoutLhs() throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("author", "100");
properties.put("class", "com.webobjects.directtoweb.Rule");
Map<String, Object> rhsProperties = new HashMap<String, Object>();
rhsProperties.put("class", "com.webobjects.directtoweb.Assignment");
rhsProperties.put("keyPath", "key");
rhsProperties.put("value", "value");
properties.put("rhs", rhsProperties);
rule = new Rule(properties);
LeftHandSide lhs = rule.getLeftHandSide();
assertThat(lhs, notNullValue());
}
}