@Test public void testWrongTypeRefForDRGElement() { // DROOLS-2917 DMN resolveTypeRef returning null in BKM causes NPE during KieContainer compilation final List<DMNMessage> messages = DMNRuntimeUtil.createExpectingDMNMessages("WrongTypeRefForDRGElement.dmn", this.getClass()); DMNRuntimeUtil.formatMessages(messages); assertThat(messages.isEmpty(), is(false)); assertThat(messages.stream().anyMatch(m -> m.getMessageType().equals(DMNMessageType.TYPE_DEF_NOT_FOUND)), is(true)); assertThat(messages.stream().anyMatch(m -> m.getSourceId().equals("_561d31ba-a34b-4cf3-b9a4-537e21ce1013")), is(true)); assertThat(messages.stream().anyMatch(m -> m.getSourceId().equals("_45fa8674-f4f0-4c06-b2fd-52bbd17d8550")), is(true)); }
public static DMNModel getAndAssertModelNoErrors(final DMNRuntime runtime, final String namespace, final String modelName) { DMNModel dmnModel = runtime.getModel(namespace, modelName); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); return dmnModel; } }
@Test public void testModelById() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("simple-item-def.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModelById("https://github.com/kiegroup/kie-dmn/itemdef", "_simple-item-def" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); }
public static void testDecisionServiceCompiler20180830_testEvaluateAll(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("ABC"), is("abc")); assertThat(result.get("Invoking Decision"), is("abc")); }
@Test public void test_non_Priority_table_missing_output_values() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("DTABLE_NON_PRIORITY_MISSING_OUTVALS.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "DTABLE_NON_PRIORITY_MISSING_OUTVALS" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); }
@Test public void testPriority_table_one_output_value() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("DTABLE_PRIORITY_ONE_OUTVAL.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "DTABLE_PRIORITY_ONE_OUTVAL" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); }
@Test public void testLoanComparison() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("loanComparison.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_3a1fd8f4-ea04-4453-aa30-ff14140e3441", "loanComparison" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = DMNFactory.newContext(); context.set( "RequestedAmt", 500000 ); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.hasErrors(), is( false ) ); }
private void testTransitiveImportDS_testEvaluateAll(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); context.set("L2 Person name", "L2 Bob"); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("L2 Invoking the L1 import"), is("Hello, L2 Bob the result of invoking the imported DS is: Hello, L2 Bob; you are allowed")); assertThat(result.get("Final L2 Decision"), is("The result of invoking the L1 DS was: Hello, L2 Bob the result of invoking the imported DS is: Hello, L2 Bob; you are allowed")); }
private void checkDSwithInputData(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); context.set("D", "d"); context.set("E", "e"); final DMNResult dmnResult = runtime.evaluateDecisionService(dmnModel, context, "A only as output knowing D and E"); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("A"), is("de")); }
private void testImportDS_testEvaluateAll(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); context.set("L1 person name", "L1 Import John"); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("invoke imported DS"), is("Hello, L1 Import John; you are allowed")); assertThat(result.get("Prefixing"), is("Hello, L1 Import John")); assertThat(result.get("final Import L1 decision"), is("Hello, L1 Import John the result of invoking the imported DS is: Hello, L1 Import John; you are allowed")); }
@Test public void testNullRelation() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("nullrelation.dmn", getClass()); final DMNModel model = runtime.getModel("http://www.trisotech.com/definitions/_946a2145-89ae-4197-88b4-40e6f88c8101", "Null in relations"); assertThat(model, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(model.getMessages()), model.hasErrors(), is(false)); final DMNContext context = DMNFactory.newContext(); context.set("Value", "a3"); final DMNResult result = runtime.evaluateByName(model, context, "Mapping"); assertThat(DMNRuntimeUtil.formatMessages(result.getMessages()), result.hasErrors(), is(false)); }
private void testImportDS_testEvaluateDS(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); context.set("L1 person name", "L1 Import Evaluate DS NAME"); final DMNResult dmnResult = runtime.evaluateDecisionService(dmnModel, context, "Import L1 DS"); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.getAll(), not(hasEntry(is("invoke imported DS"), anything()))); // Decision Service will encapsulate this decision assertThat(result.getAll(), not(hasEntry(is("Prefixing"), anything()))); // Decision Service will encapsulate this decision assertThat(result.get("final Import L1 decision"), is("Hello, L1 Import Evaluate DS NAME the result of invoking the imported DS is: Hello, L1 Import Evaluate DS NAME; you are allowed")); }
private static void checkEmptyinputValuesoutputValuesdefaultOutputEntry(final DMNRuntime runtime, final DMNModel dmnModel, int my_number, String my_DT) { final DMNContext context = DMNFactory.newContext(); context.set("my number", my_number); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); LOG.debug("{}", dmnResult); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("my DT"), is(my_DT)); }
@Test public void testImportDS() { // DROOLS-2768 DMN Decision Service encapsulate Decision which imports a Decision Service final DMNRuntime runtime = DMNRuntimeUtil.createRuntimeWithAdditionalResources("DecisionService20180718.dmn", this.getClass(), "ImportDecisionService20180718.dmn"); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_0ff3708a-c861-4a96-b85c-7b882f18b7a1", "Import Decision Service 20180718"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); testImportDS_testEvaluateAll(runtime, dmnModel); testImportDS_testEvaluateDS(runtime, dmnModel); }
@Test public void testNowFunction() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("today_function_test.dmn", getClass() ); runtime.addListener( DMNRuntimeUtil.createListener() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_4ad80959-5fd8-46b7-8c9a-ab2fa58cb5b4", "When is it" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = DMNFactory.newContext(); context.set( "The date", LocalDate.of(2017, 1, 12 ) ); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.getContext().get("When is it"), is( "It is in the past" ) ); }
private void testAllowDMNAPItoEvaluateDirectDependencyImportedDecisions_evaluateResultsAndCheck(final DMNRuntime runtime, final Function<DMNContext, DMNResult> fn) { final DMNContext context = runtime.newContext(); context.set("modelA", mapOf(entry("Person name", "John"))); final DMNResult evaluateAll = fn.apply(context); LOG.debug("{}", evaluateAll); LOG.debug("{}", evaluateAll.getDecisionResults()); assertThat(DMNRuntimeUtil.formatMessages(evaluateAll.getMessages()), evaluateAll.hasErrors(), is(false)); assertThat(evaluateAll.getDecisionResultByName("Evaluating Say Hello").getResult(), is("Evaluating Say Hello to: Hello, John")); assertThat(evaluateAll.getDecisionResultByName("modelA.Greet the Person").getResult(), is("Hello, John")); }
@Test public void testFiltering() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("Person_filtering_by_age.dmn", getClass() ); runtime.addListener( DMNRuntimeUtil.createListener() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_e215ed7a-701b-4c53-b8df-4b4d23d5fe32", "Person filtering by age" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = DMNFactory.newContext(); context.set( "Min Age", 50 ); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), ((List)dmnResult.getContext().get("Filtering")).size(), is( 2 ) ); }
private static void testDecisionService20180920_testEvaluateAll(final DMNRuntime runtime, final DMNModel dmnModel) { final DMNContext context = DMNFactory.newContext(); context.set("Model A", mapOf(entry("Input 1", "input 1 value"))); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); LOG.debug("{}", dmnResult); dmnResult.getDecisionResults().forEach(x -> LOG.debug("{}", x)); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("Decision B"), is("input 1 value")); assertThat(result.get("Invoke Decision B DS"), is("A value")); }
@Test public void testTimeFunction() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("TimeFromDate.dmn", getClass() ); runtime.addListener( DMNRuntimeUtil.createListener() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_ecf4ea54-2abc-4e2f-a101-4fe14e356a46", "Dessin 1" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = DMNFactory.newContext(); context.set( "datetimestring", "2016-07-29T05:48:23" ); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.getContext().get("time"), is( LocalTime.of( 5, 48, 23 ) ) ); }
@Test public void testDSForTypeCheck() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("DecisionService20180718.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_6eef3a7c-bb0d-40bb-858d-f9067789c18a", "Decision Service 20180718"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); testDSForTypeCheck_runNormal(runtime, dmnModel); testDSForTypeCheck_runAllDecisionsWithWrongTypes(runtime, dmnModel); testDSForTypeCheck_runDecisionService_Normal(runtime, dmnModel); testDSForTypeCheck_runDecisionService_WithWrongTypes(runtime, dmnModel); }