/*! ****************************************************************************** * * 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.starmodeler; import org.junit.Test; import org.pentaho.metadata.model.LogicalColumn; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.metadata.model.LogicalTable; import org.pentaho.metadata.model.concept.Concept; import org.pentaho.metadata.model.concept.types.DataType; import org.pentaho.metadata.model.concept.types.FieldType; import org.pentaho.metadata.model.concept.types.LocalizedString; import org.pentaho.metadata.model.concept.types.TableType; import org.pentaho.pms.schema.concept.DefaultPropertyID; import java.util.LinkedList; import java.util.List; import java.util.Locale; import static org.junit.Assert.*; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; public class ConceptUtilTest { private String locale = Locale.UK.toString(); @Test public void testGetDescription() throws Exception { final Concept concept = mock( Concept.class ); final LocalizedString localizedString = mock( LocalizedString.class ); final String result = "result"; when( localizedString.getLocalizedString( eq( locale ) ) ).thenReturn( result ); when( concept.getProperty( anyString() ) ).thenReturn( localizedString ); final String description = ConceptUtil.getDescription( concept, locale ); verify( localizedString, times( 1 ) ).getLocalizedString( eq( locale ) ); assertEquals( result, description ); } @Test public void testGetName() throws Exception { final Concept concept = mock( Concept.class ); final LocalizedString localizedString = mock( LocalizedString.class ); final String result = "result"; when( localizedString.getLocalizedString( eq( locale ) ) ).thenReturn( result ); when( concept.getProperty( anyString() ) ).thenReturn( localizedString ); final String name = ConceptUtil.getName( concept, locale ); verify( localizedString, times( 1 ) ).getLocalizedString( eq( locale ) ); assertEquals( result, name ); } @Test public void testGetTableTypeConcept() throws Exception { final Concept concept = mock( Concept.class ); TableType tableType = ConceptUtil.getTableType( concept ); assertEquals( TableType.OTHER, tableType ); final TableType result = TableType.FACT; when( concept.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( result ); tableType = ConceptUtil.getTableType( concept ); assertEquals( result, tableType ); } @Test public void testGetTableTypeString() throws Exception { TableType tableType = ConceptUtil.getTableType( "" ); assertEquals( TableType.OTHER, tableType ); final TableType result = TableType.FACT; tableType = ConceptUtil.getTableType( result.name() ); assertEquals( result, tableType ); } @Test public void testGetString() throws Exception { final Concept concept = mock( Concept.class ); final String id = "id"; final String result = "result"; when( concept.getProperty( eq( id ) ) ).thenReturn( result ); final String string = ConceptUtil.getString( concept, id ); assertEquals( result, string ); } @Test public void testFindFirstKeyColumn() throws Exception { final LogicalTable logicalTable = mock( LogicalTable.class ); assertNull( ConceptUtil.findFirstKeyColumn( logicalTable ) ); final LogicalColumn logicalColumn = mock( LogicalColumn.class ); final LogicalColumn logicalColumnKey1 = mock( LogicalColumn.class ); final LogicalColumn logicalColumnKey2 = mock( LogicalColumn.class ); when( logicalColumnKey1.getFieldType() ).thenReturn( FieldType.KEY ); when( logicalColumnKey2.getFieldType() ).thenReturn( FieldType.KEY ); when( logicalTable.getLogicalColumns() ).thenReturn( new LinkedList<LogicalColumn>() { { add( logicalColumn ); add( logicalColumnKey1 ); add( logicalColumnKey2 ); } } ); final LogicalColumn firstKeyColumn = ConceptUtil.findFirstKeyColumn( logicalTable ); assertEquals( logicalColumnKey1, firstKeyColumn ); } @Test public void testGetDimensionType() throws Exception { final LogicalTable logicalTable = mock( LogicalTable.class ); final DimensionType dtDate = DimensionType.DATE; when( logicalTable.getProperty( DefaultIDs.LOGICAL_TABLE_DIMENSION_TYPE ) ).thenReturn( dtDate.name() ); final DimensionType dimensionType = ConceptUtil.getDimensionType( logicalTable ); assertEquals( dtDate, dimensionType ); } @Test public void testGetAttributeType() throws Exception { final LogicalColumn logicalColumn = mock( LogicalColumn.class ); final AttributeType attribute = AttributeType.ATTRIBUTE; when( logicalColumn.getProperty( DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE ) ).thenReturn( attribute.name() ); final AttributeType attributeType = ConceptUtil.getAttributeType( logicalColumn ); assertEquals( attribute, attributeType ); } @Test public void testFindLogicalColumn() throws Exception { final LogicalTable logicalTable = mock( LogicalTable.class ); final AttributeType attribute = AttributeType.ATTRIBUTE; final LogicalColumn logicalColumn1 = mock( LogicalColumn.class ); when( logicalColumn1.getProperty( DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE ) ).thenReturn( attribute.name() ); final LogicalColumn logicalColumn2 = mock( LogicalColumn.class ); when( logicalColumn2.getProperty( DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE ) ).thenReturn( attribute.name() ); when( logicalTable.getLogicalColumns() ).thenReturn( new LinkedList<LogicalColumn>() { { add( logicalColumn1 ); add( logicalColumn2 ); } } ); assertNull( ConceptUtil.findLogicalColumn( logicalTable, AttributeType.ATTRIBUTE_HISTORICAL ) ); final LogicalColumn result = ConceptUtil.findLogicalColumn( logicalTable, attribute ); assertEquals( logicalColumn1, result ); } @Test public void testFindLogicalColumns() throws Exception { final LogicalTable logicalTable = mock( LogicalTable.class ); final AttributeType attribute = AttributeType.ATTRIBUTE; final LogicalColumn logicalColumn1 = mock( LogicalColumn.class ); when( logicalColumn1.getProperty( DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE ) ).thenReturn( attribute.name() ); final LogicalColumn logicalColumn2 = mock( LogicalColumn.class ); when( logicalColumn2.getProperty( DefaultIDs.LOGICAL_COLUMN_ATTRIBUTE_TYPE ) ).thenReturn( attribute.name() ); when( logicalTable.getLogicalColumns() ).thenReturn( new LinkedList<LogicalColumn>() { { add( logicalColumn1 ); add( logicalColumn2 ); } } ); assertTrue( ConceptUtil.findLogicalColumns( logicalTable, AttributeType.ATTRIBUTE_HISTORICAL ).isEmpty() ); final List<LogicalColumn> logicalColumns = ConceptUtil.findLogicalColumns( logicalTable, attribute ); assertEquals( 2, logicalColumns.size() ); assertEquals( logicalColumn1, logicalColumns.get( 0 ) ); assertEquals( logicalColumn2, logicalColumns.get( 1 ) ); } @Test public void testFindLogicalTables() throws Exception { final LogicalModel logicalModel = mock( LogicalModel.class ); final TableType dimension = TableType.DIMENSION; final LogicalTable logicalTable1 = mock( LogicalTable.class ); when( logicalTable1.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( dimension ); final LogicalTable logicalTable2 = mock( LogicalTable.class ); when( logicalTable2.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.FACT ); final LogicalTable logicalTable3 = mock( LogicalTable.class ); when( logicalTable3.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( dimension ); when( logicalModel.getLogicalTables() ).thenReturn( new LinkedList<LogicalTable>() { { add( logicalTable1 ); add( logicalTable2 ); add( logicalTable3 ); } } ); final List<LogicalTable> logicalTables = ConceptUtil.findLogicalTables( logicalModel, dimension ); assertEquals( 2, logicalTables.size() ); assertEquals( logicalTable1, logicalTables.get( 0 ) ); assertEquals( logicalTable3, logicalTables.get( 1 ) ); } @Test public void testIndexOfFactTable() throws Exception { final LogicalModel logicalModel = mock( LogicalModel.class ); final LogicalTable logicalTable1 = mock( LogicalTable.class ); when( logicalTable1.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.DIMENSION ); final LogicalTable logicalTable2 = mock( LogicalTable.class ); when( logicalTable2.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.FACT ); final LogicalTable logicalTable3 = mock( LogicalTable.class ); when( logicalTable3.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.DIMENSION ); when( logicalModel.getLogicalTables() ).thenReturn( new LinkedList<LogicalTable>() { { add( logicalTable1 ); add( logicalTable2 ); add( logicalTable3 ); } } ); final int indexOfFactTable = ConceptUtil.indexOfFactTable( logicalModel ); assertEquals( 1, indexOfFactTable ); } @Test public void testFindDimensionWithName() throws Exception { final LogicalModel logicalModel = mock( LogicalModel.class ); final String dn = "dn"; final LogicalTable logicalTable1 = mock( LogicalTable.class ); when( logicalTable1.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.DIMENSION ); when( logicalTable1.getProperty( eq( Concept.NAME_PROPERTY ) ) ) .thenReturn( new LocalizedString( locale, "wrong name" ) ); final LogicalTable logicalTable2 = mock( LogicalTable.class ); when( logicalTable2.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.FACT ); final LogicalTable logicalTable3 = mock( LogicalTable.class ); when( logicalTable3.getProperty( eq( DefaultPropertyID.TABLE_TYPE.getId() ) ) ).thenReturn( TableType.DIMENSION ); when( logicalTable3.getProperty( eq( Concept.NAME_PROPERTY ) ) ).thenReturn( new LocalizedString( locale, dn ) ); when( logicalModel.getLogicalTables() ).thenReturn( new LinkedList<LogicalTable>() { { add( logicalTable1 ); add( logicalTable2 ); add( logicalTable3 ); } } ); assertNull( ConceptUtil.findDimensionWithName( logicalModel, dn, "other_locale" ) ); assertNull( ConceptUtil.findDimensionWithName( logicalModel, "dn2", locale ) ); final LogicalTable dimensionWithName = ConceptUtil.findDimensionWithName( logicalModel, dn, locale ); assertEquals( logicalTable3, dimensionWithName ); } @Test public void testGetDataType() throws Exception { assertEquals( DataType.UNKNOWN, ConceptUtil.getDataType( "" ) ); assertEquals( DataType.BINARY, ConceptUtil.getDataType( DataType.BINARY.name() ) ); } }