package com.alorma.github.ui.activity; import imgurapiexample.imgurmodel.ImageResponse; import imgurapiexample.imgurmodel.Upload; import imgurapiexample.services.ImgurUpload; import java.io.File; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import rx.Observable; import rx.Scheduler; import rx.schedulers.Schedulers; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class ContentEditorPresenterTest { public static final String LINK = "http://aaa/aaa.png"; private Scheduler scheduler = Schedulers.immediate(); private static final String CLIENT_ID = "u09r92"; private ContentEditorPresenter contentEditorPresenter; @Mock ContentEditorPresenter.Callback callback; private ImageResponse validImageResponse; private File file; private ImgurTestApi imgurUpload; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); imgurUpload = spy(new ImgurTestApi()); file = File.createTempFile("aaa", "aaa"); contentEditorPresenter = new ContentEditorPresenter(CLIENT_ID, imgurUpload, scheduler, scheduler); contentEditorPresenter.setCallback(callback); validImageResponse = new ImageResponse(); validImageResponse.data = new ImageResponse.UploadedImage(); validImageResponse.data.link = LINK; validImageResponse.success = true; } @Test public void shouldCallShowImageLoading_WhenFileIsOk() throws Exception { Observable<ImageResponse> obs = Observable.just(validImageResponse); when(imgurUpload.uploadImage(any(Upload.class), anyString())).thenReturn(obs); contentEditorPresenter.uploadImageWithImgurAPI(file); verify(callback).showImageLoading(anyString()); } @Test public void shouldCallHideImageLoading_WhenFileIsOk() throws Exception { Observable<ImageResponse> obs = Observable.just(validImageResponse); when(imgurUpload.uploadImage(any(Upload.class), anyString())).thenReturn(obs); contentEditorPresenter.uploadImageWithImgurAPI(file); verify(callback).onImageUploaded(anyString(), anyString()); } @Test public void shouldCallAppendText_WhenFileIsOk() throws Exception { Observable<ImageResponse> obs = Observable.just(validImageResponse); when(imgurUpload.uploadImage(any(Upload.class), anyString())).thenReturn(obs); contentEditorPresenter.uploadImageWithImgurAPI(file); verify(callback).appendText(buildResult(file.getName())); } @Test public void shouldCallShowImageUploadError_WhenReturnsException() throws Exception { Observable<ImageResponse> obs = Observable.error(new Exception()); when(imgurUpload.uploadImage(any(Upload.class), anyString())).thenReturn(obs); contentEditorPresenter.uploadImageWithImgurAPI(null); verify(callback).showImageUploadError(null); } private String buildResult(String name) { return "\n" + "![" + name + "](" + LINK + ")" + "\n"; } private class ImgurTestApi extends ImgurUpload { @Override public Observable<ImageResponse> uploadImage(Upload upload, String clientId) { return Observable.just(validImageResponse); } } }