package com.kickstarter.viewmodels; import android.support.annotation.NonNull; import com.kickstarter.KSRobolectricTestCase; import com.kickstarter.factories.ApiExceptionFactory; import com.kickstarter.libs.Environment; import com.kickstarter.models.User; import com.kickstarter.services.ApiClientType; import com.kickstarter.services.MockApiClient; import org.junit.Test; import rx.Observable; import rx.observers.TestSubscriber; public final class ResetPasswordViewModelTest extends KSRobolectricTestCase { @Test public void testResetPasswordViewModel_formValidation() { final ResetPasswordViewModel vm = new ResetPasswordViewModel(environment()); final TestSubscriber<Boolean> test = new TestSubscriber<>(); koalaTest.assertValues("Forgot Password View"); vm.outputs.isFormValid().subscribe(test); vm.inputs.email("incorrect@kickstarter"); test.assertValues(false); vm.inputs.email("hello@kickstarter.com"); test.assertValues(false, true); koalaTest.assertValueCount(1); } @Test public void testResetPasswordViewModel_resetSuccess() { final ResetPasswordViewModel vm = new ResetPasswordViewModel(environment()); final TestSubscriber<Void> test = new TestSubscriber<>(); koalaTest.assertValues("Forgot Password View"); vm.outputs.resetSuccess().subscribe(test); vm.inputs.resetPasswordClick(); test.assertNoValues(); vm.inputs.email("hello@kickstarter.com"); test.assertNoValues(); vm.inputs.resetPasswordClick(); test.assertValueCount(1); koalaTest.assertValues("Forgot Password View", "Forgot Password Requested"); } @Test public void testResetPasswordViewModel_resetFailure() { final ApiClientType apiClient = new MockApiClient() { @Override public @NonNull Observable<User> resetPassword(final @NonNull String email) { return Observable.error(ApiExceptionFactory.badRequestException()); } }; final Environment environment = environment().toBuilder() .apiClient(apiClient) .build(); final ResetPasswordViewModel vm = new ResetPasswordViewModel(environment); final TestSubscriber<String> errorTest = new TestSubscriber<>(); koalaTest.assertValues("Forgot Password View"); vm.errors.resetError().subscribe(errorTest); vm.inputs.email("hello@kickstarter.com"); vm.inputs.resetPasswordClick(); errorTest.assertValue("bad request"); koalaTest.assertValues("Forgot Password View", "Forgot Password Errored"); } }