package com.kickstarter.viewmodels; import android.support.annotation.NonNull; import com.kickstarter.KSRobolectricTestCase; import com.kickstarter.factories.MessageThreadFactory; import com.kickstarter.factories.MessageThreadsEnvelopeFactory; import com.kickstarter.factories.UserFactory; import com.kickstarter.libs.Environment; import com.kickstarter.libs.utils.NumberUtils; import com.kickstarter.models.MessageThread; import com.kickstarter.models.User; import com.kickstarter.services.ApiClientType; import com.kickstarter.services.MockApiClient; import com.kickstarter.services.apiresponses.MessageThreadsEnvelope; import org.junit.Test; import java.util.Collections; import java.util.List; import rx.Observable; import rx.observers.TestSubscriber; public class MessageThreadsViewModelTest extends KSRobolectricTestCase { private MessageThreadsViewModel.ViewModel vm; private TestSubscriber<List<MessageThread>> messageThreads = new TestSubscriber<>(); private TestSubscriber<Boolean> unreadCountTextViewHidden = new TestSubscriber<>(); private TestSubscriber<String> unreadCountTextViewText = new TestSubscriber<>(); private void setUpEnvironment(final @NonNull Environment env) { this.vm = new MessageThreadsViewModel.ViewModel(env); this.vm.outputs.messageThreads().subscribe(this.messageThreads); this.vm.outputs.unreadCountTextViewHidden().subscribe(unreadCountTextViewHidden); this.vm.outputs.unreadCountTextViewText().subscribe(unreadCountTextViewText); } @Test public void testMessageThreadsEmit() { final MessageThreadsEnvelope envelope = MessageThreadsEnvelopeFactory.messageThreadsEnvelope() .toBuilder() .messageThreads(Collections.singletonList(MessageThreadFactory.messageThread())) .build(); final ApiClientType apiClient = new MockApiClient() { @Override public @NonNull Observable<MessageThreadsEnvelope> fetchMessageThreads() { return Observable.just(envelope); } }; setUpEnvironment(environment().toBuilder().apiClient(apiClient).build()); this.messageThreads.assertValueCount(1); } @Test public void testUnreadCountTextView_Hidden() { final User user = UserFactory.user().toBuilder().unreadMessagesCount(0).build(); final ApiClientType apiClient = new MockApiClient() { @Override public @NonNull Observable<User> fetchCurrentUser() { return Observable.just(user); } }; setUpEnvironment(environment().toBuilder().apiClient(apiClient).build()); // Unread count text view is hidden. this.unreadCountTextViewHidden.assertValues(true); this.unreadCountTextViewText.assertValues(NumberUtils.format(user.unreadMessagesCount())); } @Test public void testUnreadCountTextView_NotHidden() { final User user = UserFactory.user().toBuilder().unreadMessagesCount(3).build(); final ApiClientType apiClient = new MockApiClient() { @Override public @NonNull Observable<User> fetchCurrentUser() { return Observable.just(user); } }; setUpEnvironment(environment().toBuilder().apiClient(apiClient).build()); // Unread count text view is shown. this.unreadCountTextViewHidden.assertValues(false); this.unreadCountTextViewText.assertValues(NumberUtils.format(user.unreadMessagesCount())); } }