package com.novoda.downloadmanager.lib; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import com.novoda.notils.logger.simple.Log; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; public class DatabaseFilenameProviderTest { private static final String PACKAGE_NAME = "PACKAGE_NAME"; private static final String DATABASE_FILENAME = "com.novoda.downloadmanager.DatabaseFilename"; private static final String DEFAULT_FILENAME = "DEFAULT_FILENAME"; @Mock PackageManager packageManager; @Mock Bundle bundle; @Before public void setUp() { Log.setShowLogs(false); initMocks(this); } @Test public void givenANullMetadataBundleWhenTheFilenameIsRetrievedThenTheDefaultValueIsUsed() throws Exception { when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenReturn(new StubApplicationInfo(null)); DatabaseFilenameProvider provider = new DatabaseFilenameProvider(packageManager, PACKAGE_NAME, DEFAULT_FILENAME); String filename = provider.getDatabaseFilename(); assertThat(filename).isEqualTo(DEFAULT_FILENAME); } @Test public void givenAPackageNameWhichIsNotFoundWhenTheFilenameIsRetrievedThenTheDefaultValueIsUsed() throws Exception { when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenThrow(new PackageManager.NameNotFoundException()); DatabaseFilenameProvider provider = new DatabaseFilenameProvider(packageManager, PACKAGE_NAME, DEFAULT_FILENAME); String filename = provider.getDatabaseFilename(); assertThat(filename).isEqualTo(DEFAULT_FILENAME); } @Test public void givenANonNullBundleWhenTheFilenameIsRetrievedThenTheValueFromTheBundleIsUsed() throws Exception { String expected = "my_database.db"; when(bundle.getString(eq(DATABASE_FILENAME), anyString())).thenReturn(expected); when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenReturn(new StubApplicationInfo(bundle)); DatabaseFilenameProvider provider = new DatabaseFilenameProvider(packageManager, PACKAGE_NAME, DEFAULT_FILENAME); String filename = provider.getDatabaseFilename(); assertThat(filename).isEqualTo(expected); } static class StubApplicationInfo extends ApplicationInfo { StubApplicationInfo(Bundle metaData) { this.metaData = metaData; } } }