Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 398ca1ad authored by Fan Wu's avatar Fan Wu
Browse files

Fix SurveyMixinTest

The test doesn't need to mock fragment at all, just need to pass in a fragment without activity.

Bug: 314929422

Test: atest
Change-Id: I9fb2f38c9c00109dd0d74c8f1e0d405022f634e3
parent 407a6d27
Loading
Loading
Loading
Loading
+25 −22
Original line number Diff line number Diff line
@@ -2,53 +2,56 @@ package com.android.settings.survey;

import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.testing.FragmentScenario;
import androidx.test.core.app.ApplicationProvider;

import androidx.fragment.app.FragmentActivity;

import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.overlay.SurveyFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

@RunWith(RobolectricTestRunner.class)
public class SurveyMixinTest {
    @Rule
    public final MockitoRule mMockitoRule = MockitoJUnit.rule();

    private static final String FAKE_KEY = "fake_key";

    private Context mContext;
    private SurveyFeatureProvider mProvider;
    @Mock
    private InstrumentedPreferenceFragment mFragment;

    @Before
    public void setUp() {
        // set up the fakefeature factory to mock out the survey provider
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mProvider = FakeFeatureFactory.setupForTest().getSurveyFeatureProvider(mContext);
        mProvider = FakeFeatureFactory.setupForTest().getSurveyFeatureProvider(
                ApplicationProvider.getApplicationContext());
    }

    @Ignore("b/314929422")
    @Test
    public void onResume_noActionIfActivityDoesNotExist() {
        // Pretend we are an activity that is starting up
        FragmentActivity temp = Robolectric.setupActivity(FragmentActivity.class);
        when(mFragment.getActivity()).thenReturn(null);
        SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
        // Initialize a fragment without associating with an activity
        Fragment fragment = new Fragment();
        SurveyMixin mixin = new SurveyMixin(fragment, FAKE_KEY);
        mixin.onResume();

        verify(mProvider, times(0)).sendActivityIfAvailable(FAKE_KEY);
    }

    @Test
    public void onResume_sendActivityWhenSurveyFeatureExists() {
        try (var fragmentScenario = FragmentScenario.launch(Fragment.class)) {
            fragmentScenario.onFragment(fragment -> {
                SurveyMixin mixin = new SurveyMixin(fragment, FAKE_KEY);
                mixin.onResume();
            });
        }
        // Verify one send activity action is attempted
        verify(mProvider).sendActivityIfAvailable(FAKE_KEY);
    }
}