/* * 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.jcr2vfsmigration.vfsImport.asset; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.drools.workbench.jcr2vfsmigration.util.MigrationPathManager; import org.drools.workbench.jcr2vfsmigration.xml.model.Module; import org.drools.workbench.jcr2vfsmigration.xml.model.ModuleType; import org.drools.workbench.jcr2vfsmigration.xml.model.asset.DataModelAsset; import org.guvnor.common.services.project.service.ProjectService; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.api.definition.type.Role; import org.kie.workbench.common.screens.datamodeller.service.DataModelerService; import org.kie.workbench.common.services.datamodeller.core.Annotation; 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.impl.AnnotationImpl; import org.kie.workbench.common.services.datamodeller.core.impl.DataModelImpl; import org.kie.workbench.common.services.datamodeller.util.DriverUtils; import org.kie.workbench.common.services.shared.project.KieProject; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.backend.vfs.Path; import org.uberfire.io.IOService; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class FactModelImporterTest { @Mock private IOService ioService; @Mock private MigrationPathManager migrationPathManager; @Mock private DataModelerService modelerService; @Mock private ProjectService<KieProject> projectService; @InjectMocks FactModelImporter factModelImporter = new FactModelImporter(); private static Map<String, AnnotationDefinition> annotationDefinitions = new HashMap<String, AnnotationDefinition>( ); static { annotationDefinitions.put( Role.class.getName(), DriverUtils.buildAnnotationDefinition( Role.class ) ); } @Test public void testFactsImportGeneratedModel() { Module xmlModule = buildModule(); DataModelAsset xmlAsset = buildDataModelAsset(); Path path = mock( Path.class ); KieProject project = mock( KieProject.class ); when( migrationPathManager.generatePathForAsset( xmlModule, xmlAsset, xmlAsset.getAssetType().toString() ) ).thenReturn( path ); when( projectService.resolveProject( path ) ).thenReturn( project ); when( modelerService.getAnnotationDefinitions() ).thenReturn( annotationDefinitions ); factModelImporter.importAsset( xmlModule, xmlAsset, null ); DataModel expectedDataModel = buildExpectedDataModel(); //The importer should create the expected data model. verify( modelerService, times( 1 )).saveModel( eq( expectedDataModel ), eq( project ) ); } /** * Creates the input module for the FactModelImporter. */ private Module buildModule() { Module module = new Module( ModuleType.NORMAL, "uuid-test-module", //not relevant for the test "test-module", //not relevant for the test "test-user", //not relevant for the test "last checkin comment", //not relevant for the test new Date(), //nor relevant for the test "org.kie.test", //At import time, the package is taken from the Module. null, //not relevant for the test null, //not relevant for the test null, //not relevant for the test null //not relevant for the test ); return module; } /** * Creates the DataModelAsset for the FactModelImporter. */ private DataModelAsset buildDataModelAsset() { DataModelAsset dataModelAsset = new DataModelAsset( "TestFact", "drl", "test-user", "last checkin comment", new Date() ); DataModelAsset.DataModelObject dataModelObject = dataModelAsset.addDataModelObject( "TestFact", "java.lang.Object" ); dataModelObject.addObjectAnnotation( "Role", "value", Role.Type.EVENT.name() ); dataModelObject.addObjectProperty( "field1", "java.lang.String" ); return dataModelAsset; } /** * Creates the expected result. */ private DataModel buildExpectedDataModel() { DataModel dataModel = new DataModelImpl(); DataObject dataObject = dataModel.addDataObject( "org.kie.test", "TestFact" ); dataObject.setSuperClassName( "java.lang.Object" ); Annotation annotation = new AnnotationImpl( annotationDefinitions.get( Role.class.getName() ) ); annotation.setValue( "value", Role.Type.EVENT.name() ); dataObject.addAnnotation( annotation ); dataObject.addProperty( "field1", "java.lang.String" ); return dataModel; } }