/*! ******************************************************************************
*
* 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.metastore;
import org.junit.Test;
import org.pentaho.metadata.model.LogicalTable;
import org.pentaho.metastore.api.IMetaStore;
import org.pentaho.metastore.api.IMetaStoreAttribute;
import org.pentaho.metastore.api.IMetaStoreElement;
import org.pentaho.metastore.api.IMetaStoreElementType;
import java.util.Locale;
import static org.junit.Assert.*;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
public class SharedDimensionMetaStoreUtilTest {
@Test
public void testSaveSharedDimension() throws Exception {
final String locale = Locale.US.toString();
final IMetaStore metaStore = mock( IMetaStore.class );
final IMetaStoreElementType metaStoreElementType = mock( IMetaStoreElementType.class );
when( metaStore.newElementType( anyString() ) ).thenReturn( metaStoreElementType );
final IMetaStoreElement metaStoreElement = mock( IMetaStoreElement.class );
final String sdId = "sdId";
when( metaStore.getElement( anyString(), eq( metaStoreElementType ), eq( sdId ) ) ).thenReturn( metaStoreElement );
final LogicalTable sharedDimension = mock( LogicalTable.class );
final String sdName = "sdName";
when( sharedDimension.getName( eq( locale ) ) ).thenReturn( sdName );
when( sharedDimension.getId() ).thenReturn( sdId );
SharedDimensionMetaStoreUtil.saveSharedDimension( metaStore, sharedDimension, locale );
verify( metaStoreElement, times( 1 ) ).setElementType( eq( metaStoreElementType ) );
verify( metaStoreElement, times( 1 ) ).setName( eq( sdName ) );
verify( metaStoreElement, times( 2 ) ).addChild( any( IMetaStoreAttribute.class ) );
verify( metaStore, times( 1 ) )
.updateElement( anyString(), eq( metaStoreElementType ), eq( sdId ), eq( metaStoreElement ) );
verify( sharedDimension, times( 1 ) ).setId( anyString() );
}
@Test
public void testGetSharedDimensionElementTypeNew() throws Exception {
final IMetaStore metaStore = mock( IMetaStore.class );
final IMetaStoreElementType metaStoreElementType = mock( IMetaStoreElementType.class );
when( metaStore.newElementType( anyString() ) ).thenReturn( metaStoreElementType );
final IMetaStoreElementType sharedDimensionElementType = SharedDimensionMetaStoreUtil
.getSharedDimensionElementType( metaStore );
verify( metaStore, times( 1 ) ).createNamespace( anyString() );
assertNotNull( sharedDimensionElementType );
assertEquals( metaStoreElementType, sharedDimensionElementType );
verify( sharedDimensionElementType, times( 1 ) )
.setName( eq( SharedDimensionMetaStoreUtil.METASTORE_SHARED_DIMENSION_TYPE_NAME ) );
verify( sharedDimensionElementType, times( 1 ) )
.setDescription( eq( SharedDimensionMetaStoreUtil.METASTORE_SHARED_DIMENSION_TYPE_DESCRIPTION ) );
verify( metaStore, times( 1 ) ).createElementType( anyString(), eq( sharedDimensionElementType ) );
}
@Test
public void testGetSharedDimensionElementTypeExist() throws Exception {
final IMetaStore metaStore = mock( IMetaStore.class );
final IMetaStoreElementType metaStoreElementType = mock( IMetaStoreElementType.class );
when( metaStore
.getElementTypeByName( anyString(), eq( SharedDimensionMetaStoreUtil.METASTORE_SHARED_DIMENSION_TYPE_NAME ) ) )
.thenReturn( metaStoreElementType );
final IMetaStoreElementType sharedDimensionElementType = SharedDimensionMetaStoreUtil
.getSharedDimensionElementType( metaStore );
verify( metaStore, times( 1 ) ).createNamespace( anyString() );
assertNotNull( sharedDimensionElementType );
assertEquals( metaStoreElementType, sharedDimensionElementType );
verify( sharedDimensionElementType, never() )
.setName( eq( SharedDimensionMetaStoreUtil.METASTORE_SHARED_DIMENSION_TYPE_NAME ) );
verify( sharedDimensionElementType, never() )
.setDescription( eq( SharedDimensionMetaStoreUtil.METASTORE_SHARED_DIMENSION_TYPE_DESCRIPTION ) );
verify( metaStore, never() ).createElementType( anyString(), eq( sharedDimensionElementType ) );
}
}