@Provides UsersDataMonitoringManager usersDataMonitoringManager(UsersRetriever usersRetriever, BackgroundThreadPoster backgroundThreadPoster, UiThreadPoster uiThreadPoster) { return new UsersDataMonitoringManager(usersRetriever, backgroundThreadPoster, uiThreadPoster); }
@Subscribe public void onUserDataChanged(UserDataChangedEvent event) { fetchUserByIdAndNotifyIfExists(event.getUserId()); }
@Override public void onStart() { super.onStart(); mUsersDataMonitoringManager.registerListener(this); fetchDataOfActiveUser(); }
@Test public void fetchUserByIdAndNotifyIfExists_userDoesntExist_listenersNotNotified() { // Arrange returnNullFromRetrieverForAnyUserId(); // Act SUT.registerListener(mUsersDataMonitorListenerMock); SUT.fetchUserByIdAndNotifyIfExists(TEST_USER_ID); mThreadPostersTestDouble.join(); // Assert verify(mUsersRetrieverMock, times(1)).getUserById(mStringCaptor.capture()); verifyNoMoreInteractions(mUsersRetrieverMock); assertThat(mStringCaptor.getValue(), is(TEST_USER_ID)); verifyNoMoreInteractions(mUsersDataMonitorListenerMock); }
@Test public void onUserDataChanged_userDoesntExist_listenersNotNotified() { // Arrange returnNullFromRetrieverForAnyUserId(); // Act SUT.registerListener(mUsersDataMonitorListenerMock); SUT.onUserDataChanged(new UserDataChangedEvent(TEST_USER_ID)); mThreadPostersTestDouble.join(); // Assert verify(mUsersRetrieverMock, times(1)).getUserById(mStringCaptor.capture()); verifyNoMoreInteractions(mUsersRetrieverMock); assertThat(mStringCaptor.getValue(), is(TEST_USER_ID)); verifyNoMoreInteractions(mUsersDataMonitorListenerMock); }
@Override public void onStop() { super.onStop(); mUsersDataMonitoringManager.unregisterListener(this); }
@WorkerThread private void fetchUserByIdAndNotifyIfExistsSync(String userId) { UserEntity userEntity = mUsersRetriever.getUserById(userId); if (userEntity != null) { notifyUserDataFetched(userEntity); } }
@Test public void fetchUserByIdAndNotifyIfExists_userExists_listenersNotifiedWithCorrectData() { // Arrange returnEntityMockFromRetrieverForAnyUserId(); // Act SUT.registerListener(mUsersDataMonitorListenerMock); SUT.fetchUserByIdAndNotifyIfExists(TEST_USER_ID); mThreadPostersTestDouble.join(); // Assert verify(mUsersRetrieverMock, times(1)).getUserById(mStringCaptor.capture()); verifyNoMoreInteractions(mUsersRetrieverMock); assertThat(mStringCaptor.getValue(), is(TEST_USER_ID)); verify(mUsersDataMonitorListenerMock, times(1)).onUserDataChange(mUserCaptor.capture()); verifyNoMoreInteractions(mUsersDataMonitorListenerMock); assertThat(mUserCaptor.getValue(), is(mEntityMock)); }
@Test public void onUserDataChanged_userExists_listenersNotifiedWithCorrectData() { // Arrange returnEntityMockFromRetrieverForAnyUserId(); // Act SUT.registerListener(mUsersDataMonitorListenerMock); SUT.onUserDataChanged(new UserDataChangedEvent(TEST_USER_ID)); mThreadPostersTestDouble.join(); // Assert verify(mUsersRetrieverMock, times(1)).getUserById(mStringCaptor.capture()); verifyNoMoreInteractions(mUsersRetrieverMock); assertThat(mStringCaptor.getValue(), is(TEST_USER_ID)); verify(mUsersDataMonitorListenerMock, times(1)).onUserDataChange(mUserCaptor.capture()); verifyNoMoreInteractions(mUsersDataMonitorListenerMock); assertThat(mUserCaptor.getValue(), is(mEntityMock)); }
@Before public void setup() throws Exception { SUT = new UsersDataMonitoringManager( mUsersRetrieverMock, mThreadPostersTestDouble.getBackgroundTestDouble(), mThreadPostersTestDouble.getUiTestDouble()); }
private void fetchDataOfActiveUser() { String activeUserId = mLoginStateManager.getLoggedInUser().getUserId(); if (activeUserId != null && !activeUserId.isEmpty()) { // notify the view that there is a logged in user mViewMvc.bindUserData(UserEntity.newBuilder().setUserId(activeUserId).build()); // fetch user's info mUsersDataMonitoringManager.fetchUserByIdAndNotifyIfExists(activeUserId); } else { // no active user mViewMvc.bindUserData(null); } }