diff --git a/app/src/test/java/io/intrepid/skeleton/base/BasePresenterTest.java b/app/src/test/java/io/intrepid/skeleton/base/BasePresenterTest.java new file mode 100644 index 0000000..7c15866 --- /dev/null +++ b/app/src/test/java/io/intrepid/skeleton/base/BasePresenterTest.java @@ -0,0 +1,77 @@ +package io.intrepid.skeleton.base; + +import android.support.annotation.NonNull; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; + +import io.intrepid.skeleton.testutils.PresenterTestBase; +import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class BasePresenterTest extends PresenterTestBase> { + @Mock + private BaseContract.View view; + + private Disposable disposable; + + @Before + public void setUp() { + presenter = spy(new TestPresenter(view, testConfiguration)); + } + + @Test + public void bind_onlyOnce() throws Exception { + presenter.bindView(view); + presenter.bindView(view); + assertEquals(view, presenter.view); + verify(presenter, times(1)).onViewBound(); + } + + @Test + public void unbind_onlyOnce() throws Exception { + presenter.bindView(view); + presenter.unbindView(); + presenter.unbindView(); + verify(presenter, times(1)).onViewUnbound(); + } + + @Test + public void unbind_notBeforeBind() throws Exception { + presenter.unbindView(); + verify(presenter, never()).onViewUnbound(); + } + + @Test + public void unbind_clearsDisposables() { + presenter.bindView(view); + assertFalse(disposable.isDisposed()); + + presenter.unbindView(); + assertTrue(disposable.isDisposed()); + } + + private class TestPresenter extends BasePresenter { + + TestPresenter(@NonNull BaseContract.View view, + @NonNull PresenterConfiguration configuration) { + super(view, configuration); + } + + @Override + protected void onViewBound() { + disposable = Observable.never().subscribe(); + disposables.add(disposable); + } + } + +} diff --git a/app/src/test/java/io/intrepid/skeleton/screens/example1/Example1PresenterTest.java b/app/src/test/java/io/intrepid/skeleton/screens/example1/Example1PresenterTest.java index 69ae48e..701dfa5 100644 --- a/app/src/test/java/io/intrepid/skeleton/screens/example1/Example1PresenterTest.java +++ b/app/src/test/java/io/intrepid/skeleton/screens/example1/Example1PresenterTest.java @@ -4,11 +4,11 @@ import org.junit.Test; import org.mockito.Mock; -import io.intrepid.skeleton.testutils.BasePresenterTest; +import io.intrepid.skeleton.testutils.PresenterTestBase; import static org.mockito.Mockito.verify; -public class Example1PresenterTest extends BasePresenterTest { +public class Example1PresenterTest extends PresenterTestBase { @Mock Example1Contract.View mockView; diff --git a/app/src/test/java/io/intrepid/skeleton/screens/example2/Example2PresenterTest.java b/app/src/test/java/io/intrepid/skeleton/screens/example2/Example2PresenterTest.java index 8db4bbd..ff6e876 100644 --- a/app/src/test/java/io/intrepid/skeleton/screens/example2/Example2PresenterTest.java +++ b/app/src/test/java/io/intrepid/skeleton/screens/example2/Example2PresenterTest.java @@ -5,13 +5,13 @@ import org.mockito.Mock; import io.intrepid.skeleton.models.IpModel; -import io.intrepid.skeleton.testutils.BasePresenterTest; +import io.intrepid.skeleton.testutils.PresenterTestBase; import io.reactivex.Single; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class Example2PresenterTest extends BasePresenterTest { +public class Example2PresenterTest extends PresenterTestBase { @Mock Example2Contract.View mockView; diff --git a/app/src/test/java/io/intrepid/skeleton/testutils/BasePresenterTest.java b/app/src/test/java/io/intrepid/skeleton/testutils/PresenterTestBase.java similarity index 95% rename from app/src/test/java/io/intrepid/skeleton/testutils/BasePresenterTest.java rename to app/src/test/java/io/intrepid/skeleton/testutils/PresenterTestBase.java index 2e129a2..e689ac4 100644 --- a/app/src/test/java/io/intrepid/skeleton/testutils/BasePresenterTest.java +++ b/app/src/test/java/io/intrepid/skeleton/testutils/PresenterTestBase.java @@ -11,7 +11,7 @@ import io.intrepid.skeleton.settings.UserSettings; import io.reactivex.schedulers.TestScheduler; -public class BasePresenterTest

{ +public class PresenterTestBase

{ @Rule public MockitoRule mockitoRule = MockitoJUnit.rule();