Package org.drools.guvnor.server.builder

Source Code of org.drools.guvnor.server.builder.PackageDRLAssemblerIntegrationTest

/*
* Copyright 2011 JBoss Inc
*
*   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
*
*   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.drools.guvnor.server.builder;

import org.drools.guvnor.client.common.AssetFormats;
import org.drools.guvnor.server.test.GuvnorIntegrationTest;
import org.drools.guvnor.server.util.DroolsHeader;
import org.drools.repository.AssetItem;
import org.drools.repository.ModuleItem;
import org.junit.Test;

import java.io.InputStream;

import static org.junit.Assert.*;

public class PackageDRLAssemblerIntegrationTest extends GuvnorIntegrationTest {

    @Test
    public void testSimplePackageWithDeclaredTypes() throws Exception {

        ModuleItem pkg = rulesRepository.createModule("testSimplePackageWithDeclaredTypes2",
                "");

        DroolsHeader.updateDroolsHeader("import java.util.HashMap",
                pkg);

        AssetItem rule1 = pkg.addAsset("rule_1",
                "");
        rule1.updateFormat(AssetFormats.DRL);
        rule1.updateContent("rule 'rule1' \n dialect 'mvel' \n when Album() \n then \nAlbum a = new Album(); \n end");
        rule1.checkin("");

        AssetItem model = pkg.addAsset("model",
                "qed");
        model.updateFormat(AssetFormats.DRL_MODEL);

        model.updateContent("declare Album\n genre: String \n end");
        model.checkin("");

        rulesRepository.save();

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        String drl = asm.getCompiledSource();

        assertTrue(drl.indexOf("declare Album") > -1);
    }

    @Test
    public void testSimplePackageWithDeclaredTypesUsingDependency() throws Exception {

        ModuleItem pkg = rulesRepository.createModule("testSimplePackageWithDeclaredTypesUsingDependency",
                "");

        DroolsHeader.updateDroolsHeader("import java.util.HashMap",
                pkg);

        AssetItem rule1 = pkg.addAsset("rule_1",
                "");
        rule1.updateFormat(AssetFormats.DRL);
        rule1.updateContent("rule 'rule1' \n dialect 'mvel' \n when Album() \n then \nAlbum a = new Album(); \n end");
        rule1.checkin("");

        AssetItem model = pkg.addAsset("model",
                "qed");
        model.updateFormat(AssetFormats.DRL_MODEL);

        model.updateContent("declare Album\n genre1: String \n end");
        model.checkin("version 0");
        model.updateContent("declare Album\n genre2: String \n end");
        model.checkin("version 1");
        model.updateContent("declare Album\n genre3: String \n end");
        model.checkin("version 2");
        rulesRepository.save();

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        assertFalse(asm.getErrors().toString(),
                asm.hasErrors());

        asm = new PackageAssembler();
        asm.init(pkg, null);
        String drl = asm.getCompiledSource();

        assertTrue(drl.indexOf("genre2") == -1);
        assertTrue(drl.indexOf("genre3") > -1);

        pkg.updateDependency("model?version=2");
        pkg.checkin("Update dependency");

        PackageAssembler asm2 = new PackageAssembler();
        asm2.init(pkg, null);
        assertFalse(asm2.getErrors().toString(),
                asm2.hasErrors());

        asm2 = new PackageAssembler();
        asm2.init(pkg, null);
        String drl2 = asm2.getCompiledSource();

        assertTrue(drl2.indexOf("genre2") > -1);
        assertTrue(drl2.indexOf("genre3") == -1);

    }

    @Test
    public void testGetHistoryPackageSource() throws Exception {
        //Package version 1(Initial version)
        ModuleItem pkg = rulesRepository.createModule("testGetHistoryPackageSource",
                "");

        //Package version 2
        DroolsHeader.updateDroolsHeader("import com.billasurf.Board\n global com.billasurf.Person customer1",
                pkg);

        AssetItem func = pkg.addAsset("func",
                "");
        func.updateFormat(AssetFormats.FUNCTION);
        func.updateContent("function void foo() { System.out.println(version 1); }");
        func.checkin("version 1");

        AssetItem dsl = pkg.addAsset("myDSL",
                "");
        dsl.updateFormat(AssetFormats.DSL);
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz1()");
        dsl.checkin("version 1");

        AssetItem rule = pkg.addAsset("rule1",
                "");
        rule.updateFormat(AssetFormats.DRL);
        rule.updateContent("rule 'foo' when Goo1() then end");
        rule.checkin("version 1");

        AssetItem rule2 = pkg.addAsset("rule2",
                "");
        rule2.updateFormat(AssetFormats.DSL_TEMPLATE_RULE);
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 1");

        AssetItem rule3 = pkg.addAsset("model1",
                "");
        rule3.updateFormat(AssetFormats.DRL_MODEL);
        rule3.updateContent("declare Album1\n genre1: String \n end");
        rule3.checkin("version 1");

        pkg.checkin("version2");

        //Package version 3
        DroolsHeader.updateDroolsHeader("import com.billasurf.Board\n global com.billasurf.Person customer2",
                pkg);
        func.updateContent("function void foo() { System.out.println(version 2); }");
        func.checkin("version 2");
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz2()");
        dsl.checkin("version 2");
        rule.updateContent("rule 'foo' when Goo2() then end");
        rule.checkin("version 2");
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 2");
        rule3.updateContent("declare Album2\n genre2: String \n end");
        rule3.checkin("version 2");
        //impl.buildPackage(pkg.getUUID(), true);
        pkg.checkin("version3");

        //Verify the latest version
        ModuleItem item = rulesRepository.loadModule("testGetHistoryPackageSource");
        PackageAssembler asm = new PackageAssembler();
        asm.init(item, null);
        String drl = asm.getCompiledSource();

        System.out.println(drl);

        assertEquals("version3",
                item.getCheckinComment());
        assertTrue(drl.indexOf("global com.billasurf.Person customer2") >= 0);
        assertTrue(drl.indexOf("System.out.println(version 2)") >= 0);
        assertTrue(drl.indexOf("FooBarBaz2()") >= 0);
        assertTrue(drl.indexOf("rule 'foo' when Goo2() then end") >= 0);
        assertTrue(drl.indexOf("foo") >= 0);
        assertTrue(drl.indexOf("declare Album2") >= 0);
        //assertEquals(12, item.getCompiledPackageBytes().length);

        //Verify version 2
        ModuleItem item2 = rulesRepository.loadModule("testGetHistoryPackageSource",
                2);
        PackageAssembler asm2 = new PackageAssembler();
        asm2.init(item2, null);
        String drl2 = asm2.getCompiledSource();

        System.out.println(drl2);

        assertEquals("version2",
                item2.getCheckinComment());
        assertTrue(drl2.indexOf("global com.billasurf.Person customer1") >= 0);
        assertTrue(drl2.indexOf("System.out.println(version 1)") >= 0);
        assertTrue(drl2.indexOf("FooBarBaz1()") >= 0);
        assertTrue(drl2.indexOf("rule 'foo' when Goo1() then end") >= 0);
        assertTrue(drl2.indexOf("foo") >= 0);
        assertTrue(drl2.indexOf("declare Album1") >= 0);
    }

    @Test
    public void testShowSource() throws Exception {

        //first, setup the package correctly:
        ModuleItem pkg = rulesRepository.createModule("testShowSource",
                "");

        DroolsHeader.updateDroolsHeader("import com.billasurf.Board\n global com.billasurf.Person customer",
                pkg);
        rulesRepository.save();

        AssetItem func = pkg.addAsset("func",
                "");
        func.updateFormat(AssetFormats.FUNCTION);
        func.updateContent("function void foo() { System.out.println(42); }");
        func.checkin("");

        AssetItem dsl = pkg.addAsset("myDSL",
                "");
        dsl.updateFormat(AssetFormats.DSL);
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz()");
        dsl.checkin("");

        AssetItem rule = pkg.addAsset("rule1",
                "");
        rule.updateFormat(AssetFormats.DRL);
        rule.updateContent("rule 'foo' when Goo() then end");
        rule.checkin("");

        AssetItem rule2 = pkg.addAsset("rule2",
                "");
        rule2.updateFormat(AssetFormats.DSL_TEMPLATE_RULE);
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("");

        AssetItem rule3 = pkg.addAsset("model1",
                "");
        rule3.updateFormat(AssetFormats.DRL_MODEL);
        rule3.updateContent("garbage");
        rule3.updateDisabled(true);
        rule3.checkin("");

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        String drl = asm.getCompiledSource();

        assertNotNull(drl);

        assertContains("import com.billasurf.Board",
                       drl);
        assertContains("global com.billasurf.Person customer",
                       drl);
        assertContains("package testShowSource",
                drl);
        assertContains("function void foo() { System.out.println(42); }",
                drl);
        assertContains("foo();",
                drl);
        assertContains("FooBarBaz()",
                drl);
        assertContains("rule 'foo' when Goo() then end",
                drl);

        assertEquals(-1,
                drl.indexOf("garbage"));

    }


    @Test
    public void testShowSourceUsingSpecifiedDependencies() throws Exception {
        //first, setup the package correctly:
        ModuleItem pkg = rulesRepository.createModule("testShowSourceUsingSpecifiedDependencies",
                "");

        DroolsHeader.updateDroolsHeader("import com.billasurf.Board\n global com.billasurf.Person customer",
                pkg);
        rulesRepository.save();

        AssetItem func = pkg.addAsset("func",
                "");
        func.updateFormat(AssetFormats.FUNCTION);
        func.updateContent("function void foo() { System.out.println(version 1); }");
        func.checkin("version 1");
        func.updateContent("function void foo() { System.out.println(version 2); }");
        func.checkin("version 2");

        AssetItem dsl = pkg.addAsset("myDSL",
                "");
        dsl.updateFormat(AssetFormats.DSL);
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz1()");
        dsl.checkin("version 1");
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz2()");
        dsl.checkin("version 2");

        AssetItem rule = pkg.addAsset("rule1",
                "");
        rule.updateFormat(AssetFormats.DRL);
        rule.updateContent("rule 'foo' when Goo() then end");
        rule.checkin("version 1");
        rule.updateContent("rule 'foo' when Eoo() then end");
        rule.checkin("version 2");

        AssetItem rule2 = pkg.addAsset("rule2",
                "");
        rule2.updateFormat(AssetFormats.DSL_TEMPLATE_RULE);
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 1");
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 2");

        AssetItem rule3 = pkg.addAsset("model1",
                "");
        rule3.updateFormat(AssetFormats.DRL_MODEL);
        rule3.updateContent("garbage");
        rule3.updateDisabled(true);
        rule3.checkin("version 1");
        rule3.updateContent("declare Album\n genre1: String \n end");
        rule3.checkin("version 2");

        rulesRepository.save();

        //NOTE: dont use version=0. Version 0 is the root node.
        pkg.updateDependency("func?version=1");
        pkg.updateDependency("myDSL?version=1");
        pkg.updateDependency("rule1?version=1");
        pkg.updateDependency("rule2?version=1");
        pkg.updateDependency("model1?version=1");
        pkg.checkin("Update dependency");

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        String drl = asm.getCompiledSource();

        assertNotNull(drl);

        assertContains("import com.billasurf.Board",
                       drl);
        assertContains("global com.billasurf.Person customer",
                       drl);
        assertContains("package testShowSource",
                drl);
        assertContains("function void foo() { System.out.println(version 1); }",
                drl);
        assertContains("foo();",
                drl);
        assertContains("FooBarBaz1()",
                drl);
        assertContains("rule 'foo' when Goo() then end",
                drl);

        assertEquals(-1,
                drl.indexOf("garbage"));
        assertEquals(-1,
                drl.indexOf("Album"));
    }

    @Test
    public void testShowSourceForHistoricalPackage() throws Exception {
        ModuleItem pkg = rulesRepository.createModule("testShowSourceForHistoricalPackage",
                "");

        DroolsHeader.updateDroolsHeader("import com.billasurf.Board\n global com.billasurf.Person customer",
                pkg);
        rulesRepository.save();

        AssetItem func = pkg.addAsset("func",
                "");
        func.updateFormat(AssetFormats.FUNCTION);
        func.updateContent("function void foo() { System.out.println(version 1); }");
        func.checkin("version 1");
        func.updateContent("function void foo() { System.out.println(version 2); }");
        func.checkin("version 2");

        AssetItem dsl = pkg.addAsset("myDSL",
                "");
        dsl.updateFormat(AssetFormats.DSL);
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz1()");
        dsl.checkin("version 1");
        dsl.updateContent("[then]call a func=foo();\n[when]foo=FooBarBaz2()");
        dsl.checkin("version 2");

        AssetItem rule = pkg.addAsset("rule1",
                "");
        rule.updateFormat(AssetFormats.DRL);
        rule.updateContent("rule 'foo' when Goo() then end");
        rule.checkin("version 1");
        rule.updateContent("rule 'foo' when Eoo() then end");
        rule.checkin("version 2");

        AssetItem rule2 = pkg.addAsset("rule2",
                "");
        rule2.updateFormat(AssetFormats.DSL_TEMPLATE_RULE);
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 1");
        rule2.updateContent("when \n foo \n then \n call a func");
        rule2.checkin("version 2");

        AssetItem rule3 = pkg.addAsset("model1",
                "");
        rule3.updateFormat(AssetFormats.DRL_MODEL);
        rule3.updateContent("garbage");
        rule3.updateDisabled(true);
        rule3.checkin("version 1");
        rule3.updateContent("declare Album\n genre1: String \n end");
        rule3.checkin("version 2");

        rulesRepository.save();
        pkg.checkin("Version 2");
        pkg.checkout();
        pkg.checkin("Version 3");

        ModuleItem historicalPackage = rulesRepository.loadModule("testShowSourceForHistoricalPackage",
                2);

        PackageAssembler asm = new PackageAssembler();
        asm.init(historicalPackage, null);
        String drl = asm.getCompiledSource();

        assertNotNull(drl);
        System.out.println(drl);

        assertContains("import com.billasurf.Board",
                       drl);
        assertContains("global com.billasurf.Person customer",
                       drl);
        assertContains("package testShowSource",
                drl);
        assertContains("function void foo() { System.out.println(version 2); }",
                drl);
        assertContains("FooBarBaz2()",
                drl);
        assertContains("rule 'foo' when Eoo() then end",
                drl);

        assertEquals(-1,
                drl.indexOf("garbage"));
        assertEquals(-1,
                drl.indexOf("Album"));
    }

    @Test
    public void testBuildPackageWithEmptyHeader() throws Exception {
        //first, setup the package correctly:
        ModuleItem pkg = rulesRepository.createModule("testBuildPackageWithEmptyHeader",
                "");

        DroolsHeader.updateDroolsHeader("\n",
                pkg);
        rulesRepository.save();

        PackageAssembler asm = null;
        try {
            asm = new PackageAssembler();
            asm.init(pkg, null);
        } catch (NullPointerException e) {
            // Possible cause: Header has only white spaces "\n\t".
            fail(e.toString());
        }
        String drl = asm.getCompiledSource();

        assertNotNull(drl);
        assertEquals("package testBuildPackageWithEmptyHeader",
                drl.trim());

    }

    @Test
    public void testSkipDisabledAssets() throws Exception {

        //first, setup the package correctly:
        ModuleItem pkg = rulesRepository.createModule("testSkipDisabledAssets",
                "");
        rulesRepository.save();

        AssetItem assertRule1 = pkg.addAsset("rule1",
                "");
        assertRule1.updateFormat(AssetFormats.DRL);
        assertRule1.updateContent("rule 'foo1' when then end");
        assertRule1.checkin("");
        assertRule1.updateDisabled(false);

        AssetItem assertRule2 = pkg.addAsset("rule2",
                "");
        assertRule2.updateFormat(AssetFormats.DRL);
        assertRule2.updateContent("rule 'foo2' when then end");
        assertRule2.checkin("");
        assertRule2.updateDisabled(true);

        AssetItem assertRule3 = pkg.addAsset("rule3",
                "");
        assertRule3.updateFormat(AssetFormats.DRL);
        assertRule3.updateContent("rule 'foo3' when then end");
        assertRule3.checkin("");

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        assertFalse(asm.hasErrors());

        String drl = asm.getCompiledSource();

        assertNotNull(drl);

        assertContains("rule 'foo1' when then end",
                drl);
        assertDoesNotContain("rule 'foo2' when then end",
                drl);
        assertContains("rule 'foo3' when then end",
                drl);

    }

    @Test
    public void testSkipDisabledImports() throws Exception {

        //first, setup the package correctly:
        ModuleItem pkg = rulesRepository.createModule("testXLSDecisionTableIgnoreImports",
                "");

        rulesRepository.save();

        InputStream xls = this.getClass().getResourceAsStream("Sample.xls");
        assertNotNull(xls);

        AssetItem asset = pkg.addAsset("MyDT",
                "");
        asset.updateFormat(AssetFormats.DECISION_SPREADSHEET_XLS);
        asset.updateBinaryContentAttachment(xls);
        asset.checkin("");

        PackageAssembler asm = new PackageAssembler();
        asm.init(pkg, null);
        String drl = asm.getCompiledSource();
        System.err.println(drl);

        assertTrue(drl.indexOf("package ",
                2) == -1); //skip a few, make sure we only have one instance of "package "
    }

    private void assertContains(String sub,
                                String text) {
        if (text.indexOf(sub) == -1) {
            fail("the text: '" + sub + "' was not found.");
        }
    }

    private void assertDoesNotContain(String sub,
                                      String text) {
        if (text.indexOf(sub) > -1) {
            fail("the text: '" + sub + "' was found.");
        }

    }
}
TOP

Related Classes of org.drools.guvnor.server.builder.PackageDRLAssemblerIntegrationTest

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.