/*
* 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.workbench.services.verifier.webworker.client;
import java.util.HashSet;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.drools.workbench.services.verifier.api.client.index.DataType;
import org.drools.workbench.services.verifier.api.client.reporting.Severity;
import org.drools.workbench.services.verifier.plugin.client.api.FactTypes;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.drools.workbench.services.verifier.webworker.client.testutil.TestUtil.assertContains;
import static org.drools.workbench.services.verifier.webworker.client.testutil.TestUtil.assertOnlyContains;
import static org.junit.Assert.assertTrue;
@RunWith(GwtMockitoTestRunner.class)
public class DecisionTableAnalyzerMultipleIssuesFromFileTest extends AnalyzerUpdateTestBase {
@Override
@Before
public void setUp() throws
Exception {
super.setUp();
analyzerProvider.getFactTypes().add(new FactTypes.FactType("LoanApplication",
new HashSet<FactTypes.Field>() {{
add(new FactTypes.Field("amount",
DataType.TYPE_NUMERIC_INTEGER));
add(new FactTypes.Field("lengthYears",
DataType.TYPE_NUMERIC_INTEGER));
add(new FactTypes.Field("approvedRate",
DataType.TYPE_NUMERIC_INTEGER));
add(new FactTypes.Field("explanation",
DataType.TYPE_STRING));
add(new FactTypes.Field("approved",
DataType.TYPE_BOOLEAN));
}}));
}
@Test
public void testMissingRangeAndRedundantRows() throws Exception, UpdateException {
analyze("missingRangeAndRedundantRows.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
REDUNDANT_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
Severity.NOTE,
1);
assertContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
Severity.NOTE,
2);
assertContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
Severity.WARNING,
1,
2);
}
@Test
public void testMissingRangeAndSubsumptantRows() throws Exception {
analyze("missingRangeAndSubsumptantRows.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
SUBSUMPTANT_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
Severity.NOTE,
5);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
6);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
2,
6);
}
@Test
public void testMissingRangeAndConflictingRows() throws Exception {
analyze("missingRangeAndConflictingRows.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
CONFLICTING_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
Severity.NOTE,
5);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
3,
6);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
4,
6);
}
@Test
public void testMissingRangeAndMissingColumns() throws Exception {
analyze("missingRangeAndMissingColumns.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
RULE_HAS_NO_ACTION);
assertContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE,
Severity.NOTE,
5);
assertContains(analyzerProvider.getAnalysisReport(),
RULE_HAS_NO_ACTION,
Severity.WARNING,
5);
}
@Test
public void testSubsumptionAndRedundancy() throws Exception {
analyze("subsumptionAndRedundancy.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
REDUNDANT_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
2);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
3);
assertContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
Severity.WARNING,
2,
3);
}
@Test
public void testSubsumptionAndRedundancyMultipleFields() throws Exception {
analyze("subsumptionAndRedundancyMultipleFields.gdst");
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
2);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
3);
assertContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
Severity.WARNING,
2,
3);
assertOnlyContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
REDUNDANT_ROWS);
}
@Test
public void testSubsumptionAndConflict() throws Exception {
analyze("subsumptionAndConflict.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
CONFLICTING_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
2);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
2,
4);
}
@Test
public void testSubsumptionAndMissingAction() throws Exception {
analyze("subsumptionAndMissingAction.gdst");
assertContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
Severity.WARNING,
1,
2);
assertContains(analyzerProvider.getAnalysisReport(),
RULE_HAS_NO_ACTION,
Severity.WARNING,
3);
assertOnlyContains(analyzerProvider.getAnalysisReport(),
SUBSUMPTANT_ROWS,
RULE_HAS_NO_ACTION);
}
@Test
public void testRedundancyAndConflicts() throws Exception {
analyze("redundancyAndConflicts.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
CONFLICTING_ROWS);
assertContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
Severity.WARNING,
1,
3);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
2,
4);
}
@Test
public void testRedundancyAndConflictsMultipleFields() throws Exception {
analyze("redundancyAndConflictsMultipleFields.gdst");
assertContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
Severity.WARNING,
1,
2);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
1,
3);
assertContains(analyzerProvider.getAnalysisReport(),
CONFLICTING_ROWS,
Severity.WARNING,
2,
3);
assertOnlyContains(analyzerProvider.getAnalysisReport(),
REDUNDANT_ROWS,
CONFLICTING_ROWS);
}
@Test
public void testMissingConditionAndMissingAction() throws Exception {
analyze("missingConditionAndMissingAction.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
RULE_HAS_NO_RESTRICTIONS_AND_WILL_ALWAYS_FIRE,
RULE_HAS_NO_ACTION,
SINGLE_HIT_LOST);
}
@Test
public void testGapAnalysis() throws Exception {
// GUVNOR-2990
analyze("gapAnalysis.gdst");
assertTrue( analyzerProvider.getAnalysisReport().isEmpty() );
}
@Test
public void testBidimensionalGapAnalysis() throws Exception {
// GUVNOR-3010
analyze("gapAnalysis2D.gdst");
assertOnlyContains(analyzerProvider.getAnalysisReport(),
MISSING_RANGE_TITLE);
}
@Test
public void testBidimensionalGapAnalysisOK() throws Exception {
// GUVNOR-3010
analyze("gapAnalysis2DOK.gdst");
assertTrue(analyzerProvider.getAnalysisReport().isEmpty());
}
}