package com.novoda.downloadmanager.lib; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.Collections; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @RunWith(MockitoJUnitRunner.class) public class BatchRetrievalRepositoryTest { @Mock private ContentResolver mockContentResolver; @Mock private FileDownloadInfo mockFileDownloadInfo; @Mock private DownloadsUriProvider mockDownloadsUriProvider; @Mock private Uri mockUri; private BatchRetrievalRepository batchRetrievalRepository; @Before public void setUp() { initMocks(this); when(mockDownloadsUriProvider.getBatchesUri()).thenReturn(mockUri); when(mockDownloadsUriProvider.getAllDownloadsUri()).thenReturn(mockUri); batchRetrievalRepository = new BatchRetrievalRepository(mockContentResolver, mockDownloadsUriProvider); } @Test public void givenADownloadInfoWhenRetrievingTheBatchThenTheBatchIdsMatch() { long expectedBatchId = 100L; when(mockFileDownloadInfo.getBatchId()).thenReturn(expectedBatchId); Cursor batchCursor = new MockCursorWithBatchIds(Collections.singletonList(expectedBatchId)); when(mockContentResolver.query(any(Uri.class), any(String[].class), anyString(), any(String[].class), anyString())).thenReturn(batchCursor); DownloadBatch downloadBatch = batchRetrievalRepository.retrieveBatchFor(mockFileDownloadInfo); assertThat(downloadBatch.getBatchId()).isEqualTo(expectedBatchId); } @Test public void givenADownloadInfoAndNoLinkedBatchesWhenRetrievingTheBatchThenTheBatchIsDeleted() { long batchIdToBeMissing = 100L; when(mockFileDownloadInfo.getBatchId()).thenReturn(batchIdToBeMissing); Cursor emptyBatchCursor = mock(Cursor.class); when(mockContentResolver.query(any(Uri.class), any(String[].class), anyString(), any(String[].class), anyString())).thenReturn(emptyBatchCursor); DownloadBatch downloadBatch = batchRetrievalRepository.retrieveBatchFor(mockFileDownloadInfo); assertThat(downloadBatch).isEqualTo(DownloadBatch.DELETED); } @Test public void givenABatchQueryWhenQueryingThenTheQueryIsUsed() { BatchQuery query = new BatchQuery.Builder().withId(12).build(); batchRetrievalRepository.retrieveFor(query); String selection = query.getSelection(); String[] selectionArguments = query.getSelectionArguments(); String sortOrder = query.getSortOrder(); verify(mockContentResolver).query(any(Uri.class), any(String[].class), eq(selection), eq(selectionArguments), eq(sortOrder)); } }