package com.klarna.ondemand;
import android.content.Intent;
import android.view.MenuItem;
import android.webkit.WebView;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.tester.android.view.TestMenuItem;
import org.robolectric.util.ActivityController;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(emulateSdk = 18)
@PrepareForTest(Context.class)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
public class PreferencesActivityTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
private android.content.Context context;
private ActivityController<PreferencesActivity> preferencesActivityController;
private PreferencesActivity preferencesActivity;
@Before
public void beforeEach() {
context = Robolectric.application.getApplicationContext();
PowerMockito.mockStatic(Context.class);
when(Context.getApiKey()).thenReturn("test_skadoo");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(preferencesActivity.EXTRA_USER_TOKEN, "my_token");
preferencesActivityController = Robolectric.buildActivity(PreferencesActivity.class).withIntent(intent).create();
preferencesActivity = spy(preferencesActivityController.get());
}
@Test
public void handleUserErrorEvent_ShouldCallFinishWithResultError() {
preferencesActivity.handleUserErrorEvent();
verify(preferencesActivity).setResult(RegistrationActivity.RESULT_ERROR);
verify(preferencesActivity).finish();
}
@Test
public void handleUserReadyEvent_ShouldLoadPreferencesUrl() {
WebView webView = mock(WebView.class);
when(preferencesActivity.getWebView()).thenReturn(webView);
preferencesActivity.handleUserReadyEvent(null);
verify(webView).loadUrl(UrlHelper.preferencesUrl(context, "my_token"));
}
@Test
public void homeButtonPress_ShouldCallFinishWithResultCanceled() {
MenuItem item = new TestMenuItem() {
public int getItemId() {
return android.R.id.home;
}
};
preferencesActivity.onOptionsItemSelected(item);
verify(preferencesActivity).setResult(RegistrationActivity.RESULT_OK);
verify(preferencesActivity).finish();
}
@Test
public void backButtonPress_ShouldCallFinishWithResultOK() {
preferencesActivity.onBackPressed();
verify(preferencesActivity).setResult(RegistrationActivity.RESULT_OK);
verify(preferencesActivity).finish();
}
}