package com.kickstarter.viewmodels; import android.support.annotation.NonNull; import com.kickstarter.KSRobolectricTestCase; import com.kickstarter.factories.MessageThreadFactory; import com.kickstarter.libs.Environment; import com.kickstarter.models.MessageThread; import org.joda.time.DateTime; import org.junit.Test; import rx.observers.TestSubscriber; public final class MessageThreadHolderViewModelTest extends KSRobolectricTestCase { private MessageThreadHolderViewModel.ViewModel vm; private final TestSubscriber<DateTime> dateDateTime = new TestSubscriber<>(); private final TestSubscriber<String> messageBodyTextViewText = new TestSubscriber<>(); private final TestSubscriber<String> participantAvatarUrl = new TestSubscriber<>(); private final TestSubscriber<String> participantNameTextViewText = new TestSubscriber<>(); private final TestSubscriber<Boolean> unreadIndicatorImageViewHidden = new TestSubscriber<>(); private void setUpEnvironment(final @NonNull Environment env) { this.vm = new MessageThreadHolderViewModel.ViewModel(env); this.vm.outputs.dateDateTime().subscribe(dateDateTime); this.vm.outputs.messageBodyTextViewText().subscribe(messageBodyTextViewText); this.vm.outputs.participantAvatarUrl().subscribe(participantAvatarUrl); this.vm.outputs.participantNameTextViewText().subscribe(participantNameTextViewText); this.vm.outputs.unreadIndicatorImageViewHidden().subscribe(unreadIndicatorImageViewHidden); } @Test public void testEmitsDateTime() { final MessageThread messageThread = MessageThreadFactory.messageThread(); setUpEnvironment(environment()); // Configure the view model with a message thread. this.vm.inputs.configureWith(messageThread); this.dateDateTime.assertValues(messageThread.lastMessage().createdAt()); } @Test public void testEmitsMessageBodyTextViewText() { final MessageThread messageThread = MessageThreadFactory.messageThread(); setUpEnvironment(environment()); // Configure the view model with a message thread. this.vm.inputs.configureWith(messageThread); this.messageBodyTextViewText.assertValues(messageThread.lastMessage().body()); } @Test public void testEmitsParticipantData() { final MessageThread messageThread = MessageThreadFactory.messageThread(); setUpEnvironment(environment()); // Configure the view model with a message thread. this.vm.inputs.configureWith(messageThread); // Emits participant's avatar url and name. this.participantAvatarUrl.assertValues(messageThread.participant().avatar().medium()); this.participantNameTextViewText.assertValues(messageThread.participant().name()); } @Test public void testUnreadIndicator() { final MessageThread messageThread = MessageThreadFactory.messageThread(); setUpEnvironment(environment()); final MessageThread messageThreadWithUnread = messageThread .toBuilder() .unreadMessagesCount(2) .build(); final MessageThread messageThreadWithNoUnread = messageThread .toBuilder() .unreadMessagesCount(0) .build(); // Configure the view model with a message thread with unreads. this.vm.inputs.configureWith(messageThreadWithUnread); this.unreadIndicatorImageViewHidden.assertValues(false); // Configure the view model with a message thread with no unreads. this.vm.inputs.configureWith(messageThreadWithNoUnread); this.unreadIndicatorImageViewHidden.assertValues(false, true); } }