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;
}
}
}