package com.pindroid.activity;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Intent;
import android.support.annotation.NonNull;
import com.pindroid.BuildConfig;
import com.pindroid.Constants;
import com.pindroid.application.PindroidApplication;
import com.pindroid.authenticator.AuthenticatorActivity;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowAccountManager;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ActivityController;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Robolectric.buildActivity;
import static org.robolectric.Shadows.shadowOf;
@RunWith(RobolectricTestRunner.class)
@Config(constants=BuildConfig.class, sdk=23)
public class FragmentBaseActivityTest {
private ActivityController<TestActivity> controller;
private ShadowApplication shadowApp;
@Before
public void beforeEachTest() {
controller = buildActivity(TestActivity.class);
shadowApp = shadowOf(RuntimeEnvironment.application);
}
@Test
public void activity_startsAuthenticationOnNoAccount() {
controller.create().start().resume();
final Intent intent = shadowApp.getNextStartedActivity();
assertThat(intent.getComponent().getClassName()).isEqualTo(AuthenticatorActivity.class.getName());
}
@Test
public void activity_setsSubtitleOnMultipleAccounts() {
controller.create();
addPinboardAccount("test");
addPinboardAccount("test_2");
controller.start().resume();
final CharSequence subtitle = controller.get().getSupportActionBar().getSubtitle();
assertThat(subtitle).isEqualTo("test_2");
}
private void addPinboardAccount(@NonNull String name) {
final AccountManager am = ShadowAccountManager.get(RuntimeEnvironment.application);
final Account account = new Account(name, Constants.ACCOUNT_TYPE);
am.addAccountExplicitly(account, "password", null);
((PindroidApplication) RuntimeEnvironment.application).setUsername(name);
}
public static class TestActivity extends FragmentBaseActivity {
@Override
protected void startSearch(String query) {
throw new IllegalStateException("Shouldn't happen in this test");
}
@Override
protected void changeAccount() {
// no-op in test
}
}
}