/* (c) 2016 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.params.extractor;
import org.geoserver.params.extractor.web.RuleModel;
import org.geoserver.params.extractor.web.RulesModel;
import org.junit.Test;
import java.util.List;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public final class RulesModelTest extends TestSupport {
@Test
public void testCrudRuleModel() throws Exception {
// create rules and echo parameters to be used (the rules have all the same)
Rule ruleA = new RuleBuilder().withId("0")
.withActivated(true)
.withPosition(3)
.withParameter("cql_filter")
.withTransform("CFCC='$2'").build();
Rule ruleB = new RuleBuilder().withId("0")
.withActivated(false)
.withPosition(2)
.withParameter("cql_filter")
.withTransform("CFCC='$2'").build();
EchoParameter echoParameterA = new EchoParameterBuilder().withId("0")
.withParameter("cql_filter")
.withActivated(false).build();
EchoParameter echoParameterB = new EchoParameterBuilder().withId("0")
.withParameter("cql_filter")
.withActivated(false).build();
// save rule A
RuleModel ruleModelA = new RuleModel(ruleA);
checkRule(ruleA, ruleModelA.toRule());
RulesModel.saveOrUpdate(ruleModelA);
List<RuleModel> rulesModels = RulesModel.getRulesModels();
assertThat(rulesModels.size(), is(1));
checkRule(ruleA, rulesModels.get(0).toRule());
List<Rule> rules = RulesDao.getRules();
assertThat(rules.size(), is(1));
checkRule(ruleA, rules.get(0));
// update rule A with rule B, an echo parameter should be produced
RuleModel ruleModelB = new RuleModel(ruleB);
ruleModelB.setEcho(true);
checkRule(ruleB, ruleModelB.toRule());
checkEchoParameter(echoParameterA, ruleModelB.toEchoParameter());
RulesModel.saveOrUpdate(ruleModelB);
rulesModels = RulesModel.getRulesModels();
assertThat(rulesModels.size(), is(1));
checkRule(ruleB, rulesModels.get(0).toRule());
checkEchoParameter(echoParameterA, rulesModels.get(0).toEchoParameter());
rules = RulesDao.getRules();
assertThat(rules.size(), is(1));
checkRule(ruleB, rules.get(0));
List<EchoParameter> echoParameters = EchoParametersDao.getEchoParameters();
assertThat(echoParameters.size(), is(1));
checkEchoParameter(echoParameterA, echoParameters.get(0));
// updating the rule to make the parameter no echoed, the echo parameter should be removed
ruleModelB.setEcho(false);
RulesModel.saveOrUpdate(ruleModelB);
rulesModels = RulesModel.getRulesModels();
assertThat(rulesModels.size(), is(1));
checkRule(ruleB, rulesModels.get(0).toRule());
assertThat(rulesModels.get(0).getEcho(), is(false));
rules = RulesDao.getRules();
assertThat(rules.size(), is(1));
checkRule(ruleB, rules.get(0));
echoParameters = EchoParametersDao.getEchoParameters();
assertThat(echoParameters.size(), is(0));
// creating echo parameter B, since the ids are the same the rule should contain an echo parameter
EchoParametersDao.saveOrUpdateEchoParameter(echoParameterB);
rulesModels = RulesModel.getRulesModels();
assertThat(rulesModels.size(), is(1));
checkRule(ruleB, rulesModels.get(0).toRule());
checkEchoParameter(echoParameterB, rulesModels.get(0).toEchoParameter());
rules = RulesDao.getRules();
assertThat(rules.size(), is(1));
echoParameters = EchoParametersDao.getEchoParameters();
assertThat(echoParameters.size(), is(1));
// deleting rule everything should be deleted in cascade
RulesModel.delete("0");
rulesModels = RulesModel.getRulesModels();
assertThat(rulesModels.size(), is(0));
rules = RulesDao.getRules();
assertThat(rules.size(), is(0));
echoParameters = EchoParametersDao.getEchoParameters();
assertThat(echoParameters.size(), is(0));
}
}