/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.kie.dmn.core; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.*; import java.math.BigDecimal; import java.util.Set; import org.junit.Ignore; import org.junit.Test; import org.kie.dmn.api.core.DMNContext; import org.kie.dmn.api.core.DMNDecisionResult; import org.kie.dmn.api.core.DMNMessage; import org.kie.dmn.api.core.DMNModel; import org.kie.dmn.api.core.DMNResult; import org.kie.dmn.api.core.DMNRuntime; import org.kie.dmn.api.core.ast.InputDataNode; import org.kie.dmn.core.api.*; import org.kie.dmn.core.util.DMNRuntimeUtil; public class DMNInputRuntimeTest { @Test public void testInputStringEvaluateAll() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Full Name", "John Doe" ); DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getResult(), is( "Hello John Doe" ) ); DMNContext result = dmnResult.getContext(); assertThat( result.get( "Greeting Message" ), is( "Hello John Doe" ) ); } @Test public void testInputStringEvaluateDecisionByName() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Full Name", "John Doe" ); DMNResult dmnResult = runtime.evaluateDecisionByName( dmnModel, "Greeting Message", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getResult(), is( "Hello John Doe" ) ); DMNContext result = dmnResult.getContext(); assertThat( result.get( "Greeting Message" ), is( "Hello John Doe" ) ); dmnResult = runtime.evaluateDecisionByName( dmnModel, "nonExistantName", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); dmnResult = runtime.evaluateDecisionByName( dmnModel, "", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); dmnResult = runtime.evaluateDecisionByName( dmnModel, null, context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); } @Test public void testInputStringEvaluateDecisionById() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Full Name", "John Doe" ); DMNResult dmnResult = runtime.evaluateDecisionById( dmnModel, "d_GreetingMessage", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultById( "d_GreetingMessage" ).getResult(), is( "Hello John Doe" ) ); DMNContext result = dmnResult.getContext(); assertThat( result.get( "Greeting Message" ), is( "Hello John Doe" ) ); dmnResult = runtime.evaluateDecisionById( dmnModel, "nonExistantId", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); dmnResult = runtime.evaluateDecisionById( dmnModel, "", context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); dmnResult = runtime.evaluateDecisionById( dmnModel, null, context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getEvaluationStatus(), is( DMNDecisionResult.DecisionEvaluationStatus.NOT_EVALUATED ) ); } @Test public void testInputStringAllowedValuesEvaluateAll() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0003-input-data-string-allowed-values.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0003-input-data-string-allowed-values" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Employment Status", "SELF-EMPLOYED" ); DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); DMNContext result = dmnResult.getContext(); assertThat( result.get( "Employment Status Statement" ), is( "You are SELF-EMPLOYED" ) ); } @Ignore("Needs fixing") @Test public void testInputStringNotAllowedValuesEvaluateAll() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0003-input-data-string-allowed-values.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0003-input-data-string-allowed-values" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Employment Status", "NOT-ALLOWED-VALUE" ); DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Employment Status Statement" ).getResult(), is((String) null) ); assertThat( dmnResult.getMessages().size(), is(1) ); assertThat( dmnResult.getMessages().get(0).getSeverity(), is(DMNMessage.Severity.ERROR) ); assertThat( dmnResult.getDecisionResults().get(0).getMessages().size(), is(1) ); assertThat( dmnResult.getDecisionResults().get(0).getMessages().get(0).getSeverity(), is(DMNMessage.Severity.ERROR) ); } @Test public void testInputNumberEvaluateAll() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0002-input-data-number.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0002-input-data-number" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Monthly Salary", new BigDecimal( 1000 ) ); DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); DMNContext result = dmnResult.getContext(); assertThat( result.get( "Yearly Salary" ), is( new BigDecimal( 12000 ) ) ); } @Test public void testGetRequiredInputsByName() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/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) ); } @Test public void testGetRequiredInputsById() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/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 testNonexistantInputNodeName() { DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "0001-input-data-string.dmn", this.getClass() ); DMNModel dmnModel = runtime.getModel( "https://github.com/kiegroup/kie-dmn", "0001-input-data-string" ); assertThat( dmnModel, notNullValue() ); DMNContext context = DMNFactory.newContext(); context.set( "Nonexistant Input", "John Doe" ); DMNResult dmnResult = runtime.evaluateAll( dmnModel, context ); assertThat( dmnResult.getDecisionResults().size(), is(1) ); assertThat( dmnResult.getDecisionResultByName( "Greeting Message" ).getResult(), is((String) null) ); assertThat( dmnResult.getMessages().size(), is(1) ); assertThat( dmnResult.getMessages().get(0).getSeverity(), is(DMNMessage.Severity.ERROR) ); assertThat( dmnResult.getDecisionResults().get(0).getMessages().size(), is(1) ); assertThat( dmnResult.getDecisionResults().get(0).getMessages().get(0).getSeverity(), is(DMNMessage.Severity.ERROR) ); } }