@Test public void testDecisionTableWithCalculatedResult() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "calculation1.dmn", this.getClass() ); checkDecisionTableWithCalculatedResult(runtime); }
@Test public void testGetRequiredInputsById() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/drools/kie-dmn", "_0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); Set<InputDataNode> inputs = dmnModel.getRequiredInputsForDecisionId( "d_GreetingMessage" ); assertThat( inputs.size(), is(1) ); assertThat( inputs.iterator().next().getName(), is("Full Name") ); inputs = dmnModel.getRequiredInputsForDecisionId( "nonExistantId" ); assertThat( inputs.size(), is(0) ); }
@Test public void testGetRequiredInputsByName() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/drools/kie-dmn", "_0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); Set<InputDataNode> inputs = dmnModel.getRequiredInputsForDecisionName( "Greeting Message" ); assertThat( inputs.size(), is(1) ); assertThat( inputs.iterator().next().getName(), is("Full Name") ); inputs = dmnModel.getRequiredInputsForDecisionName("nonExistantDecisionName"); assertThat( inputs.size(), is(0) ); }
private void testSimpleDecisionTableHitPolicyCollectAggregateFunction( final String resourceName, final String modelName, final BigDecimal expectedResult, final DMNContext context) { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(resourceName, this.getClass()); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", modelName); assertThat(dmnModel, notNullValue()); final DMNContext result = evaluateSimpleTableWithContext(dmnModel, runtime, context); assertThat(result.get("Status number"), is(expectedResult)); }
@Test public void testSimpleDecisionTableHitPolicyFirst() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0004-simpletable-F.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0004-simpletable-F"); assertThat(dmnModel, notNullValue()); final DMNContext context = getSimpleTableContext(BigDecimal.valueOf(18), "Medium", true); final DMNContext result = evaluateSimpleTableWithContext(dmnModel, runtime, context); final Map<String, Object> decisionResult = (Map<String, Object>) result.get("Decision Result"); assertThat(decisionResult.values(), hasSize(2)); assertThat(decisionResult, hasEntry(is("Approval Status"), is("Approved"))); assertThat(decisionResult, hasEntry(is("Decision Review"), is("Decision final"))); }
@Test public void testSimpleDecisionTableHitPolicyPriority() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0004-simpletable-P.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0004-simpletable-P"); assertThat(dmnModel, notNullValue()); final DMNContext context = getSimpleTableContext(BigDecimal.valueOf(70), "Medium", true); final DMNContext result = evaluateSimpleTableWithContext(dmnModel, runtime, context); assertThat(result.get("Approval Status"), is("Declined")); }
@Test public void testSimpleDecisionTableHitPolicyRuleOrder() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0004-simpletable-R.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0004-simpletable-R"); assertThat(dmnModel, notNullValue()); final DMNContext context = getSimpleTableContext(BigDecimal.valueOf(70), "Medium", true); final DMNContext result = evaluateSimpleTableWithContext(dmnModel, runtime, context); final List<String> decisionResults = (List<String>) result.get("Approval Status"); assertThat(decisionResults, hasSize(3)); assertThat(decisionResults, contains("Approved", "Needs review", "Declined")); }
@Test public void testDTInContext() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("DT_in_context.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_4acdcb25-b298-435e-abd5-efd00ed686a5", "Drawing 1" ); assertThat( dmnModel, notNullValue() ); final DMNContext context = DMNFactory.newContext(); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( dmnResult.getDecisionResults().size(), is( 1 ) ); assertThat( dmnResult.getDecisionResultByName( "D1" ).getResult(), is( instanceOf( Map.class ) ) ); final DMNContext result = dmnResult.getContext(); assertThat( ((Map) result.get( "D1" )).get( "Text color" ), is( "red" ) ); }
@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 ) ); }
@Test public void testInputNumberEvaluateAll() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0002-input-data-number.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0002-input-data-number" ); assertThat( dmnModel, notNullValue() ); final DMNContext context = DMNFactory.newContext(); context.set( "Monthly Salary", new BigDecimal( 1000 ) ); final DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); final DMNContext result = dmnResult.getContext(); assertThat( result.get( "Yearly Salary" ), is( new BigDecimal( 12000 ) ) ); }
@Test public void testFor() { // DROOLS-2317 final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("Dynamic composition.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_c2d86765-c3c7-4e1d-b1fa-b830fa5bc529", "Dynamic composition"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); }
@Test public void testPMMLFunctionContext() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("pmml_function_context.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "http://www.trisotech.com/dmn/definitions/_b42317c4-4f0c-474e-a0bf-2895b0b3c314", "Dessin 1" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); assertThat( dmnModel.getMessages().size(), is( 1 ) ); assertThat( dmnModel.getMessages().get( 0 ).getMessageType(), is( DMNMessageType.INVALID_ATTRIBUTE_VALUE ) ); assertThat( dmnModel.getMessages().get( 0 ).getSeverity(), is( DMNMessage.Severity.WARN ) ); }
@Test public void testSimpleNot() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("Simple_Not.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_98436ebb-7c42-48c0-8d11-d693e2a817c9", "Simple Not" ); assertThat( dmnModel, notNullValue() ); final DMNContext context = DMNFactory.newContext(); context.set( "Occupation", "Student" ); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); assertThat( dmnResult.hasErrors(), is( false ) ); final DMNContext result = dmnResult.getContext(); assertThat( result.get( "a" ), is( "Is Student" ) ); }
@Test public void testEmptyinputValuesoutputValuesdefaultOutputEntry() { // DROOLS- final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("EmptyinputValuesoutputValuesdefaultOutputEntry.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_31f2dde9-b27c-41f8-97b4-5c8dd728942e", "Drawing 1"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); checkEmptyinputValuesoutputValuesdefaultOutputEntry(runtime, dmnModel, 47, "positive"); checkEmptyinputValuesoutputValuesdefaultOutputEntry(runtime, dmnModel, -1, "negative"); }
@Test public void testGetEntries() { // DROOLS-3308 DMN implement missing functions only described in chapter "10.3.2.6 Context" final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("getentriesgetvalue.dmn", this.getClass()); final DMNModel dmnModel = getAndAssertModelNoErrors(runtime, "http://www.trisotech.com/dmn/definitions/_0fad1a80-0642-4278-ac3d-47668c4f689a", "Drawing 1"); final DMNContext emptyContext = DMNFactory.newContext(); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, emptyContext); LOG.debug("{}", dmnResult); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); assertThat(dmnResult.getDecisionResultByName("using get entries").getEvaluationStatus(), is(DecisionEvaluationStatus.SUCCEEDED)); assertThat(dmnResult.getDecisionResultByName("using get entries").getResult(), is(Arrays.asList("value2"))); }
@Test public void testExtendedMode() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("strictMode.dmn", this.getClass() ); final DMNModel model = runtime.getModel("http://www.trisotech.com/dmn/definitions/_ecf4ea54-2abc-4e2f-a101-4fe14e356a46", "strictMode" ); final DMNContext ctx = runtime.newContext(); ctx.set( "timestring", "2016-12-20T14:30:22z" ); final DMNResult result = runtime.evaluateAll(model, ctx); assertEquals( DateTimeFormatter.ISO_TIME.parse( "14:30:22z", OffsetTime::from ), result.getDecisionResultByName( "time" ).getResult() ); }
@Test public void testStrictMode() { System.setProperty("org.kie.dmn.strictConformance", "true"); final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("strictMode.dmn", this.getClass() ); final DMNModel model = runtime.getModel("http://www.trisotech.com/dmn/definitions/_ecf4ea54-2abc-4e2f-a101-4fe14e356a46", "strictMode" ); final DMNContext ctx = runtime.newContext(); ctx.set( "timestring", "2016-12-20T14:30:22z" ); final DMNResult result = runtime.evaluateAll(model, ctx); assertNull( result.getDecisionResultByName("time").getResult() ); }
@Test public void testSimpleDecisionTableHitPolicyUniqueNullWarn() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0004-simpletable-U-noinputvalues.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0004-simpletable-U-noinputvalues"); assertThat(dmnModel, notNullValue()); final DMNContext context = getSimpleTableContext(BigDecimal.valueOf(18), "ASD", false); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); final DMNContext result = dmnResult.getContext(); assertThat(result.get("Approval Status"), nullValue()); assertTrue(dmnResult.getMessages().size() > 0); assertTrue(dmnResult.getMessages().stream().anyMatch(dm -> dm.getSeverity().equals(DMNMessage.Severity.WARN) && dm.getFeelEvent() instanceof HitPolicyViolationEvent && dm.getFeelEvent().getSeverity().equals(FEELEvent.Severity.WARN))); }
@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); }
@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)); }