package de.jodamob.android.tracing;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.longThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Date;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import android.net.Uri;
import com.squareup.picasso.Downloader;
import com.squareup.picasso.Downloader.Response;
@RunWith(RobolectricTestRunner.class)
public class TracedPicassoDownloaderTest {
Tracer tracer;
Downloader downloader;
TracedPicassoDownloader tested;
@Before
public void setup() {
tracer = mock(Tracer.class);
downloader = mock(Downloader.class);
tested = new TracedPicassoDownloader(tracer, downloader);
}
@Test
public void should_report_status_code_and_url() throws IOException {
when(downloader.load(any(Uri.class), anyBoolean())).thenReturn(mock(Response.class));
tested.load(Uri.parse("http://jodamob.de"), false);
verify(tracer).trace(eq("http://jodamob.de"), eq(200), anyLong(), anyLong(), anyLong(), anyLong());
}
@Test
public void should_report_time_spent() throws IOException {
when(downloader.load(any(Uri.class), anyBoolean())).thenReturn(mock(Response.class));
long before = new Date().getTime();
tested.load(mock(Uri.class), false);
verify(tracer).trace(anyString(), anyInt(), longThat(greaterThanOrEqualTo(before)), anyLong(), anyLong(), anyLong());
}
@Test
public void should_report_status_errors() throws IOException {
when(downloader.load(any(Uri.class), anyBoolean())).thenThrow(new IOException(""));
try {
tested.load(Uri.parse("http://jodamob.de"), false);
fail("expected exception");
} catch(IOException e) {}
verify(tracer).trace(eq("http://jodamob.de"), anyLong(), anyLong(), any(IOException.class));
}
}