/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2015 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * 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.pentaho.di.ui.trans.steps.googleanalytics; import static org.mockito.Mockito.*; import com.google.api.services.analytics.model.GaData; import com.google.api.services.analytics.model.GaData.ColumnHeaders; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import com.google.api.services.analytics.Analytics; import org.pentaho.di.core.exception.KettlePluginException; import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.row.value.ValueMetaBase; import org.pentaho.di.core.row.value.ValueMetaPluginType; import org.pentaho.di.trans.steps.googleanalytics.GaInputStepMeta; import org.pentaho.di.ui.core.widget.TableView; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author Pavel Sakun */ @RunWith( MockitoJUnitRunner.class ) public class GaInputStepDialogTest { @Mock Analytics.Data.Ga.Get query; @Mock TableItem tableItem; @Mock Table table; @Mock TableView tableView; @Mock GaInputStepDialog dialog; List<ColumnHeaders> headers; @Before public void setup() throws IOException, KettlePluginException { PluginRegistry.addPluginType( ValueMetaPluginType.getInstance() ); PluginRegistry.init(); GaData gaData = new GaData(); headers = new ArrayList<>(); headers.add( createColumnHeader( "DIMENSION", "ga:date", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:daysSinceLastVisit", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:visitLength", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:visitCount", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:latitude", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:longitude", null ) ); headers.add( createColumnHeader( "DIMENSION", "ga:other", null ) ); headers.add( createColumnHeader( "METRIC", "currency", "currency" ) ); headers.add( createColumnHeader( "METRIC", "float", "float" ) ); headers.add( createColumnHeader( "METRIC", "percent", "percent" ) ); headers.add( createColumnHeader( "METRIC", "us_currency", "us_currency" ) ); headers.add( createColumnHeader( "METRIC", "time", "time" ) ); headers.add( createColumnHeader( "METRIC", "integer", "integer" ) ); headers.add( createColumnHeader( "METRIC", "other", "other" ) ); gaData.setColumnHeaders( headers ); gaData.setProfileInfo( new GaData.ProfileInfo() ); List<List<String>> data = new ArrayList<>(); data.add( new ArrayList<String>() ); gaData.setRows( data ); doReturn( gaData ).when( query ).execute(); doReturn( tableItem ).when( table ).getItem( anyInt() ); tableView.table = table; doReturn( tableView ).when( dialog ).getTableView(); doCallRealMethod().when( dialog ).getFields(); doReturn( query ).when( dialog ).getPreviewQuery(); doReturn( mock( GaInputStepMeta.class ) ).when( dialog ).getInput(); } @Test public void testGetFields() throws Exception { dialog.getFields(); // Verify we do not read more data that needed verify( query ).setMaxResults( 1 ); // Verify we're reading fields correctly and filling that info into table verify( table, times( 19 ) ).getItem( anyInt() ); verify( tableItem, times( 7 ) ).setText( 1, GaInputStepMeta.FIELD_TYPE_DIMENSION ); verify( tableItem, times( 7 ) ).setText( 1, GaInputStepMeta.FIELD_TYPE_METRIC ); verify( tableItem, times( 3 ) ).setText( 1, GaInputStepMeta.FIELD_TYPE_DATA_SOURCE_PROPERTY ); verify( tableItem, times( 2 ) ).setText( 1, GaInputStepMeta.FIELD_TYPE_DATA_SOURCE_FIELD ); for ( ColumnHeaders header : headers ) { verify( tableItem, times( 1 ) ).setText( 2, header.getName() ); verify( tableItem, times( 1 ) ).setText( 3, header.getName() ); } verify( tableItem, times( 1 ) ).setText( 2, GaInputStepMeta.PROPERTY_DATA_SOURCE_PROFILE_ID ); verify( tableItem, times( 1 ) ).setText( 3, GaInputStepMeta.PROPERTY_DATA_SOURCE_PROFILE_ID ); verify( tableItem, times( 1 ) ).setText( 2, GaInputStepMeta.PROPERTY_DATA_SOURCE_WEBPROP_ID ); verify( tableItem, times( 1 ) ).setText( 3, GaInputStepMeta.PROPERTY_DATA_SOURCE_WEBPROP_ID ); verify( tableItem, times( 1 ) ).setText( 2, GaInputStepMeta.PROPERTY_DATA_SOURCE_ACCOUNT_NAME ); verify( tableItem, times( 1 ) ).setText( 3, GaInputStepMeta.PROPERTY_DATA_SOURCE_ACCOUNT_NAME ); verify( tableItem, times( 1 ) ).setText( 2, GaInputStepMeta.FIELD_DATA_SOURCE_TABLE_ID ); verify( tableItem, times( 1 ) ).setText( 3, GaInputStepMeta.FIELD_DATA_SOURCE_TABLE_ID ); verify( tableItem, times( 1 ) ).setText( 2, GaInputStepMeta.FIELD_DATA_SOURCE_TABLE_NAME ); verify( tableItem, times( 1 ) ).setText( 3, GaInputStepMeta.FIELD_DATA_SOURCE_TABLE_NAME ); verify( tableItem, times( 1 ) ).setText( 4, ValueMetaBase.getTypeDesc( ValueMetaInterface.TYPE_DATE ) ); verify( tableItem, times( 5 ) ).setText( 4, ValueMetaBase.getTypeDesc( ValueMetaInterface.TYPE_INTEGER ) ); verify( tableItem, times( 6 ) ).setText( 4, ValueMetaBase.getTypeDesc( ValueMetaInterface.TYPE_NUMBER ) ); verify( tableItem, times( 7 ) ).setText( 4, ValueMetaBase.getTypeDesc( ValueMetaInterface.TYPE_STRING ) ); } private ColumnHeaders createColumnHeader( String type, String name, String dataType ) { return new ColumnHeaders().setColumnType( type ).setName( name ).setDataType( dataType ); } }