From 1dfebb070e855c84a2ed4d09e290e06adef4a531 Mon Sep 17 00:00:00 2001 From: David Vavra Date: Wed, 2 Mar 2022 16:12:44 +0100 Subject: [PATCH] Test for a case when FragmentManager is destroyed --- .../com/okta/oidc/OktaResultFragmentTest.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/library/src/test/java/com/okta/oidc/OktaResultFragmentTest.java b/library/src/test/java/com/okta/oidc/OktaResultFragmentTest.java index 159cb462..9b6806e1 100644 --- a/library/src/test/java/com/okta/oidc/OktaResultFragmentTest.java +++ b/library/src/test/java/com/okta/oidc/OktaResultFragmentTest.java @@ -15,12 +15,22 @@ package com.okta.oidc; +import static android.app.Activity.RESULT_OK; +import static com.okta.oidc.AuthenticationResultHandler.handler; +import static com.okta.oidc.OktaAuthenticationActivity.EXTRA_EXCEPTION; +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 android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; import androidx.test.platform.app.InstrumentationRegistry; import com.okta.oidc.net.request.ProviderConfiguration; @@ -38,11 +48,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import static android.app.Activity.RESULT_OK; -import static com.okta.oidc.AuthenticationResultHandler.handler; -import static com.okta.oidc.OktaAuthenticationActivity.EXTRA_EXCEPTION; -import static org.mockito.Mockito.verify; - @RunWith(RobolectricTestRunner.class) @Config(sdk = 27) public class OktaResultFragmentTest { @@ -134,6 +139,29 @@ public void handleAuthorizationResponseLogoutSuccess() throws AuthorizationExcep assert (resultTypeCapture.getValue() == AuthenticationResultHandler.ResultType.SIGN_OUT); } + @Test + public void handleAuthorizationResponseLogoutSuccessWhenFragmentManagerIsDestroyed() throws AuthorizationException { + FragmentManager mockFragmentManager = mock(FragmentManager.class); + FragmentActivity spyActivity = spy(mActivity); + when(spyActivity.getSupportFragmentManager()).thenReturn(mockFragmentManager); + when(mockFragmentManager.isDestroyed()).thenReturn(true); + + OktaResultFragment.addLogoutFragment(TestValues.getAuthorizeRequest(mConfig, null), mCustomTabOptions, mActivity, new String[]{}); + handler().setAuthenticationListener(listener); + Intent intent = new Intent(); + intent.setData(Uri.parse("com.okta.test:/logout?state=" + CUSTOM_STATE)); + + getOktaResultFragment(mActivity).onActivityResult(OktaResultFragment.REQUEST_CODE_SIGN_OUT, RESULT_OK, intent); + + ArgumentCaptor resultCapture = ArgumentCaptor.forClass(AuthenticationResultHandler.StateResult.class); + ArgumentCaptor resultTypeCapture = ArgumentCaptor.forClass(AuthenticationResultHandler.ResultType.class); + verify(listener).postResult(resultCapture.capture(), resultTypeCapture.capture()); + + assert (getOktaResultFragment(mActivity) == null); + assert (resultCapture.getValue().getStatus() == AuthenticationResultHandler.Status.LOGGED_OUT); + assert (resultTypeCapture.getValue() == AuthenticationResultHandler.ResultType.SIGN_OUT); + } + @Test public void handleAuthorizationResponseLogoutFailed() throws AuthorizationException { OktaResultFragment.addLogoutFragment(TestValues.getAuthorizeRequest(mConfig, null), mCustomTabOptions, mActivity, new String[]{});