package com.kickstarter.viewmodels;
import android.support.annotation.NonNull;
import com.kickstarter.KSRobolectricTestCase;
import com.kickstarter.R;
import com.kickstarter.factories.MessageFactory;
import com.kickstarter.factories.UserFactory;
import com.kickstarter.libs.Environment;
import com.kickstarter.libs.MockCurrentUser;
import com.kickstarter.models.Message;
import com.kickstarter.models.User;
import org.junit.Test;
import rx.observers.TestSubscriber;
public final class MessageHolderViewModelTest extends KSRobolectricTestCase {
private MessageHolderViewModel.ViewModel vm;
private final TestSubscriber<Boolean> participantAvatarImageHidden = new TestSubscriber<>();
private final TestSubscriber<String> participantAvatarImageUrl = new TestSubscriber<>();
private final TestSubscriber<Boolean> messageBodyTextViewAlignParentEnd = new TestSubscriber<>();
private final TestSubscriber<Integer> messageBodyTextViewBackgroundColorInt = new TestSubscriber<>();
private final TestSubscriber<String> messageBodyTextViewText = new TestSubscriber<>();
private final TestSubscriber<Integer> messageBodyTextViewTextColorInt = new TestSubscriber<>();
private void setUpEnvironment(final @NonNull Environment environment) {
this.vm = new MessageHolderViewModel.ViewModel(environment);
this.vm.outputs.participantAvatarImageHidden().subscribe(this.participantAvatarImageHidden);
this.vm.outputs.participantAvatarImageUrl().subscribe(this.participantAvatarImageUrl);
this.vm.outputs.messageBodyCardViewAlignParentEnd().subscribe(this.messageBodyTextViewAlignParentEnd);
this.vm.outputs.messageBodyTextViewBackgroundColorInt().subscribe(this.messageBodyTextViewBackgroundColorInt);
this.vm.outputs.messageBodyTextViewText().subscribe(this.messageBodyTextViewText);
this.vm.outputs.messageBodyTextViewTextColorInt().subscribe(this.messageBodyTextViewTextColorInt);
}
@Test
public void testEmitsMessageBody() {
final Message message = MessageFactory.message();
setUpEnvironment(environment());
this.vm.inputs.configureWith(message);
this.messageBodyTextViewText.assertValues(message.body());
}
@Test
public void testParticipantAvatarImage_CurrentUserIsRecipient() {
final User recipient = UserFactory.user().toBuilder().name("Ima Backer").id(123).build();
final User sender = UserFactory.user().toBuilder().name("Ima Creator").id(456).build();
final Message message = MessageFactory.message().toBuilder()
.recipient(recipient)
.sender(sender)
.build();
final MockCurrentUser currentUser = new MockCurrentUser(recipient);
setUpEnvironment(environment().toBuilder().currentUser(currentUser).build());
this.vm.inputs.configureWith(message);
// Avatar shown for sender who is the creator.
this.participantAvatarImageHidden.assertValues(false);
this.participantAvatarImageUrl.assertValues(message.sender().avatar().medium());
}
@Test
public void testParticipantAvatarImage_CurrentUserIsSender() {
final User recipient = UserFactory.user().toBuilder().name("Ima Creator").id(123).build();
final User sender = UserFactory.user().toBuilder().name("Ima Backer").id(456).build();
final Message message = MessageFactory.message().toBuilder()
.recipient(recipient)
.sender(sender)
.build();
final MockCurrentUser currentUser = new MockCurrentUser(sender);
setUpEnvironment(environment().toBuilder().currentUser(currentUser).build());
this.vm.inputs.configureWith(message);
// Avatar hidden for sender who is the backer.
this.participantAvatarImageHidden.assertValues(true);
this.participantAvatarImageUrl.assertNoValues();
}
@Test
public void testMessageBodyTextViewFormatting_CurrentUserIsRecipient() {
final User recipient = UserFactory.user().toBuilder().name("Ima Backer").id(123).build();
final User sender = UserFactory.user().toBuilder().name("Ima Creator").id(456).build();
final Message message = MessageFactory.message().toBuilder()
.recipient(recipient)
.sender(sender)
.build();
final MockCurrentUser currentUser = new MockCurrentUser(recipient);
setUpEnvironment(environment().toBuilder().currentUser(currentUser).build());
this.vm.inputs.configureWith(message);
this.messageBodyTextViewAlignParentEnd.assertValues(false);
this.messageBodyTextViewBackgroundColorInt.assertValues(R.color.ksr_grey_400);
this.messageBodyTextViewTextColorInt.assertValues(R.color.ksr_text_navy_700);
}
@Test
public void testMessageBodyTextViewFormatting_CurrentUserIsSender() {
final User recipient = UserFactory.user().toBuilder().name("Ima Creator").id(123).build();
final User sender = UserFactory.user().toBuilder().name("Ima Backer").id(456).build();
final Message message = MessageFactory.message().toBuilder()
.recipient(recipient)
.sender(sender)
.build();
final MockCurrentUser currentUser = new MockCurrentUser(sender);
setUpEnvironment(environment().toBuilder().currentUser(currentUser).build());
this.vm.inputs.configureWith(message);
this.messageBodyTextViewAlignParentEnd.assertValues(true);
this.messageBodyTextViewBackgroundColorInt.assertValues(R.color.black);
this.messageBodyTextViewTextColorInt.assertValues(R.color.white);
}
}