/*
* 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.datasource.management.backend.service;
import java.util.ArrayList;
import java.util.List;
import org.dashbuilder.dataset.DataColumn;
import org.dashbuilder.dataset.DataSet;
import org.dashbuilder.dataset.DataSetLookup;
import org.dashbuilder.dataset.DataSetManager;
import org.dashbuilder.dataset.def.DataSetDefRegistry;
import org.dashbuilder.dataset.def.SQLDataSetDef;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.DisplayerSettingsFactory;
import org.dashbuilder.displayer.TableDisplayerSettingsBuilder;
import org.dashbuilder.renderer.client.DefaultRenderer;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.screens.datasource.management.backend.core.DataSourceRuntimeManager;
import org.kie.workbench.common.screens.datasource.management.metadata.DatabaseMetadata;
import org.kie.workbench.common.screens.datasource.management.model.DataSourceDeploymentInfo;
import org.kie.workbench.common.screens.datasource.management.service.DataManagementService;
import org.kie.workbench.common.screens.datasource.management.service.DatabaseMetadataService;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith( MockitoJUnitRunner.class )
public class DataManagementServiceTest {
private static final String DATASOURCE_UUID = "DATASOURCE_UUID";
private static final String SCHEMA = "SCHEMA";
private static final String TABLE = "TABLE";
private static final String COLUMN1 = "COLUMN1";
private static final String COLUMN2 = "COLUMN2";
@Mock
private DataSourceRuntimeManager dataSourceRuntimeManager;
@Mock
private DatabaseMetadataService databaseMetadataService;
@Mock
private DataSetDefRegistry dataSetDefRegistry;
@Mock
private DataSetManager dataSetManager;
private DataManagementService managementService;
@Mock
private DataSourceDeploymentInfo deploymentInfo;
@Mock
private DatabaseMetadata databaseMetadata;
@Mock
private DataSet dataSet;
@Mock
private List< DataColumn > dataColumns;
@Mock
private DataColumn column1;
@Mock
private DataColumn column2;
@Before
public void setup( ) {
managementService = new DataManagementServiceImpl( dataSourceRuntimeManager,
databaseMetadataService, dataSetDefRegistry, dataSetManager );
dataColumns = new ArrayList<>( );
dataColumns.add( column1 );
dataColumns.add( column2 );
when( column1.getId( ) ).thenReturn( COLUMN1 );
when( column2.getId( ) ).thenReturn( COLUMN2 );
}
@Test
public void testGetDisplayerSettings( ) throws Exception {
String dataSetUuid = DATASOURCE_UUID + ":" + SCHEMA + ":" + TABLE;
when( dataSourceRuntimeManager.getDataSourceDeploymentInfo( DATASOURCE_UUID ) ).thenReturn( deploymentInfo );
when( deploymentInfo.getUuid( ) ).thenReturn( DATASOURCE_UUID );
when( databaseMetadataService.getMetadata( DATASOURCE_UUID, false, false ) ).thenReturn( databaseMetadata );
when( dataSetManager.lookupDataSet( new DataSetLookup( dataSetUuid ) ) ).thenReturn( dataSet );
when( dataSet.getColumns( ) ).thenReturn( dataColumns );
DisplayerSettings displayerSettings = managementService.getDisplayerSettings( DATASOURCE_UUID, SCHEMA, TABLE );
ArgumentCaptor< SQLDataSetDef > argumentCaptor = ArgumentCaptor.forClass( SQLDataSetDef.class );
verify( dataSetDefRegistry, times( 1 ) ).registerDataSetDef( argumentCaptor.capture( ) );
// data set definition that should have been created internally
SQLDataSetDef expectedDataSet = new SQLDataSetDef( );
expectedDataSet.setUUID( dataSetUuid );
expectedDataSet.setName( SCHEMA + "." + TABLE );
expectedDataSet.setDataSource( DATASOURCE_UUID );
expectedDataSet.setDbSchema( SCHEMA );
expectedDataSet.setDbTable( TABLE );
expectedDataSet.setPublic( false );
// the expected data source should have been created.
assertEqualsDataSet( expectedDataSet, argumentCaptor.getValue( ) );
// expected displayer settings
TableDisplayerSettingsBuilder settingsBuilder = DisplayerSettingsFactory.newTableSettings( )
.dataset( dataSetUuid )
.title( TABLE )
.titleVisible( true )
.tablePageSize( 20 )
.tableOrderEnabled( true )
.column( COLUMN1 )
.column( COLUMN2 )
.tableWidth( 100 * dataColumns.size( ) )
.renderer( DefaultRenderer.UUID );
assertEquals( settingsBuilder.buildSettings( ), displayerSettings );
}
private void assertEqualsDataSet( SQLDataSetDef expectedDataSet, SQLDataSetDef currentDataSet ) {
assertEquals( expectedDataSet.getUUID( ), currentDataSet.getUUID( ) );
assertEquals( expectedDataSet.getName( ), currentDataSet.getName( ) );
assertEquals( expectedDataSet.getDataSource( ), currentDataSet.getDataSource( ) );
assertEquals( expectedDataSet.getDbSchema( ), currentDataSet.getDbSchema( ) );
assertEquals( expectedDataSet.getDbTable( ), currentDataSet.getDbTable( ) );
assertEquals( expectedDataSet.isPublic( ), currentDataSet.isPublic( ) );
}
}