package com.turhanoz.android.reactivedirectorychooser.observer;
import com.turhanoz.android.reactivedirectorychooser.event.OperationFailedEvent;
import com.turhanoz.android.reactivedirectorychooser.event.UpdateDirectoryTreeEvent;
import com.turhanoz.android.reactivedirectorychooser.model.DirectoryTree;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.io.File;
import de.greenrobot.event.EventBus;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "library/src/main/AndroidManifest.xml", emulateSdk = 18)
public class MakeDirectoryObserverTest {
MakeDirectoryObserver sut;
EventBus mockBus;
DirectoryTree directoryTree;
@Before
public void setUp() throws Exception {
mockBus = mock(EventBus.class);
directoryTree = new DirectoryTree(mockBus);
sut = new MakeDirectoryObserver(directoryTree, mockBus);
}
@Test
public void onErrorShouldNotifyOperationFailedEvent() throws Exception {
sut.onError(new Exception());
verify(mockBus).post(any(OperationFailedEvent.class));
}
@Test
public void shouldNotifyUpdateDirectoryTreeEventWhenDirectoryCreationIsInCurrentFolder() throws Exception {
File stubRootDirectory = mock(File.class);
File stubCreatedDirectory = mock(File.class);
UpdateDirectoryTreeEvent expectedEvent = new UpdateDirectoryTreeEvent(stubRootDirectory);
when(stubRootDirectory.getAbsolutePath()).thenReturn("path");
when(stubCreatedDirectory.getParentFile()).thenReturn(stubRootDirectory);
directoryTree.setRootDirectoryAndNotify(stubRootDirectory);
sut.onNext(stubCreatedDirectory);
sut.onCompleted();
verify(mockBus).post(eq(expectedEvent));
}
@Test
public void shouldNotNotifyUpdateDirectoryTreeEventWhenDirectoryCreationIsInCurrentFolder() throws Exception {
File stubRootDirectory = mock(File.class);
File stubCreatedDirectory = mock(File.class);
File stubParentDirectorOfCreatedDirectory = mock(File.class);
when(stubRootDirectory.getAbsolutePath()).thenReturn("path");
when(stubParentDirectorOfCreatedDirectory.getAbsolutePath()).thenReturn("anotherPath");
when(stubCreatedDirectory.getParentFile()).thenReturn(stubParentDirectorOfCreatedDirectory);
directoryTree.setRootDirectoryAndNotify(stubRootDirectory);
sut.onNext(stubCreatedDirectory);
sut.onCompleted();
verify(mockBus, never()).post(eq(UpdateDirectoryTreeEvent.class));
}
}