package com.klarna.ondemand;
import android.app.Activity;
import android.content.Intent;
import android.view.MenuItem;
import org.assertj.core.api.Assertions;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
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 java.util.HashMap;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(RobolectricTestRunner.class)
@Config(emulateSdk = 18)
@PrepareForTest({ Context.class, UrlHelper.class })
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
public class RegistrationActivityTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
private ActivityController<RegistrationActivity> registrationActivityController;
private RegistrationActivity registrationActivity;
@Before
public void beforeEach() {
mockStatic(Context.class);
when(Context.getApiKey()).thenReturn("test_skadoo");
mockStatic(UrlHelper.class);
when(UrlHelper.registrationUrl((android.content.Context)anyObject(),(RegistrationSettings)anyObject())).thenReturn("my_url");
registrationActivityController = Robolectric.buildActivity(RegistrationActivity.class).create();
registrationActivity = spy(registrationActivityController.get());
}
@Test
public void handleUserReadyEvent_ShouldPutRegistrationResultInExtraAndCallFinishWithResultOk() {
registrationActivity.handleUserReadyEvent(new HashMap<Object, Object>() {{
put("userToken", "my_token");
}});
Intent expectedIntent = new Intent();
expectedIntent.putExtra(RegistrationActivity.EXTRA_USER_TOKEN, "my_token");
verify(registrationActivity).setResult(eq(Activity.RESULT_OK), eq(expectedIntent));
verify(registrationActivity).finish();
}
@Test
public void handleUserErrorEvent_ShouldCallFinishWithResultError() {
registrationActivity.handleUserErrorEvent();
verify(registrationActivity).setResult(RegistrationActivity.RESULT_ERROR);
verify(registrationActivity).finish();
}
@Test
public void homeButtonPress_ShouldCallFinishWithResultCanceled() {
MenuItem item = new TestMenuItem() {
public int getItemId() {
return android.R.id.home;
}
};
registrationActivity.onOptionsItemSelected(item);
verify(registrationActivity).setResult(RegistrationActivity.RESULT_CANCELED);
verify(registrationActivity).finish();
}
@Test
public void backButtonPress_ShouldCallShowDismissAlert() {
registrationActivity.onBackPressed();
verify(registrationActivity).showDismissAlert();
}
//Missing specs for getSimCardPhoneNumber() and getDevicePhoneNumber(), due to inability to mock Activities in the current testing environment.
}