/*
* Copyright 2015 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.
*
* 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.scorecards;
import org.drools.compiler.compiler.ScoreCardFactory;
import org.drools.compiler.compiler.ScoreCardProvider;
import org.junit.Before;
import org.junit.Test;
import org.kie.api.definition.type.FactType;
import org.kie.api.io.ResourceType;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.builder.ScoreCardConfiguration;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;
import java.io.InputStream;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
public class ScorecardProviderTest {
private static String drl;
private ScoreCardProvider scoreCardProvider;
@Before
public void setUp() throws Exception {
scoreCardProvider = ScoreCardFactory.getScoreCardProvider();
assertNotNull(scoreCardProvider);
}
@Test
public void testDrlWithoutSheetName() throws Exception {
InputStream is = ScorecardProviderTest.class.getResourceAsStream("/scoremodel_c.xls");
assertNotNull(is);
ScoreCardConfiguration scconf = KnowledgeBuilderFactory.newScoreCardConfiguration();
drl = scoreCardProvider.loadFromInputStream(is, scconf);
assertNotNull(drl);
assertTrue(drl.length() > 0);
//System.out.println(drl);
}
@Test
public void testDrlWithSheetName() throws Exception {
InputStream is = ScorecardProviderTest.class.getResourceAsStream("/scoremodel_c.xls");
assertNotNull(is);
ScoreCardConfiguration scconf = KnowledgeBuilderFactory.newScoreCardConfiguration();
scconf.setWorksheetName( "scorecards" );
drl = scoreCardProvider.loadFromInputStream(is, scconf);
assertNotNull(drl);
assertTrue(drl.length() > 0);
}
@Test
public void testKnowledgeBaseWithExection() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
ScoreCardConfiguration scconf = KnowledgeBuilderFactory.newScoreCardConfiguration();
scconf.setWorksheetName( "scorecards" );
kbuilder.add( ResourceFactory.newUrlResource(ScorecardProviderTest.class.getResource("/scoremodel_c.xls")),
ResourceType.SCARD,
scconf );
assertFalse( kbuilder.hasErrors() );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
assertNotNull(kbase);
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
//NEW WORKING MEMORY
StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
FactType scorecardType = kbase.getFactType( "org.drools.scorecards.example","SampleScore" );
assertNotNull(scorecardType);
Object scorecard = scorecardType.newInstance();
assertNotNull(scorecard);
scorecardType.set(scorecard, "age", 10);
session.insert( scorecard );
session.fireAllRules();
session.dispose();
//occupation = 5, age = 25, validLicence -1
assertEquals( 29.0, scorecardType.get( scorecard, "scorecard__calculatedScore" ) );
}
@Test
public void testDrlGenerationWithExternalTypes() throws Exception {
InputStream is = ScorecardProviderTest.class.getResourceAsStream("/scoremodel_externalmodel.xls");
assertNotNull(is);
ScoreCardConfiguration scconf = KnowledgeBuilderFactory.newScoreCardConfiguration();
scconf.setWorksheetName( "scorecards" );
scconf.setUsingExternalTypes(true);
String drl = scoreCardProvider.loadFromInputStream(is, scconf);
assertNotNull(drl);
assertTrue(drl.length() > 0);
assertTrue(drl.contains("org.drools.scorecards.example.Applicant"));
}
}