/* * 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.workbench.common.screens.datamodeller.client; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.google.gwtmockito.GwtMock; import com.google.gwtmockito.GwtMockitoTestRunner; import org.guvnor.common.services.shared.message.Level; import org.guvnor.common.services.shared.metadata.model.Overview; import org.guvnor.messageconsole.events.PublishBatchMessagesEvent; import org.guvnor.messageconsole.events.UnpublishMessagesEvent; import org.junit.Before; import org.junit.runner.RunWith; import org.kie.api.definition.type.Description; import org.kie.api.definition.type.Label; import org.kie.workbench.common.screens.datamodeller.client.context.DataModelerWorkbenchContext; import org.kie.workbench.common.screens.datamodeller.client.context.DataModelerWorkbenchFocusEvent; import org.kie.workbench.common.screens.datamodeller.client.validation.JavaFileNameValidator; import org.kie.workbench.common.screens.datamodeller.client.validation.ValidatorService; import org.kie.workbench.common.screens.datamodeller.client.widgets.DataModelerEditorsTestHelper; import org.kie.workbench.common.screens.datamodeller.events.DataModelerEvent; import org.kie.workbench.common.screens.datamodeller.model.DataModelerError; import org.kie.workbench.common.screens.datamodeller.model.EditorModelContent; import org.kie.workbench.common.screens.datamodeller.service.DataModelerService; import org.kie.workbench.common.screens.javaeditor.client.type.JavaResourceType; import org.kie.workbench.common.screens.javaeditor.client.widget.EditJavaSourceWidget; import org.kie.workbench.common.services.datamodeller.core.AnnotationDefinition; import org.kie.workbench.common.services.datamodeller.core.DataModel; import org.kie.workbench.common.services.datamodeller.core.DataObject; import org.kie.workbench.common.services.datamodeller.core.PropertyType; import org.kie.workbench.common.services.datamodeller.core.impl.PropertyTypeFactoryImpl; import org.kie.workbench.common.services.datamodeller.util.DriverUtils; import org.kie.workbench.common.services.shared.project.KieProject; import org.kie.workbench.common.services.shared.validation.ValidationService; import org.kie.workbench.common.widgets.client.popups.validation.ValidationPopup; import org.kie.workbench.common.widgets.metadata.client.KieEditorWrapperView; import org.kie.workbench.common.widgets.metadata.client.widget.OverviewWidgetPresenter; import org.mockito.Mock; import org.uberfire.backend.vfs.ObservablePath; import org.uberfire.client.mvp.LockRequiredEvent; import org.uberfire.ext.editor.commons.client.file.popups.CopyPopUpPresenter; import org.uberfire.ext.editor.commons.client.file.popups.RenamePopUpPresenter; import org.uberfire.ext.editor.commons.client.file.popups.SavePopUpPresenter; import org.uberfire.ext.editor.commons.client.history.VersionRecordManager; import org.uberfire.mocks.CallerMock; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.PlaceRequest; import org.uberfire.rpc.SessionInfo; import org.uberfire.security.authz.AuthorizationManager; import static org.mockito.Mockito.mock; @RunWith( GwtMockitoTestRunner.class ) public abstract class DataModelerScreenPresenterTestBase { @GwtMock protected DataModelerScreenPresenter.DataModelerScreenView view; @Mock protected SessionInfo sessionInfo; @Mock protected EditJavaSourceWidget javaSourceEditor; @Mock protected EventSourceMock<DataModelerEvent> dataModelerEvent; @Mock protected EventSourceMock<UnpublishMessagesEvent> unpublishMessagesEvent; @Mock protected EventSourceMock<PublishBatchMessagesEvent> publishBatchMessagesEvent; @Mock protected EventSourceMock<LockRequiredEvent> lockRequired; @Mock protected EventSourceMock<DataModelerWorkbenchFocusEvent> dataModelerFocusEvent; @Mock protected DataModelerService modelerService; @Mock protected ValidationPopup validationPopup; @Mock protected ValidationService validationService; @Mock protected ValidatorService validatorService; @Mock protected JavaFileNameValidator javaFileNameValidator; protected JavaResourceType resourceType; @Mock protected DataModelerWorkbenchContext dataModelerWBContext; @Mock protected AuthorizationManager authorizationManager; @Mock protected ObservablePath path; @GwtMock protected VersionRecordManager versionRecordManager; @Mock protected PlaceRequest placeRequest; @Mock protected SavePopUpPresenter savePopUpPresenter; @Mock protected RenamePopUpPresenter renamePopUpPresenter; @Mock protected CopyPopUpPresenter copyPopUpPresenter; protected DataModelerScreenPresenter presenter; /** * Emulates the overview returned from server. */ @Mock protected Overview overview; /** * Emulates the project returned from server. */ @Mock protected KieProject kieProject; /** * Emulates the data object returned from server. */ protected DataObject testObject1; /** * Emulates the model returned from server. */ protected DataModel testModel; /** * Emulates the source returned from server. */ protected String testSource = "public class Dummy {}"; /** * Emulates the list for parse errors returned from server when a java filed couldn't be parsed. */ protected List<DataModelerError> testErrors; /** * Emulates the packages definition returned form server. */ protected Set<String> testPackages; /** * Emulates the annotation definitions returned from server. */ protected Map<String, AnnotationDefinition> testAnnotationDefs; /** * Emulates the property types definitions returned from server. */ protected List<PropertyType> testTypeDefs; @Before public void setUp() throws Exception { testObject1 = DataModelerEditorsTestHelper.createTestObject1(); testModel = DataModelerEditorsTestHelper.createTestModel( testObject1 ); testErrors = createTestErrors(); testPackages = createTestPackages(); testAnnotationDefs = createTestAnnotations(); testTypeDefs = createTestPropertyTypes(); presenter = new DataModelerScreenPresenter( view, sessionInfo ) { { kieView = mock( KieEditorWrapperView.class ); this.versionRecordManager = DataModelerScreenPresenterTestBase.this.versionRecordManager; this.authorizationManager = DataModelerScreenPresenterTestBase.this.authorizationManager; overviewWidget = mock( OverviewWidgetPresenter.class ); savePopUpPresenter = DataModelerScreenPresenterTestBase.this.savePopUpPresenter; renamePopUpPresenter = DataModelerScreenPresenterTestBase.this.renamePopUpPresenter; copyPopUpPresenter = DataModelerScreenPresenterTestBase.this.copyPopUpPresenter; javaSourceEditor = DataModelerScreenPresenterTestBase.this.javaSourceEditor; dataModelerEvent = DataModelerScreenPresenterTestBase.this.dataModelerEvent; unpublishMessagesEvent = DataModelerScreenPresenterTestBase.this.unpublishMessagesEvent; publishBatchMessagesEvent = DataModelerScreenPresenterTestBase.this.publishBatchMessagesEvent; lockRequired = DataModelerScreenPresenterTestBase.this.lockRequired; dataModelerFocusEvent = DataModelerScreenPresenterTestBase.this.dataModelerFocusEvent; modelerService = new CallerMock<>( DataModelerScreenPresenterTestBase.this.modelerService ); validationPopup = DataModelerScreenPresenterTestBase.this.validationPopup; validationService = new CallerMock<>( DataModelerScreenPresenterTestBase.this.validationService ); validatorService = DataModelerScreenPresenterTestBase.this.validatorService; javaFileNameValidator = DataModelerScreenPresenterTestBase.this.javaFileNameValidator; resourceType = DataModelerScreenPresenterTestBase.this.resourceType; dataModelerWBContext = DataModelerScreenPresenterTestBase.this.dataModelerWBContext; uiStarted = true; } protected void makeMenuBar() { } @Override protected void selectEditorTab() { //emulates the ui action produced by the tabs events. onEditTabSelected(); } @Override protected void selectOverviewTab() { //emulates the ui action produced by the tabs events. onOverviewSelected(); } @Override public void setSelectedTab( int index ) { //emulates the ui action produced by the tabs events. switch ( index ) { case 0: onEditTabSelected(); break; case 1: onOverviewSelected(); break; case 2: onSourceTabSelected(); break; default: throw new RuntimeException( "Tab index out of bounds: " + index ); } } }; } protected EditorModelContent createContent( boolean includeTypesInfo, boolean addParseErrors ) { EditorModelContent content = new EditorModelContent(); content.setDataObject( testObject1 ); content.setDataModel( testModel ); content.setSource( testSource ); content.setOriginalClassName( testObject1.getClassName() ); content.setOriginalPackageName( testObject1.getPackageName() ); content.setPath( path ); content.setCurrentProject( kieProject ); content.setCurrentProjectPackages( testPackages ); content.setOverview( overview ); if ( includeTypesInfo ) { content.setAnnotationDefinitions( testAnnotationDefs ); content.setPropertyTypes( testTypeDefs ); } if ( addParseErrors ) { content.setErrors( testErrors ); } return content; } protected Set<String> createTestPackages() { HashSet<String> packages = new HashSet<String>( ); packages.add( "package1" ); packages.add( "package2" ); return packages; } protected Map<String, AnnotationDefinition> createTestAnnotations() { Map<String, AnnotationDefinition> annotationsDef = new HashMap<String, AnnotationDefinition>( ); AnnotationDefinition annotationDefinition = DriverUtils.buildAnnotationDefinition( Label.class ); annotationsDef.put( annotationDefinition.getClassName(), annotationDefinition ); annotationDefinition = DriverUtils.buildAnnotationDefinition( Description.class ); annotationsDef.put( annotationDefinition.getClassName(), annotationDefinition ); return annotationsDef; } protected List<PropertyType> createTestPropertyTypes() { return PropertyTypeFactoryImpl.getInstance().getBasePropertyTypes(); } protected List<DataModelerError> createTestErrors() { List<DataModelerError> errors = new ArrayList<DataModelerError>( ); errors.add( new DataModelerError( 1, "error1", Level.ERROR, path, 1, 0 ) ); errors.add( new DataModelerError( 2, "error2", Level.ERROR, path, 2, 0 ) ); errors.add( new DataModelerError( 3, "error3", Level.ERROR, path, 3, 0 ) ); return errors; } }