/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.commons.system; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.pentaho.database.IDatabaseDialect; import org.pentaho.database.dialect.AbstractDatabaseDialect; import org.pentaho.database.model.IDatabaseType; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.function.Function; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Created by bryan on 5/10/16. */ @RunWith( MockitoJUnitRunner.class ) public class PentahoSystemDatabaseDialectProviderTest { @Mock AbstractDatabaseDialect unusableDatabaseDialect; @Mock IDatabaseType unusableDatabaseType; @Mock IDatabaseDialect unusableIDialect; @Mock IDatabaseType unusableIDialectType; @Mock AbstractDatabaseDialect usableDatabaseDialect; @Mock IDatabaseType usableDatabaseType; @Mock IDatabaseDialect usableIDialect; @Mock IDatabaseType usableIDialectType; List<IDatabaseDialect> databaseDialects; PentahoSystemDatabaseDialectProvider pentahoSystemDatabaseDialectProvider; @Before public void setup() { when( unusableDatabaseDialect.getDatabaseType() ).thenReturn( unusableDatabaseType ); when( unusableDatabaseDialect.isUsable() ).thenReturn( false ); when( usableDatabaseDialect.getDatabaseType() ).thenReturn( usableDatabaseType ); when( usableDatabaseDialect.isUsable() ).thenReturn( true ); when( unusableIDialect.getDatabaseType() ).thenReturn( unusableIDialectType ); when( unusableIDialect.getNativeDriver() ).thenReturn( "fake.class" ); when( usableIDialect.getDatabaseType() ).thenReturn( usableIDialectType ); when( usableIDialect.getNativeDriver() ).thenReturn( Object.class.getCanonicalName() ); Function<Class<IDatabaseDialect>, List<IDatabaseDialect>> dialectGetter = mock( Function.class ); databaseDialects = new ArrayList<>( Arrays.asList( unusableDatabaseDialect, unusableIDialect, usableDatabaseDialect, usableIDialect ) ); when( dialectGetter.apply( IDatabaseDialect.class ) ).thenReturn( databaseDialects ); pentahoSystemDatabaseDialectProvider = new PentahoSystemDatabaseDialectProvider( dialectGetter ); } @Test public void testNoArgConstructor() { assertNotNull( new PentahoSystemDatabaseDialectProvider() ); } @Test public void testGetDialectsUsableOnly() { Collection<IDatabaseDialect> dialects = pentahoSystemDatabaseDialectProvider.getDialects( true ); assertEquals( 2, dialects.size() ); Iterator<IDatabaseDialect> iterator = dialects.iterator(); assertEquals( usableDatabaseDialect, iterator.next() ); assertEquals( usableIDialect, iterator.next() ); } @Test public void testGetDialectsAll() { Collection<IDatabaseDialect> dialects = pentahoSystemDatabaseDialectProvider.getDialects( false ); assertEquals( 4, dialects.size() ); Iterator<IDatabaseDialect> iterator = dialects.iterator(); assertEquals( unusableDatabaseDialect, iterator.next() ); assertEquals( unusableIDialect, iterator.next() ); assertEquals( usableDatabaseDialect, iterator.next() ); assertEquals( usableIDialect, iterator.next() ); } @Test public void testGetDialectUsableOnly() { assertEquals( usableDatabaseDialect, pentahoSystemDatabaseDialectProvider.getDialect( true, usableDatabaseType ) ); assertEquals( usableIDialect, pentahoSystemDatabaseDialectProvider.getDialect( true, usableIDialectType ) ); assertNull( pentahoSystemDatabaseDialectProvider.getDialect( true, unusableDatabaseType ) ); assertNull( pentahoSystemDatabaseDialectProvider.getDialect( true, unusableIDialectType ) ); } @Test public void testGetDialectAll() { assertEquals( usableDatabaseDialect, pentahoSystemDatabaseDialectProvider.getDialect( false, usableDatabaseType ) ); assertEquals( usableIDialect, pentahoSystemDatabaseDialectProvider.getDialect( false, usableIDialectType ) ); assertEquals( unusableDatabaseDialect, pentahoSystemDatabaseDialectProvider.getDialect( false, unusableDatabaseType ) ); assertEquals( unusableIDialect, pentahoSystemDatabaseDialectProvider.getDialect( false, unusableIDialectType ) ); assertNull( pentahoSystemDatabaseDialectProvider.getDialect( false, mock( IDatabaseType.class ) ) ); assertNull( pentahoSystemDatabaseDialectProvider.getDialect( false, null ) ); } }