/* * 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. * 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.screens.guided.dtable.client.widget.analysis.panel; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.google.gwt.view.client.ListDataProvider; import com.google.gwtmockito.GwtMockitoTestRunner; import org.drools.workbench.services.verifier.api.client.Status; import org.drools.workbench.services.verifier.api.client.reporting.CheckType; import org.drools.workbench.services.verifier.api.client.reporting.Issue; import org.drools.workbench.services.verifier.api.client.reporting.Severity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.PlaceRequest; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class AnalysisReportScreenTest { private AnalysisReportScreen screen; @Mock private AnalysisReportScreenView view; @Mock private PlaceManager placeManager; @Mock private EventSourceMock<IssueSelectedEvent> issueSelectedEvent; @Captor private ArgumentCaptor<ListDataProvider<Issue>> listDataProviderArgumentCaptor; @Captor private ArgumentCaptor<IssueSelectedEvent> issueSelectedEventCaptor; private ListDataProvider dataProvider; @Mock private PlaceRequest place; @Before public void setUp() throws Exception { screen = new AnalysisReportScreen( view, placeManager, issueSelectedEvent ); screen.setCurrentPlace( place ); verify( view ).setPresenter( screen ); verify( view ).setUpDataProvider( listDataProviderArgumentCaptor.capture() ); dataProvider = listDataProviderArgumentCaptor.getValue(); } @Test public void testShowReport() throws Exception { Issue issue1 = new Issue( Severity.WARNING, CheckType.DEFICIENT_ROW, Collections.emptySet() ); screen.showReport( getAnalysis( issue1 ) ); verify( placeManager ).goTo( eq( "org.drools.workbench.AnalysisReportScreen" ) ); assertEquals( 1, dataProvider.getList() .size() ); assertTrue( dataProvider.getList() .contains( issue1 ) ); Issue issue2 = new Issue( Severity.ERROR, CheckType.CONFLICTING_ROWS, Collections.emptySet() ); Issue issue3 = new Issue( Severity.WARNING, CheckType.SINGLE_HIT_LOST, Collections.emptySet() ); screen.showReport( getAnalysis( issue2, issue3 ) ); verify( placeManager, times( 2 ) ).goTo( eq( "org.drools.workbench.AnalysisReportScreen" ) ); verify( view ).showIssue( issue1 ); assertEquals( 2, dataProvider.getList() .size() ); assertFalse( dataProvider.getList() .contains( issue1 ) ); assertTrue( dataProvider.getList() .contains( issue2 ) ); assertTrue( dataProvider.getList() .contains( issue3 ) ); } @Test public void testMergeEmptyRules() throws Exception { testMerge( CheckType.EMPTY_RULE ); } @Test public void testMergeMissingAction() throws Exception { testMerge( CheckType.MISSING_ACTION ); } @Test public void testMergeMissingRestriction() throws Exception { testMerge( CheckType.MISSING_RESTRICTION ); } private void testMerge( CheckType type ) { Issue issue1 = new Issue( Severity.WARNING, type, new HashSet<>( Arrays.asList( 1 ) ) ); Issue issue2 = new Issue( Severity.WARNING, type, new HashSet<>( Arrays.asList( 2 ) ) ); Issue issue3 = new Issue( Severity.WARNING, type, new HashSet<>( Arrays.asList( 3 ) ) ); screen.showReport( getAnalysis( issue1, issue2, issue3 ) ); verify( placeManager ).goTo( eq( "org.drools.workbench.AnalysisReportScreen" ) ); assertEquals( 1, dataProvider.getList().size() ); Issue issue = (Issue) dataProvider.getList().get(0); assertEquals( Severity.WARNING, issue.getSeverity() ); assertEquals( type, issue.getCheckType() ); Iterator<Integer> rowNumbers = issue.getRowNumbers().iterator(); for( Integer rowNumber : Arrays.asList( 1, 2, 3 ) ) { assertEquals( rowNumber, rowNumbers.next() ); } verify( view ).showIssue( issue ); } @Test public void testDoNotShowIfThereAreNoIssues() throws Exception { screen.showReport( getAnalysis() ); assertEquals( 0, dataProvider.getList() .size() ); verify( view, never() ).showIssue( any( Issue.class ) ); verify( placeManager, never() ).goTo( eq( "org.drools.workbench.AnalysisReportScreen" ) ); verify( placeManager ).closePlace( eq( "org.drools.workbench.AnalysisReportScreen" ) ); } @Test public void testShowEverythingOnce() throws Exception { Issue issue2 = new Issue( Severity.WARNING, CheckType.REDUNDANT_ROWS, Collections.emptySet() ); Issue issue3 = new Issue( Severity.WARNING, CheckType.REDUNDANT_ROWS, Collections.emptySet() ); Issue issue4 = new Issue( Severity.WARNING, CheckType.REDUNDANT_ROWS, new HashSet<>( Arrays.asList( 1, 2, 3 ) ) ); Issue issue5 = new Issue( Severity.WARNING, CheckType.REDUNDANT_ROWS, new HashSet<>( Arrays.asList( 1, 2, 3 ) ) ); screen.showReport( getAnalysis( issue2, issue3, issue4, issue5 ) ); assertEquals( 2, dataProvider.getList() .size() ); } @Test public void testOnSelect() throws Exception { Issue issue1 = new Issue( Severity.WARNING, CheckType.REDUNDANT_ROWS, Collections.emptySet() ); Issue issue2 = new Issue( Severity.WARNING, CheckType.SINGLE_HIT_LOST, Collections.emptySet() ); screen.showReport( getAnalysis( issue1, issue2 ) ); verify( issueSelectedEvent, times( 1 ) ).fire( issueSelectedEventCaptor.capture() ); assertEquals( issue1, issueSelectedEventCaptor.getValue().getIssue() ); screen.onSelect( issue2 ); verify( view ).showIssue( issue2 ); verify( issueSelectedEvent, times( 2 ) ).fire( issueSelectedEventCaptor.capture() ); assertEquals( issue2, issueSelectedEventCaptor.getValue().getIssue() ); } @Test public void testShowStatus() throws Exception { screen.showStatus( new Status( "UUID", 1, 2, 3 ) ); verify( view ).showStatusTitle( 1, 2, 3 ); } @Test public void testThePlaceInReportIsNotActive() throws Exception { screen.showReport( getAnalysis( PlaceRequest.NOWHERE ) ); verify( view, never() ).showStatusComplete(); } @Test public void testNoIssuesShowNothing() throws Exception { screen.showReport( getAnalysis() ); verify( view, never() ).showIssue( any( Issue.class ) ); verify( view ).clearIssue(); verify( issueSelectedEvent, times( 1 ) ).fire( issueSelectedEventCaptor.capture() ); assertEquals( Issue.EMPTY, issueSelectedEventCaptor.getValue().getIssue() ); } private AnalysisReport getAnalysis( Issue... issues ) { return getAnalysis( place, issues ); } private AnalysisReport getAnalysis( PlaceRequest place, Issue... issues ) { final AnalysisReport report = new AnalysisReport( place ); final Set<Issue> unorderedIssues = new HashSet<Issue>(); for ( Issue issue : issues ) { unorderedIssues.add( issue ); } report.setIssues( unorderedIssues ); return report; } }