/* * Copyright 2017 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.drools.testcoverage.regression; import org.assertj.core.api.Assertions; import org.drools.core.builder.conf.impl.DecisionTableConfigurationImpl; import org.drools.testcoverage.common.util.KieBaseUtil; import org.drools.testcoverage.common.util.KieUtil; import org.junit.Test; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; import org.kie.api.builder.Message; import org.kie.api.builder.Message.Level; import org.kie.api.io.Resource; import org.kie.api.io.ResourceConfiguration; import org.kie.api.runtime.StatelessKieSession; import org.kie.internal.builder.DecisionTableConfiguration; import org.kie.internal.builder.DecisionTableInputType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Tests loading decision tables from several worksheets in a XLS file. */ public class MultipleSheetsLoadingTest { private static final Logger LOGGER = LoggerFactory.getLogger(MultipleSheetsLoadingTest.class); private static final String XLS_EXTENSION = "xls"; private static final String XLS_FILE_NAME_NO_EXTENSION = "multiple-sheets"; private static final String XLS_FILE_NAME = XLS_FILE_NAME_NO_EXTENSION + "." + XLS_EXTENSION; private static final String WORKSHEET_1_NAME = "first"; private static final String WORKSHEET_2_NAME = "second"; @Test public void test() { final KieBuilder kbuilder = this.buildResources(); final Collection<Message> results = kbuilder.getResults().getMessages(Level.ERROR, Level.WARNING); if (results.size() > 0) { LOGGER.error(results.toString()); } Assertions.assertThat(results).as("Some errors/warnings found").isEmpty(); final KieBase kbase = KieBaseUtil.getDefaultKieBaseFromKieBuilder(kbuilder); final StatelessKieSession ksession = kbase.newStatelessKieSession(); final Set<String> resultSet = new HashSet<String>(); ksession.execute((Object) resultSet); Assertions.assertThat(resultSet.size()).as("Wrong number of rules was fired").isEqualTo(2); for (String ruleName : new String[] { "rule1", "rule2" }) { Assertions.assertThat(resultSet.contains(ruleName)).as("Rule " + ruleName + " was not fired!").isTrue(); } } private KieBuilder buildResources() { final Resource resourceXlsFirst = this.createResourceWithConfig(WORKSHEET_1_NAME); final Resource resourceXlsSecond = this.createResourceWithConfig(WORKSHEET_2_NAME); return KieUtil.getKieBuilderFromResources(false, resourceXlsFirst, resourceXlsSecond); } private Resource createResourceWithConfig(final String worksheetName) { final Resource resourceXls = KieServices.Factory.get().getResources().newClassPathResource(XLS_FILE_NAME, getClass()); resourceXls.setTargetPath(String.format("%s-%s.%s", XLS_FILE_NAME_NO_EXTENSION, worksheetName, XLS_EXTENSION)); resourceXls.setConfiguration(this.createXLSResourceConfig(worksheetName)); return resourceXls; } private ResourceConfiguration createXLSResourceConfig(final String worksheetName) { final DecisionTableConfiguration resourceConfig = new DecisionTableConfigurationImpl(); resourceConfig.setInputType(DecisionTableInputType.XLS); resourceConfig.setWorksheetName(worksheetName); return resourceConfig; } }