package de.vanmar.android.yarrn;
import android.app.Activity;
import android.content.Intent;
import com.androidquery.util.AQUtility;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.shadows.ShadowActivity;
import org.robolectric.util.ActivityController;
import org.scribe.model.Response;
import org.scribe.oauth.OAuthService;
import java.lang.Thread.UncaughtExceptionHandler;
import de.vanmar.android.yarrn.mocking.OAuthRequestForMocking;
import de.vanmar.android.yarrn.ravelry.GetAccessTokenActivity;
import de.vanmar.android.yarrn.ravelry.GetAccessTokenActivity_;
import de.vanmar.android.yarrn.ravelry.ResultCallback;
import de.vanmar.android.yarrn.util.MyRobolectricTestRunner;
import de.vanmar.android.yarrn.util.NetworkHelper;
import de.vanmar.android.yarrn.util.RequestCode;
import de.vanmar.android.yarrn.util.TestUtil;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@RunWith(MyRobolectricTestRunner.class)
public class AbstractRavelryActivityUnitTest {
private AbstractRavelryActivity activity;
@Mock
private OAuthService oauthService;
@Mock
private NetworkHelper networkHelper;
@Mock
private OAuthRequestForMocking request;
@Mock
private ResultCallback<String> callback;
@Mock
private Response response;
@Mock
private UncaughtExceptionHandler exceptionHandler;
@Before
public void prepare() {
MockitoAnnotations.initMocks(this);
ActivityController<MainActivity_> activityController = Robolectric.buildActivity(MainActivity_.class);
activityController.create();
activity = activityController.get();
activity.service = oauthService;
activity.networkHelper = networkHelper;
TestUtil.mockBackgroundExecutor();
TestUtil.mockValidUser(activity.prefs);
AQUtility.setExceptionHandler(exceptionHandler);
}
@Test
public void shouldRequestToken() {
// when
activity.requestToken();
// then
ShadowActivity.IntentForResult startedActivityForResult = Robolectric.shadowOf(activity).getNextStartedActivityForResult();
assertNotNull("should start activity", startedActivityForResult);
assertTrue(((Object) startedActivityForResult.intent).equals(new Intent(activity,
GetAccessTokenActivity_.class)));
}
@Test
public void shouldSaveTokenAndUsernameFromAccessTokenActivity() {
// given
Intent intent = new Intent();
String username = "username";
String accesstoken = "accesstoken";
String accesssecret = "accesssecret";
String requesttoken = "requesttoken";
intent.putExtra(GetAccessTokenActivity.EXTRA_USERNAME, username);
intent.putExtra(GetAccessTokenActivity.EXTRA_ACCESSTOKEN, accesstoken);
intent.putExtra(GetAccessTokenActivity.EXTRA_ACCESSSECRET, accesssecret);
intent.putExtra(GetAccessTokenActivity.EXTRA_REQUESTTOKEN, requesttoken);
// when
activity.onActivityResult(RequestCode.REQUEST_CODE_GET_TOKEN, Activity.RESULT_OK, intent);
// then
assertThat(activity.prefs.username().get(), is(username));
assertThat(activity.prefs.accessToken().get(), is(accesstoken));
assertThat(activity.prefs.accessSecret().get(), is(accesssecret));
assertThat(activity.prefs.requestToken().get(), is(requesttoken));
}
/* @Test
public void shouldRedirectToLoginIfUsernameNotFound() {
// given
given(request.send()).willReturn(response);
given(response.getCode()).willReturn(200);
activity.prefs.username().put("");
// when
activity.callRavelry(request, callback);
// then
verify(callback, never()).onSuccess(anyString());
final Intent nextStartedActivity = Robolectric.shadowOf(activity)
.getNextStartedActivity();
assertNotNull(nextStartedActivity);
assertEquals(
Robolectric.shadowOf(nextStartedActivity).getIntentClass(),
GetAccessTokenActivity_.class);
}*/
}