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.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; public class ConcurrentDownloadsLimitProviderTest { private static final String PACKAGE_NAME = "PACKAGE_NAME"; private static final String METADATA_MAX_CONCURRENT_DOWNLOADS = "com.novoda.downloadmanager.MaxConcurrentDownloads"; @Mock PackageManager packageManager; @Mock Bundle bundle; @Before public void setUp() { Log.setShowLogs(false); initMocks(this); } @Test public void givenANullMetadataBundleWhenTheLimitIsRetrievedThenTheDefaultValueIsUsed() throws Exception { when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenReturn(new StubApplicationInfo(null)); ConcurrentDownloadsLimitProvider provider = new ConcurrentDownloadsLimitProvider(packageManager, PACKAGE_NAME); int concurrentDownloadsLimit = provider.getConcurrentDownloadsLimit(); assertThat(concurrentDownloadsLimit).isEqualTo(5); } @Test public void givenAPackageNameWhichIsNotFoundWhenTheLimitIsRetrievedThenTheDefaultValueIsUsed() throws Exception { when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenThrow(new PackageManager.NameNotFoundException()); ConcurrentDownloadsLimitProvider provider = new ConcurrentDownloadsLimitProvider(packageManager, PACKAGE_NAME); int concurrentDownloadsLimit = provider.getConcurrentDownloadsLimit(); assertThat(concurrentDownloadsLimit).isEqualTo(5); } @Test public void givenANonNullBundleWhenTheLimitIsRetrievedThenTheValueFromTheBundleIsUsed() throws Exception { int expected = 8; when(bundle.getInt(eq(METADATA_MAX_CONCURRENT_DOWNLOADS), anyInt())).thenReturn(expected); when(packageManager.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA)).thenReturn(new StubApplicationInfo(bundle)); ConcurrentDownloadsLimitProvider provider = new ConcurrentDownloadsLimitProvider(packageManager, PACKAGE_NAME); int concurrentDownloadsLimit = provider.getConcurrentDownloadsLimit(); assertThat(concurrentDownloadsLimit).isEqualTo(expected); } static class StubApplicationInfo extends ApplicationInfo { StubApplicationInfo(Bundle metaData) { this.metaData = metaData; } } }