Package org.openengsb.core.workflow.drools.persistence

Source Code of org.openengsb.core.workflow.drools.persistence.PersistenceRuleManagerCrudTest$TestElement

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.openengsb.core.workflow.drools.persistence;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.hasItem;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.openengsb.core.test.AbstractOpenEngSBTest;
import org.openengsb.core.workflow.api.RuleManager;
import org.openengsb.core.workflow.api.model.RuleBaseElementId;
import org.openengsb.core.workflow.api.model.RuleBaseElementType;
import org.openengsb.core.workflow.drools.util.RuleUtil;

@RunWith(Parameterized.class)
public class PersistenceRuleManagerCrudTest extends AbstractOpenEngSBTest {

    private RuleManager ruleManager;
    private String[] code = new String[4];
    private RuleBaseElementId[] id = new RuleBaseElementId[4];

    @Before
    public void setUp() throws Exception {
        ruleManager = RuleUtil.getRuleManager();
    }

    @Parameters
    public static List<Object[]> data() {
        List<Object[]> data = new ArrayList<Object[]>();

        List<TestElement> testData = new ArrayList<TestElement>();
        // functions:
        RuleBaseElementId funcId1 = new RuleBaseElementId(RuleBaseElementType.Function, "org.openengsb", "test42");
        RuleBaseElementId funcId2 = new RuleBaseElementId(RuleBaseElementType.Function, "at.ac.tuwien", "test");
        String func1 = "function void test42(){ System.out.println(\"sample-code\");}";
        String func2 = "function void test(){ System.out.println(\"bla42\");}";

        testData.add(new TestElement(funcId1, func1));
        testData.add(new TestElement(funcId1, func1));
        testData.add(new TestElement(funcId2, func2));
        testData.add(new TestElement(funcId2, func2));
        data.add(new Object[]{ testData });

        testData = new ArrayList<TestElement>();

        RuleBaseElementId ruleId1 = new RuleBaseElementId(RuleBaseElementType.Rule, "org.openengsb", "test42");
        RuleBaseElementId ruleId2 = new RuleBaseElementId(RuleBaseElementType.Rule, "at.ac.tuwien", "test");
        String rule1 = "when\nthen\nSystem.out.println(\"sample-code\");";
        String rule2 = "when\nthen\nSystem.out.println(\"\");";

        testData.add(new TestElement(ruleId1, rule1));
        testData.add(new TestElement(ruleId1, rule2));
        testData.add(new TestElement(ruleId2, rule1));
        testData.add(new TestElement(ruleId2, rule2));
        data.add(new Object[]{ testData });

        testData = new ArrayList<TestElement>();
        String sampleFlow = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                + "<process xmlns=\"http://drools.org/drools-5.0/process\""
                + "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\""
                + "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\""
                + "         type=\"RuleFlow\" name=\"flowname\" id=\"flowId\" "
                + "package-name=\"org.openengsb\" >" + "" + "  <header>" + "  </header>" + "  <nodes>"
                + "    <start id=\"1\" name=\"Start\" x=\"100\" y=\"100\" width=\"48\" height=\"48\" />"
                + "    <end id=\"2\" name=\"End\" x=\"245\" y=\"105\" width=\"48\" height=\"48\" />" + "  </nodes>"
                + "  <connections>" + "    <connection from=\"1\" to=\"2\" />" + "  </connections>" + "</process>";

        RuleBaseElementId flowId1 = new RuleBaseElementId(RuleBaseElementType.Process, "org.openengsb", "flowId");
        RuleBaseElementId flowId2 = new RuleBaseElementId(RuleBaseElementType.Process, "at.ac.tuwien", "flowId2");

        testData.add(new TestElement(flowId1, sampleFlow));
        testData.add(new TestElement(flowId1, sampleFlow));
        sampleFlow = sampleFlow.replace("org.openengsb", "at.ac.tuwien").replace("flowId", "flowId2");
        testData.add(new TestElement(flowId2, sampleFlow));
        testData.add(new TestElement(flowId2, sampleFlow));

        data.add(new Object[]{ testData });
        return data;
    }

    public PersistenceRuleManagerCrudTest(List<TestElement> testelements) {
        for (int i = 0; i < 3; i++) {
            TestElement el = testelements.get(i);
            code[i] = el.code;
            id[i] = el.id;
        }
    }

    @Test
    public void testAddRuleBaseElement_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        assertEquals(code[0], ruleManager.get(id[0]));
    }

    @Test
    public void testUpdateRuleBaseElement_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        ruleManager.update(id[1], code[1]);
        assertThat(ruleManager.get(id[0]), equalTo(code[1]));
    }

    @Test
    public void testListRuleBaseElementsByTypeAndPackage_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        ruleManager.add(id[2], code[2]);
        Collection<RuleBaseElementId> result = ruleManager.list(id[0].getType(), id[0].getPackageName());
        assertThat(result, hasItem(id[0]));
        assertThat(result, not(hasItem(id[2])));
    }

    @Test
    public void testListRuleBaseElementsByType_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        ruleManager.add(id[2], code[2]);
        Collection<RuleBaseElementId> result = ruleManager.listAll(id[0].getType());
        assertThat(result, hasItem(id[0]));
        assertThat(result, hasItem(id[2]));
    }

    @Test
    public void testDeleteRuleBaseElement_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        ruleManager.delete(id[0]);
    }

    @Test
    public void testAddOrUpdateOnNewRule_shouldWork() throws Exception {
        ruleManager.addOrUpdate(id[0], code[0]);
        assertThat(ruleManager.get(id[0]), is(code[0]));
    }

    @Test
    public void testAddOrUpdateOnExistingRule_shouldWork() throws Exception {
        ruleManager.add(id[0], code[0]);
        ruleManager.addOrUpdate(id[1], code[1]);
        assertThat(ruleManager.get(id[0]), is(code[1]));
    }

    public static final class TestElement {
        private final RuleBaseElementId id;
        private final String code;

        public TestElement(RuleBaseElementId id, String code) {
            this.id = id;
            this.code = code;
        }
    }
}
TOP

Related Classes of org.openengsb.core.workflow.drools.persistence.PersistenceRuleManagerCrudTest$TestElement

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.