package com.badoo.chateau.example.ui.session.login;
import android.support.annotation.NonNull;
import android.support.test.espresso.action.ViewActions;
import android.support.test.runner.AndroidJUnit4;
import com.badoo.chateau.example.BaseTestCase;
import com.badoo.chateau.example.R;
import com.badoo.chateau.example.data.model.ExampleUser;
import com.badoo.chateau.example.ui.Injector;
import com.badoo.chateau.example.ui.session.login.LoginPresenter.LoginFlowListener;
import com.badoo.chateau.example.ui.session.login.LoginPresenter.LoginView;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.closeSoftKeyboard;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(AndroidJUnit4.class)
public class LoginActivityTest extends BaseTestCase<LoginActivity> {
public static final String USERNAME = "username";
public static final String PASSWORD = "password";
private LoginPresenterImpl<ExampleUser> mPresenter;
@Override
protected void beforeActivityLaunched() {
//noinspection unchecked
mPresenter = mock(LoginPresenterImpl.class);
Injector.register(LoginActivity.class, new LoginActivity.DefaultConfiguration() {
@Override
protected LoginPresenter createLoginPresenter(@NonNull LoginView view, @NonNull LoginFlowListener flowListener) {
return mPresenter;
}
});
}
@Override
protected Class<LoginActivity> getActivityClass() {
return LoginActivity.class;
}
@Test
public void signinWithEmptyData() {
// When
onView(withId(R.id.login_sign_in_button)).perform(click());
// Then
verify(mPresenter).onSignIn("", "");
}
@Test
public void gotoRegisterScreen() {
// When
onView(withId(R.id.login_not_registered_button)).perform(click());
// Then
verify(mPresenter).onNotRegistered();
}
@Test
public void signinWithAllDetails() {
// Given
onView(withId(R.id.login_username_inner)).perform(ViewActions.typeText(USERNAME));
onView(withId(R.id.login_password_inner)).perform(ViewActions.typeText(PASSWORD));
// When
closeSoftKeyboard();
onView(withId(R.id.login_sign_in_button)).perform(click());
verify(mPresenter).onSignIn(USERNAME, PASSWORD);
}
}