package com.badoo.chateau.example.data.repos.session; import com.badoo.chateau.example.Broadcaster; import com.badoo.chateau.data.models.BaseUser; import com.badoo.chateau.example.data.util.ParseHelper; import com.badoo.unittest.ModelTestHelper; import com.badoo.unittest.rx.BaseRxTestCase; import com.parse.ParseUser; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import rx.Observable; import rx.observers.TestSubscriber; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ParseSessionDataSourceTest extends BaseRxTestCase { private static final String USER_ID = "userId"; private static final String USER_NAME = "username"; private static final String PASSWORD = "password"; private static final String DISPLAY_NAME = "displayName"; private ParseHelper mParseHelper; private Broadcaster mBroadcaster; private ParseSessionDataSource mTarget; @Before public void setup() { mParseHelper = mock(ParseHelper.class); mBroadcaster = mock(Broadcaster.class); mTarget = new ParseSessionDataSource(mBroadcaster, mParseHelper); } @Test public void signIn() { // Given ParseUser currentUser = ModelTestHelper.createParseUser(USER_ID); when(mParseHelper.signIn(USER_NAME, PASSWORD)).thenReturn(Observable.just(currentUser)); // When TestSubscriber<BaseUser> testSubscriber = executeTarget(mTarget.signIn(new SessionQuery.SignIn(USER_NAME, PASSWORD))); // Then assertThat(testSubscriber.getOnNextEvents().size(), is(1)); BaseUser user = testSubscriber.getOnNextEvents().get(0); assertEquals(USER_ID, user.getUserId()); testSubscriber.assertCompleted(); verify(mBroadcaster).userSignedIn(); } @Test public void register() { // Given ParseUser currentUser = ModelTestHelper.createParseUser(USER_ID); when(mParseHelper.signUp(eq(USER_NAME), eq(PASSWORD), any())).thenReturn(Observable.just(currentUser)); // When TestSubscriber<BaseUser> testSubscriber = executeTarget(mTarget.register(new SessionQuery.Register(USER_NAME, DISPLAY_NAME, PASSWORD))); // Then assertThat(testSubscriber.getOnNextEvents().size(), is(1)); BaseUser user = testSubscriber.getOnNextEvents().get(0); assertEquals(USER_ID, user.getUserId()); testSubscriber.assertCompleted(); verify(mBroadcaster).userSignedIn(); } @Test public void signOut() { // Given when(mParseHelper.signOut()).thenReturn(Observable.empty()); // When TestSubscriber<Void> testSubscriber = executeTarget(mTarget.signOut()); // Then testSubscriber.assertCompleted(); verify(mBroadcaster).userSignedOut(); } }